我是靠谱客的博主 虚拟丝袜,这篇文章主要介绍什么是TOML?PHP中怎么配置使用TOML,现在分享给大家,希望可以做个参考。

本篇文章带大家聊聊PHP中的TOML配置,介绍一下在 PHP 中如何使用 TOML 配置文件格式语言,希望对大家有所帮助!

TOML 是一个配置格式化语言,特色是简洁易读。 全称为 "Tom's Obvious, Minimal Language" 其中的 Tom 为创建者 —— Tom Preston-Werner (译者注:Github CEO)。

来自其 Github Reopo,TOML 的目的如下:

TOML 和 PHP 在一起

各种语言的 TOML 解析器可以 在其项目 WIKI 中找到。

我们将利用 yosymfony/toml: 一个 PHP 的 TOML 解析器 来尝试下 TOML 语言,在你的 PHP 7.1+ 项目里使用 Composer:

复制代码
1
composer require yosymfony/toml
登录后复制

TOML 的项目 Readme 里有一个示例配置信息,我们可以试着用起来:

复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
## This is a TOML document. title = "TOML Example" [owner] name = "Tom Preston-Werner" dob = 1979-05-27T07:32:00-08:00 # First class dates [database] server = "192.168.1.1" ports = [ 8001, 8001, 8002 ] connection_max = 5000 enabled = true [servers] # Indentation (tabs and/or spaces) is allowed but not required [servers.alpha] ip = "10.0.0.1" dc = "eqdc10" [servers.beta] ip = "10.0.0.2" dc = "eqdc10" [clients] data = [ ["gamma", "delta"], [1, 2] ] # Line breaks are OK when inside arrays hosts = [ "alpha", "omega" ]
登录后复制

下面是 PHP 的解析和输出:

复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
<?php use YosymfonyTomlToml; require __DIR__ . '/vendor/autoload.php'; $data = Toml::ParseFile(__DIR__.'/example.toml'); var_dump($data); // output php index.php string(10) "1979-05-27" toml-demo|⇒ php index.php array(5) { ["title"]=> string(12) "TOML Example" ["owner"]=> array(2) { ["name"]=> string(18) "Tom Preston-Werner" ["dob"]=> object(DateTime)#243 (3) { ["date"]=> string(26) "1979-05-27 07:32:00.000000" ["timezone_type"]=> int(1) ["timezone"]=> string(6) "-08:00" } } ["database"]=> array(4) { ["server"]=> string(11) "192.168.1.1" ["ports"]=> array(3) { [0]=> int(8001) [1]=> int(8001) [2]=> int(8002) } ["connection_max"]=> int(5000) ["enabled"]=> bool(true) } ["servers"]=> array(2) { ["alpha"]=> array(2) { ["ip"]=> string(8) "10.0.0.1" ["dc"]=> string(6) "eqdc10" } ["beta"]=> array(2) { ["ip"]=> string(8) "10.0.0.2" ["dc"]=> string(6) "eqdc10" } } ["clients"]=> array(2) { ["data"]=> array(2) { [0]=> array(2) { [0]=> string(5) "gamma" [1]=> string(5) "delta" } [1]=> array(2) { [0]=> int(1) [1]=> int(2) } } ["hosts"]=> array(2) { [0]=> string(5) "alpha" [1]=> string(5) "omega" } } }
登录后复制

配置信息示例

接下来我们试着将 Laravel 的配置信息 config/database.php 解析为 TOML ,做个对比。

需要注意的是,这只是一个示范,Laravel 的配置系统要比 TOML 高级很多,这里这样做的目的只是想在我们熟悉的配置信息里去理解 TOML:

复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
[database] default = "mysql" migrations = "migrations" [database.connections.sqlite] driver = "sqlite" database = "path/to/database.sqlite" prefix = "" [database.connections.mysql] driver = "mysql" host = "127.0.0.1" port = "3306" database = "forge" username = "forge" password = "" unix_socket = "" charset = "utf8mb4" collation = "utf8mb4_unicode_ci" prefix = "" strict = true [database.redis] client = "predis" [database.redis.default] host = "127.0.0.1" password = "" port = 6379 database = 0
登录后复制

目前来讲,TOML 并不允许 nilnull 值,这在一些使用 null 作为默认值的场景下会变得很不方便。

缩进是允许的,但是不强求,上面的文件使用以下写法也不会有问题:

复制代码
1
2
3
4
5
6
7
8
9
10
[database] default = "mysql" migrations = "migrations" [database.connections.sqlite] driver = "sqlite" database = "path/to/database.sqlite" prefix = "" # ...
登录后复制

构建一个 TOML 配置文件

扩展包 yosymfony/toml 除了提供解析 TOML 文件和字串外,还提供了一个 TomlBuilder 类,用来实时构建 TOML 配置信息,接下来我们还是使用 Laravel 的 config/services.php 来作为例子讲解:

复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
<?php use YosymfonyTomlTomlBuilder; require __DIR__.'/vendor/autoload.php'; $builder = new TomlBuilder(); $services = $builder ->addComment('Third Party Services') ->addComment('Mailgun') ->addTable('services.mailgun') ->addValue('domain', 'mg.example.com') ->addValue('secret', 'mailgun-secret') ->addComment('Stripe') ->addTable('services.stripe') ->addValue('model', 'AppUser') ->addValue('key', 'stripe-key') ->addValue('secret', 'stripe-secret') ; file_put_contents(__DIR__.'/services.toml', $services->getTomlString());
登录后复制

生成的内容如下:

复制代码
1
2
3
4
5
6
7
8
9
10
11
12
#Third Party Services #Mailgun [services.mailgun] domain = "mg.example.com" secret = "mailgun-secret" #Stripe [services.stripe] model = "App\User" key = "stripe-key" secret = "stripe-secret"
登录后复制

日期

TOML 支持 RFC 3339 制定的日期格式:

复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
# Offset Date-Time odt1 = 1979-05-27T07:32:00Z odt2 = 1979-05-27T00:32:00-07:00 odt3 = 1979-05-27T00:32:00.999999-07:00 # space permitted per the RFC 3339 spec odt4 = 1979-05-27 07:32:00Z # Local Date-Time ldt1 = 1979-05-27T07:32:00 # Local Date ld1 = 1979-05-27 # Local Time lt1 = 07:32:00 lt2 = 00:32:00.999999
登录后复制

在此篇文章编写时,上面大部分的格式都出现了错误,除了下面这一行:

复制代码
1
dob = 1979-05-27T07:32:00-08:00
登录后复制

PHP 解析器会将解析成功输出为 DateTime 实例:

复制代码
1
2
3
4
5
6
7
8
9
10
11
array(1) { ["dob"]=> object(DateTime)#128 (3) { ["date"]=> string(26) "1979-05-27 07:32:00.000000" ["timezone_type"]=> int(1) ["timezone"]=> string(6) "-08:00" } }
登录后复制

阅读更多

前往官方项目页了解更多信息 —— GitHub -- toml-lang/toml: Tom's Obvious, Minimal Language。

项目 Wiki 里可以找到各种语言的解析器: toml-lang/toml Wiki 。

推荐学习:《PHP视频教程》

以上就是什么是TOML?PHP中怎么配置使用TOML的详细内容,更多请关注靠谱客其它相关文章!

最后

以上就是虚拟丝袜最近收集整理的关于什么是TOML?PHP中怎么配置使用TOML的全部内容,更多相关什么是TOML内容请搜索靠谱客的其他文章。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(128)

评论列表共有 0 条评论

立即
投稿
返回
顶部