Phalcon PHPを使ってみる。

スポンサーリンク

こんにちは。ファガイです。
本日はPhalcon PHPというPHPフレームワークを触ってみます。

Phalconとは?

Phalconは一番高速なPHPフレームワークです。
内部がC言語で書かれており、PHP Moduleとして動作します。
そりゃあ早いよね。

導入

導入ですが、前提としてサーバーをいじれる環境でなければいけません。
つまり、共有サーバー等ではPhalconを入れることは無理です。(まずモジュールを追加出来ない)

その点を理解した上でやっていきます。

ダウンロードや、先に必要な物は以下のURLに書いてあります。yum等でのインストールは先にやっておいてださい。
phalconphp download

主の環境

  • CentOS 6.4
  • Apache 2.2くらい?
  • MySQL 5.5くらい?
    です。

では、cloneして、

# git clone git://github.com/phalcom/cphalcon.git

移動して、インストール

cd cphalcon/build
./install

自分の場合はここでエラーが出ました。私はチュートリアルを見ていたのでlibtoolというものが欠けてました。どうやらチュートリアルは更新がしっかりとされてなかったようです。

ちょっと困ったことも有りましたが、コンプリート。

Build complete.
Don't forget to run 'make test'.

Installing shared extensions:     /usr/lib/php/modules/

Thanks for compiling Phalcon!
Build succeed: Please restart your web server to complete the installation

終わったので、php.iniに    

extension=phalcon.so

を追加しました。

apacheを再起動しておきます。

service httpd restart

ちゃんとextensionがロードされているか確認します。

<?php
print_r(get_loaded_extensions());

・・・!?

無い・・・・
なので、試しに
/etc/php.d/phalcon.ini
を作り、その中でextensionを指定し、restart。

入っているのを確認。

tutorial

公式のチュートリアルがあるようなので、それに沿っていきます。

チュートリアルを取ってきます。(自分はここで/var/www/htmlにクローンしてます)

git clone https://github.com/phalcon/tutorial.git

ディレクトリ構造はこんな感じですね。

tutorial/
  app/
    controllers/
    models/
    views/
  public/
    css/
    img/
    js/

まずは、tutorialの中にある.httaccessを見ます

<IfModule mod_rewrite.c>
RewriteEngine on
RewriteRule^$ public/[L]
RewriteRule(.*) public/$1 [L]
</IfModule>

どうやら、ここではpublicを見るというルーティングがされているようですね

publicの中にも.htaccessがありました。

<IfModule mod_rewrite.c>
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.*)$ index.php?_url=/$1 [QSA,L]
</IfModule>

こっちは良く分かってないです。
知り合いに聞いた所、/public/hogeにアクセスしようとすると、/public/index.php?_url=hogeにルーティングがされているようです。

publicの中にあるindex.phpを見ていきます。

falconのloaderクラスをインスタンスとして作り、ディレクトリの登録をしていますね。

//Register an autoloader
$loader = new \Phalcon\Loader();
$loader->registerDirs(
    array(
        '../app/controllers/',
        '../app/models/'
    )
)->register();

次にDBの設定のようです。

//Create a DI
$di = new Phalcon\DI\FactoryDefault();

//Set the database service
$di->set('db', function(){
    return new \Phalcon\Db\Adapter\Pdo\Mysql(array(
        "host" => "localhost",
        "username" => "root",
        "password" => "secret",
        "dbname" => "test_db"
    ));
});

diが何の略なんでしょうか、Database I・・・なんだろう。
FactoryDefaultと書いているので、DefaultのDB設定でしょう。

次にviewの設定ですね。ここでMVCであることが分かります。

//Setting up the view component
$di->set('view', function(){
    $view = new \Phalcon\Mvc\View();
    $view->setViewsDir('../app/views/');
    return $view;
});

どうやらDIの略は間違ってたようです。気になり始めたので調べる。どうやら、Dependency Injectionの略らしい。デザインパターンに基づいて作られたコンポーネント群を集中管理するらしい。

viewに関しては何もいうことはないですね。

最後にApplicationを生成していますね。

//Handle the request
$application = new \Phalcon\Mvc\Application();
$application->setDI($di);
echo $application->handle()->getContent();

といったところでしょうか。

コントローラーを作成

ではコントローラーを見て行きましょう。app/IndexController.phpを見ます。(どうやらファイル名はUpperCamelCaseのようですね。)

<?php
class IndexController extends Phalcon\Mvc\Controller
{
    public function indexAction()
    {

    }
}

どうやら、Controller名とファイル名は同じ形式で書くようですね。
アクションは語尾にActionを付けるようです。

それでは、indexActionの部分に

echo "<h1>Hello!</h1>";

を書いてみます。

で、表示。

チュートリアルと違って、Sign Up Here!というものが出てました。
Viewに書いているのでしょうか。結局、アクセスしても404でしたが。

viewに分ける際には、viewsの中にindexフォルダを作り、その中でアクション名.phtmlとすれば良いようです。
どうやら、先程Sign UP Here!が出たと思うのですが、これはチュートリアルのファイルを使っているとviewsの中に既にファイルがあったため、こちらが呼ばれたのでしょう。(確認したい方は確認して下さい。)

後は順にやっていけばいい感じですね。
ただ気になったのがURLの部分ですね。

htmlフォルダ内tutorialフォルダを置いていたのですが、どうやらリンクのタグはrootから取る仕様っぽいです。なのでSign Up Here!に飛ぶことが出来なかったわけですね。
では、バーチャルホスト等の指定が必要ですね。

余談

どうやらdiに設定をすることでURLのベース値を変えれました!

//URL settings
$di->set('url', function(){
    $url = new Phalcon\Mvc\Url();
    $url->setBaseUri('/tutorial/');
    return $url;
});

自分はこれをhandle the requestの上に記述しました。

tutorialの所を変えればベースのURLの名前が変えられます。

とこんな感じですね。

 まとめ

  • このチュートリアルだけではちょっとわからないかも
  • どうやらdeveloper toolsというものが公式に存在するようで、これを使うことでコード補完やFuelPHPのようにコマンドライン上でmigrationを作ったり出来る。
  • FuelPHPと違うのはGUIベースも通常で搭載されているということ。(Fuelにも一応adminはありますが、Fuelより高機能な気がします)

次回があればdeveloper toolsの入れ方について書きます。

コメント

  1. 匿名 より:

    $di->set(‘url’,…); のところ、どうやったら設定できるのかわからず探していました。ありがとうございます!

  2. team.hiroq より:

    サイト参考にさせていただきました!ありがとうございます。
    どうでもいい話ではあるのですが、DIですがDependency Injectionの略と思います。

    ではでは、失礼しました。

タイトルとURLをコピーしました