Silexを試してみた(1) - きっかけとインストール
きっかけ
仕事で、既存のシステムの拡張でOAuth2を使った認証とAPIの提供をするかもしれない、という話が出たので、個人的にOAuth2の調査を始めた。
そのシステムはphpで作られていたので、ひとまずphpで利用できるOAuth2のライブラリを調べる。
そこで、bshaffer/oauth2-server-phpのことを知り、そのデモ環境のbshaffer/oauth2-demo-phpを自分の環境で試した。
デモ環境のドキュメントを読んだ際に「Silex」というワードを知り、興味を持ったので調べてみた。
Silex
試す前に調べて知った範囲だと以下。
- php 5.3以降対応のmicro framework。
- Symfonyと同じ開発元。おそらくSymfonyに対してmicroであるという位置づけのよう。
- Sinatraの影響を受けている。
Sinatraに影響を受けていることとmicroというワードがあることから、軽量のframeworkであると予想。
試した環境
Vagrantで以下の環境を構築して試してみた。
- CentOS6.5 x86_64
- php-5.4.32
- remiレポジトリからパッケージインストールしたもの
- httpd-2.2.15
- httpdのmod_userdirモジュールを有効にして$HOME/public_htmlを作成し、そこに必要なファイルを展開。
インストール
1.Silexのダウンロード
$ cd ~/
$ curl -O http://silex.sensiolabs.org/get/silex.tgz
2.展開
$ cd ~/public_html
$ tar xvfz ../silex.tgz
3.composerのインストール
SilexのコンポーネントはComposerで管理しているので、これをインストールする。
$ cd ~/public_html/silex/
$ curl -sS https://getcomposer.org/installer | php
4.コンポーネントのアップデート
各コンポーネントの最新版のチェックとアップデート。
$ ./composer.phar update
5.htaccessの設定
本家のドキュメントに従うと、以下のようになる。
$ vi web/.htaccess
<IfModule mod_rewrite.c>
Options -MultiViews
RewriteEngine On
RewriteBase /~te2u/silex/web
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^ index.php [QSA,L]
</IfModule>
しかしこうすると、silexのディレクトリによってRewriteBase
の設定を変更しなければならない。
今回はSymfony2のhtaccessで設定している方法を採用した。
$ vi web/.htaccess
DirectoryIndex index.php
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteCond %{REQUEST_URI}::$1 ^(/.+)/(.*)::\2$
RewriteRule ^(.*) - [E=BASE:%1]
RewriteCond %{ENV:REDIRECT_STATUS} ^$
RewriteRule ^app\.php(/(.*)|$) %{ENV:BASE}/$2 [R=301,L]
RewriteCond %{REQUEST_FILENAME} -f
RewriteRule .? - [L]
RewriteRule .? %{ENV:BASE}/index.php [L]
</IfModule>
<IfModule !mod_rewrite.c>
<IfModule mod_alias.c>
RedirectMatch 302 ^/$ /index.php/
</IfModule>
</IfModule>
6.確認
http://192.168.33.11/~te2u/silex/web/hello
をブラウザで参照して、Silexが動いていることを確認。
参考
- OAuth 2.0 — OAuth
- bshaffer/oauth2-server-php
- bshaffer/oauth2-demo-php
- Homepage - Silex - The PHP micro-framework based on Symfony2 Components
- Composer
- Symfony, High Performance PHP Framework for Web Development