そういえばSymfony2なんかは設定ファイルYAMLだよなー、なんて思ってたら、PhalconでもYAMLが使いたくなった。
Phalconのインストールとかはこちら。
ゴール
$ mkdir yamltest
$ cd yamltest
$ vi test.yml
test.yml
hello:
world: World
はい、てな感じのYAMLファイルを用意します。これを読み込めればクリア。
PhalconでYAMLを読み込むには?
方法はいくらでもあると思うんですが、せっかくのPhalconなんで、Phalcon製の何かで読み込みたいですよねー?
ググってみたら、Phalcon自体には組み込まれてないそうで、代わりに、Incubatorなるライブラリ集があるみたいです。
これを利用することにします。
Incubator
Incubatorは、Phalconが提供する便利なライブラリ集のことです。もちろんPhalconがないと動きません。
Composerがない方はComposerを先に入れます。
$ curl -sS https://getcomposer.org/installer | php
$ vi composer.json
$ php composer.phar install
composer.json
{
"require": {
"phalcon/incubator": "dev-master"
}
}
Incubatorの最新版はv1.2.5
なのですが、Phalconが1.2.6のため、Composerを使ってインストールできませんでした。
今回は諦めて、素直にdev-master
使います。
ディレクトリ構造
多分こんな感じになってると思います。
$ tree .
.
├── composer.json
├── composer.lock
├── composer.phar
├── test.yml
└── vendor
├── autoload.php
├── composer
│ ├── ClassLoader.php
│ ├── autoload_classmap.php
│ ├── autoload_namespaces.php
│ ├── autoload_psr4.php
│ ├── autoload_real.php
│ └── installed.json
└── phalcon
└── incubator
├── Library
│ └── Phalcon
... 以下省略
何はともあれ書いてみる
とりあえずコードから。
index.php
<?php
$loader = new \Phalcon\Loader();
// オートローダを読み込む
include __DIR__ . '/vendor/autoload.php';
// ネームスペースを追加する
$loader->registerNamespaces(
array(
'Phalcon' => __DIR__ . '/vendor/phalcon/incubator/Library/Phalcon/',
)
)->register();
// 読み込み
$test_yaml = new \Phalcon\Config\Adapter\Yaml(__DIR__ . '/test.yml');
echo "Hello, " . $test_yaml->hello->world . "\n";
これでいけるはず!
$ php index.php
PHP Fatal error: Uncaught exception 'Phalcon\Config\Exception' with message 'Yaml extension not loaded' in /home/agen/yamltest/vendor/phalcon/incubator/Library/Phalcon/Config/Adapter/Yaml.php:24
・・・なんか出たよ?
どうやらYAMLのextensionが使えないみたいです。
peclあたりで突っ込めれば楽なんですけど、残念ながら自分の環境では使えません。
なので、ビルドすることにします。
YAMLのビルド
ここからYAML持ってきます。
$ wget http://pecl.php.net/get/yaml-1.1.1.tgz
$ tar zxvf yaml-1.1.1.tgz
$ cd yaml-1.1.1
$ phpize && make && make install
$ echo 'extension=yaml.so' >> ~/.phpenv/versions/5.5.8-phalcon/etc/php.ini
$ php -m | grep yaml
yaml
リベンジ
$ php index.php
Hello, World
出た!