LoginSignup
7
7

More than 5 years have passed since last update.

PhalconでもYAMLが使いたい!

Posted at

そういえば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

僕と契約しt(ry

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

出た!

7
7
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
7
7