今日はFuelPHPを触ってみる。
2年以上前にKohanaをつかってWebサービス作ったり、Drupalのモジュール書いたりしてた。で、久しぶりにPHPでサーバアプリを作成することになった。で、どのフレームワークを使うか検討してみたんだけど、KohanaよりFuelPHPの方がよさそう。なので、FuelPHPを触って、ついでにPHPのリハビリ。
本当はRuby on Railsでやりたいんだけどね…
早速MAMPの更新。ここんところ使ってなかったので、バージョンがちょっと上がってた。
FuelPHPのインストール
$ curl get.fuelphp.com/oil | sh
oilという実行ファイルをインストール。oilを使ってプロジェクトを作成するらしい。oilは/usr/bin/oilにインストールされる。
プロジェクトを作成
$ oil create MyToDo
と実行すると、プロジェクトに必要なファイルがダウンロードされ、プロジェクトが作成される。こんなディレクトリ構成。
.
├── docs
│ ├── assets
│ │ ├── css
│ │ ├── fonts
│ │ ├── img
│ │ └── js
│ ├── classes
│ │ ├── agent
│ │ ├── cache
│ │ ├── database
│ │ ├── file
│ │ ├── model_crud
│ │ ├── mongo
│ │ ├── session
│ │ ├── upload
│ │ └── validation
│ ├── general
│ │ └── controllers
│ ├── installation
│ ├── packages
│ │ ├── auth
│ │ ├── email
│ │ ├── oil
│ │ ├── orm
│ │ └── parser
│ └── templates
├── fuel
│ ├── app
│ │ ├── cache
│ │ ├── classes
│ │ ├── config
│ │ ├── lang
│ │ ├── logs
│ │ ├── migrations
│ │ ├── modules
│ │ ├── tasks
│ │ ├── tmp
│ │ ├── vendor
│ │ └── views
│ ├── core
│ │ ├── classes
│ │ ├── config
│ │ ├── lang
│ │ ├── tasks
│ │ ├── tests
│ │ ├── vendor
│ │ └── views
│ └── packages
│ ├── auth
│ ├── email
│ ├── oil
│ ├── orm
│ └── parser
└── public
└── assets
├── css
├── img
└── js
CodeIgniter系なのでKohanaとほぼ同じ(だっけ?)。
MAMPで表示するために
$ ln -s /Users/username/Documents/Workspace/MyToDo/public /Applications/MAMP/htdocs/mytodo
とシンボリックリンクを張る。MAMP(ポートを標準設定にしている)を起動して、http://localhost/mytodoにアクセスするとWelcomeページが表示された。
設定
まずDBの設定を行う。
MAMPのphpmyadminでデータベース「mytodo」を作成する。
fuel/app/config/development/db.phpを編集する。
dbname=mytodoとする。
return array( 'default' => array( 'connection' => array( 'dsn' => 'mysql:host=localhost;dbname=mytodo', 'username' => 'root', 'password' => 'root', ), ), );
次にORMを利用するように設定する。fuel/app/config/config.phpを編集する。packagesでormがコメントアウトされているので有効にする。認証も行うので、authも入れる。
/**************************************************************************/ /* Always Load */ /**************************************************************************/ 'always_load' => array( 'packages' => array( 'auth', 'orm', ),
また、同ファイルを以下のように変更する。
'whitelisted_classes' => array( 'Fuel\\Core\\Response', 'Fuel\\Core\\View', 'Fuel\\Core\\ViewModel', 'Fuel\Core\Validation', 'Closure', )
続いて、認証におけるグループを設定する。fuel/packages/auth/config/simpleauth.phpを編集する。
'groups' => array( -1 => array('name' => 'Banned', 'roles' => array('banned')), 0 => array('name' => 'Guests', 'roles' => array()), 1 => array('name' => 'Users', 'roles' => array('user')), 50 => array('name' => 'Moderators', 'roles' => array('user', 'moderator')), 100 => array('name' => 'Administrators', 'roles' => array('user', 'moderator', 'admin')), ),
同ファイルを編集してゲストログインができないように設定する。
'guest_login' => false,
ユーザの作成
ユーザモデルを作成する。
$ oil generate model users username:varchar[50] password:string group:int email:string last_login:int login_hash:string profile_fields:text $ oil refine migrate
oilのコンソールモードでadminユーザを作成する。
$ oil console
Fuel 1.1 - PHP 5.3.6 (cli) (Sep 15 2011 11:18:57) [Darwin]
>>> Auth::create_user('admin', 'password', 'r.izumita@example.com', 100);
Warning - Cannot modify header information - headers already sent by (output started at /Users/rizumita/Documents/Workspace/MyToDo/fuel/core/classes/cli.php:127) in COREPATH/classes/cookie.php on line 95
1
>>> [ctrl-c]コードの生成
oil genetare adminコマンドで認証付きのコードが生成される。ToDoモデルとToDoテーブル、コントローラ、ビューが作成される。
$ oil generate admin todos title:string summary:text due:datetime user_id:int $ oil refine migrate
ブラウザでadmin/todosにアクセスすると認証を求められる。

上で設定したadmin/passwordでログインする。と、Dashboardが表示される。

ナビゲーションバーにTodosがあるのでクリックするとToDoの一覧ページが表示される。

Add new TodoボタンからToDo追加画面に遷移する。
とりあえず管理画面までできた。
ユーザの選択とか日付の入力のカスタマイズはおいておく。

