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
Curotec logo

Curotec

World class Laravel experts with GenAI dev skills. LATAM-based, embedded engineers that ship fast, communicate clearly, and elevate your product. No bloat, no BS.

Curotec
Tinkerwell logo

Tinkerwell

The must-have code runner for Laravel developers. Tinker with AI, autocompletion and instant feedback on local and production environments.

Tinkerwell
Tighten logo

Tighten

We help companies turn great ideas into amazing apps, products, and services.

Tighten
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
Lucky Media logo

Lucky Media

Get Lucky Now - the ideal choice for Laravel Development, with over a decade of experience!

Lucky Media
Laravel Cloud logo

Laravel Cloud

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

Laravel Cloud