PHP中如何配置使用TOML

本篇內(nèi)容主要講解“PHP中如何配置使用TOML”,感興趣的朋友不妨來(lái)看看。本文介紹的方法操作簡(jiǎn)單快捷,實(shí)用性強(qiáng)。下面就讓小編來(lái)帶大家學(xué)習(xí)“PHP中如何配置使用TOML”吧!

創(chuàng)新互聯(lián)公司成都企業(yè)網(wǎng)站建設(shè)服務(wù),提供成都網(wǎng)站制作、成都做網(wǎng)站網(wǎng)站開(kāi)發(fā),網(wǎng)站定制,建網(wǎng)站,網(wǎng)站搭建,網(wǎng)站設(shè)計(jì),響應(yīng)式網(wǎng)站開(kāi)發(fā),網(wǎng)頁(yè)設(shè)計(jì)師打造企業(yè)風(fēng)格網(wǎng)站,提供周到的售前咨詢(xún)和貼心的售后服務(wù)。歡迎咨詢(xún)做網(wǎng)站需要多少錢(qián):028-86922220

TOML 是一個(gè)配置格式化語(yǔ)言,特色是簡(jiǎn)潔易讀。 全稱(chēng)為 "Tom's Obvious, Minimal Language" 其中的 Tom 為創(chuàng)建者 —— Tom Preston-Werner (譯者注:Github CEO)。

來(lái)自其 Github  Reopo,TOML 的目的如下:

TOML 是一門(mén)簡(jiǎn)潔易用的配置信息格式化語(yǔ)言,高可讀性來(lái)自于其優(yōu)雅的語(yǔ)法。 TOML 為哈希表數(shù)據(jù)結(jié)構(gòu)量身定制的,在各種編程語(yǔ)言里皆可以輕松地將 TOML 解析為各自的數(shù)據(jù)結(jié)構(gòu)。

TOML 和 PHP 在一起

各種語(yǔ)言的 TOML 解析器可以  在其項(xiàng)目 WIKI 中找到。

我們將利用 yosymfony/toml: 一個(gè) PHP 的 TOML 解析器 來(lái)嘗試下 TOML 語(yǔ)言,在你的 PHP 7.1+ 項(xiàng)目里使用 Composer:

composer require yosymfony/toml

TOML 的項(xiàng)目 Readme 里有一個(gè)示例配置信息,我們可以試著用起來(lái):

## 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 的解析和輸出:

<?php

use Yosymfony\Toml\Toml;

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"
    }
  }
}

配置信息示例

接下來(lái)我們?cè)囍鴮?Laravel 的配置信息 config/database.php 解析為 TOML ,做個(gè)對(duì)比。

需要注意的是,這只是一個(gè)示范,Laravel 的配置系統(tǒng)要比 TOML 高級(jí)很多,這里這樣做的目的只是想在我們熟悉的配置信息里去理解 TOML:

[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

目前來(lái)講,TOML 并不允許 nilnull 值,這在一些使用 null 作為默認(rèn)值的場(chǎng)景下會(huì)變得很不方便。

縮進(jìn)是允許的,但是不強(qiáng)求,上面的文件使用以下寫(xiě)法也不會(huì)有問(wèn)題:

[database]
default = "mysql"
migrations = "migrations"

[database.connections.sqlite]
driver = "sqlite"
database = "path/to/database.sqlite"
prefix = ""

# ...

構(gòu)建一個(gè) TOML 配置文件

擴(kuò)展包 yosymfony/toml 除了提供解析 TOML 文件和字串外,還提供了一個(gè) TomlBuilder 類(lèi),用來(lái)實(shí)時(shí)構(gòu)建 TOML 配置信息,接下來(lái)我們還是使用 Laravel 的 config/services.php 來(lái)作為例子講解:

<?php

use Yosymfony\Toml\TomlBuilder;

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', 'App\User')
        ->addValue('key', 'stripe-key')
        ->addValue('secret', 'stripe-secret')
;

file_put_contents(__DIR__.'/services.toml', $services->getTomlString());

生成的內(nèi)容如下:

#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 制定的日期格式:

# 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

在此篇文章編寫(xiě)時(shí),上面大部分的格式都出現(xiàn)了錯(cuò)誤,除了下面這一行:

dob = 1979-05-27T07:32:00-08:00

PHP 解析器會(huì)將解析成功輸出為 DateTime 實(shí)例:

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"
  }
}

到此,相信大家對(duì)“PHP中如何配置使用TOML”有了更深的了解,不妨來(lái)實(shí)際操作一番吧!這里是創(chuàng)新互聯(lián)網(wǎng)站,更多相關(guān)內(nèi)容可以進(jìn)入相關(guān)頻道進(jìn)行查詢(xún),關(guān)注我們,繼續(xù)學(xué)習(xí)!

當(dāng)前題目:PHP中如何配置使用TOML
本文來(lái)源:http://bm7419.com/article4/igdjie.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供微信小程序、網(wǎng)站維護(hù)、企業(yè)建站、、全網(wǎng)營(yíng)銷(xiāo)推廣、網(wǎng)站內(nèi)鏈

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶(hù)投稿、用戶(hù)轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀(guān)點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話(huà):028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)

外貿(mào)網(wǎng)站建設(shè)