Toml

yosymfony/toml image

Toml stats

Downloads
760.9K
Stars
181
Open Issues
5
Forks
27

View on GitHub →

A PHP parser for TOML compatible with specification 0.4.0

TOML parser for PHP

A PHP parser for TOML compatible with TOML v0.4.0.

Support:

Installation

Requires PHP >= 7.1.

Use Composer to install this package:

composer require yosymfony/toml

Usage

You can parse an inline TOML string or from a file:

To parse an inline TOML string:

use Yosymfony\Toml\Toml;
 
$array = Toml::Parse('key = [1,2,3]');
 
print_r($array);

To parse a TOML file:

$array = Toml::ParseFile('example.toml');
 
print_r($array);

Additionally, methods parse and parseFile accept a second argument called resultAsObject to return the result as an object based on stdClass.

$object = Toml::Parse('key = [1,2,3]', true);

TomlBuilder

You can create a TOML string with TomlBuilder. TomlBuilder uses a fluent interface for more readable code:

use Yosymfony\Toml\TomlBuilder;
 
$tb = new TomlBuilder();
 
$result = $tb->addComment('Toml file')
->addTable('data.string')
->addValue('name', "Toml", 'This is your name')
->addValue('newline', "This string has a \n new line character.")
->addValue('winPath', "C:\\Users\\nodejs\\templates")
->addValue('literal', '@<\i\c*\s*>') // literals starts with '@'.
->addValue('unicode', 'unicode character: ' . json_decode('"\u03B4"'))
 
->addTable('data.bool')
->addValue('t', true)
->addValue('f', false)
 
->addTable('data.integer')
->addValue('positive', 25, 'Comment inline.')
->addValue('negative', -25)
 
->addTable('data.float')
->addValue('positive', 25.25)
->addValue('negative', -25.25)
 
->addTable('data.datetime')
->addValue('datetime', new \Datetime())
 
->addComment('Related to arrays')
 
->addTable('data.array')
->addValue('simple', array(1,2,3))
->addValue('multiple', array(
array(1,2),
array('abc', 'def'),
array(1.1, 1.2),
array(true, false),
array( new \Datetime()) ))
 
->addComment('Array of tables')
 
->addArrayOfTable('fruit') // Row
->addValue('name', 'apple')
->addArrayOfTable('fruit.variety')
->addValue('name', 'red delicious')
->addArrayOfTable('fruit.variety')
->addValue('name', 'granny smith')
->addArrayOfTable('fruit') // Row
->addValue('name', 'banana')
->addArrayOfTable('fruit.variety')
->addValue('name', 'plantain')
->getTomlString(); // Generate the TOML string

The result:

#Toml file
 
[data.string]
name = "Toml" #This is your name
newline = "This string has a \n new line character."
winPath = "C:\\Users\\nodejs\\templates"
literal = '<\i\c*\s*>'
unicode = "unicode character: δ"
 
[data.bool]
t = true
f = false
 
[data.integer]
positive = 25 #Comment inline.
negative = -25
 
[data.float]
positive = 25.25
negative = -25.25
 
[data.datetime]
datetime = 2013-06-10T21:12:48Z
 
#Related to arrays
 
[data.array]
simple = [1, 2, 3]
multiple = [[1, 2], ["abc", "def"], [1.1, 1.2], [true, false], [2013-06-10T21:12:48Z]]
 
# Array of tables
 
[[fruit]]
name = "apple"
 
[[fruit.variety]]
name = "red delicious"
 
[[fruit.variety]]
name = "granny smith"
 
[[fruit]]
name = "banana"
 
[[fruit.variety]]
name = "plantain"

Limitations

The TomlBuilder class is an utility to get Toml strings that has the following limitations:

  • Only admits basic strings and literal strings.

Deprecated method

The following method will be eliminated in version 2.0.0

  • [TomlBuilder] addArrayTables

Contributing

When Contributing code to this library, you must follow its coding standards. Toml follows PSR-2 coding style. To ensure the CS, you can use the CLI tool PHP-CS-Fixer.

Unit tests

You can run the unit tests with the following command:

$ cd toml
$ composer test

License

This library is open-sourced software licensed under the MIT license.

Cube

Laravel Newsletter

Join 40k+ other developers and never miss out on new tips, tutorials, and more.


Yosymfony Toml Related Articles

Turn PHP Attributes Into Docs With Signal image

Turn PHP Attributes Into Docs With Signal

Read article
PHPverse 2026 Returns June 9th image

PHPverse 2026 Returns June 9th

Read article
PAO: Agent-Optimized Output for PHP Testing Tools image

PAO: Agent-Optimized Output for PHP Testing Tools

Read article
Measure Lines of Code and PHP Features Used image

Measure Lines of Code and PHP Features Used

Read article
PHP SDK for Anthropic Claude image

PHP SDK for Anthropic Claude

Read article
PrettyPHP is an opinionated code formatter for PHP image

PrettyPHP is an opinionated code formatter for PHP

Read article
No Compromises logo

No Compromises

Joel and Aaron, the two seasoned devs from the No Compromises podcast, are now available to hire for your Laravel project. ⬧ Flat rate of $9500/mo. ⬧ No lengthy sales process. ⬧ No contracts. ⬧ 100% money back guarantee.

No Compromises
LoadForge logo

LoadForge

Scalable load testing for web apps & APIs. Simulate real-world traffic and identify breaking points and performance limits with powerful, scalable load tests designed for Laravel.

LoadForge
Laravel Cloud logo

Laravel Cloud

Easily create and manage your servers and deploy your Laravel applications in seconds.

Laravel Cloud
Harpoon: Next generation time tracking and invoicing logo

Harpoon: Next generation time tracking and invoicing

The next generation time-tracking and billing software that helps your agency plan and forecast a profitable future.

Harpoon: Next generation time tracking and invoicing
Honeybadger logo

Honeybadger

Simple developer-focused application monitoring for Laravel. Error tracking, log management, uptime monitoring, status pages, and more!

Honeybadger
Kirschbaum logo

Kirschbaum

Providing innovation and stability to ensure your web application succeeds.

Kirschbaum