Rails 使いが FuelPHP(1.5) を使ってみた2 Scaffold編

前回生成したプロジェクトのひな形に実装をしていきます。

環境モード

FuelPHP には Rails.env のような環境モードが設定出来ます。

設定の仕方は、public/.htaccess に以下のような記述でモードを指定できます。2行目にコメントアウトされて書いてありました。

# public/.htaccess
SetEnv FUEL_ENV production

お察しの通り、環境ごとのデータベース指定や設定ファイルの読み込みの切り分けに利用できます。

デフォルトは development で動作します。

さらに、Rails の config/environments/(development|test|production).rb に当たるのが、 fuel/app/config/(development|test|production)/ です。

config/ 直下の config.php, db.php はこの環境ごとのディレクトリに入れられた設定値で上書きされるようです。

少し仕組みが違って、Rails なら database.yml にはすべての環境の設定を書きますが、db.php は環境名ごとのディレクトリに入れられているので、それぞれを編集します。

データベース設定

次に scaffold でマイグレートする必要があるので、データベース設定を済ませておきます。

fuel/app/config/development/db.php を開いて設定を行います。

それから ActiveRecord 的なORマッパーを有効にするために、fuel/app/config/config.php でコメントアウトされている行を有効にします。

'packages' => array(
  'orm',
),

これで準備OK。

(余談ですが、’always_load’  => array(… の配列のところも有効にします。なんだかコメントを挟んで見落としていたので)

Scaffold

環境の話はひとまず置いて、Rails でとても感動した scaffold の機能を使って、MVC を生成してみます。

Rails なら

rails generate scaffold articles title:string body:text

と打つところを以下ので実行します。

php oil generate scaffold articles title:string body:text

参考にしたデモだと string ではなく varchar を指定していましたが、string でも同じマイグレーションが生成されましたし、Rails に合わせて覚えやすいかと思って string でやりました。

コマンドの結果、いろいろ生成されました。

Creating migration: /path/to/proj-root/fuel/app/migrations/001_create_articles.php 
Creating model: /path/to/proj-root/fuel/app/classes/model/article.php
Creating controller: /path/to/proj-root/fuel/app/classes/controller/articles.php
Creating view: /path/to/proj-root/fuel/app/views/articles/index.php
Creating view: /path/to/proj-root/fuel/app/views/articles/view.php
Creating view: /path/to/proj-root/fuel/app/views/articles/create.php
Creating view: /path/to/proj-root/fuel/app/views/articles/edit.php
Creating view: /path/to/proj-root/fuel/app/views/articles/_form.php
Creating view: /path/to/proj-root/fuel/app/views/template.php

Rails とははディレクトリ構成が違いますが、マイグレーションが出来上がり、モデル、コントローラ、ビューと、ひと通り揃って生成されています。

001_create_articles.php を開いてみると、Rails おなじみのオートインクリメントの id カラムや、updated_at, created_at のマジックカラムも生成してくれそうな、マイグレーションが生成されていま

他のファイルはひとまず置いておいて、Rails での rake db:migrate をしてみましょう。

php oil refine migrate

データベース設定ができていればマイグレーションが成功し、テーブルが生成されます。

この場合は articles テーブルと Rails のように migrations テーブルというスキーマ管理用のテーブルも生成されます。

Rails では scaffold でルートも自動的に追記されましたが、ルートを書かなくても命名規則にそって動作するようです。

http://localhost/articles/ にアクセスするとそれっぽい画面がもうできています。

画面からのCRUD操作はひと通りできます。Rails の scaffold ばりに優秀です。

コントローラーのコード

Rails なら index, show, new, create, edit, update, destroy が定義されていますが、

index, view, create, edit, delete が定義されています(action_がプレフィックスされてます)

ルーティングで http メソッドに関与しないので、コントローラー内でメソッドを判定し、Rails の new / create, edit / update の処理を分けています。

php というか、apache がサーバなので仕方ないですが、ちょっぴり気持ちわるい感じです。

(必要なコードですけど)余計なコードも増えますし。

その他もろもろ、Rails とは変数の渡し方に作法があるような感じです。

まだ scaffold をやっただけですが、もうこれだけでかなり楽しい感じがしてきました。

フォルダ構成がやや深く、view もなんだか2つあるのでなにか使い分ける意味とか、また Rails とは違う思想があるのだろうと思います。

でもやっぱり array() で記述するのダルいなぁ…とか、シンボル、ハッシュが欲しいなぁとか。

それは php  の問題ですけど。

シェアする

  • このエントリーをはてなブックマークに追加

フォローする