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

前回立ち上げたプロジェクトの実装を進めていきます。

まずは Scaffold で生成されたコードを参考にしたいので、実行してみます。

が、その前に。

環境モード

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

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

# public/.htaccess
# SetEnv FUEL_ENV production

SetEnv の行を有効にすることで、環境を切り替えて、環境ごとのデータベース指定や設定ファイルの読み込みの切り分けを利用できます。

ちなみにデフォルトでは development として動作します。

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

config/ 直下の config.php, db.php はグローバル設定で、この環境ごとのディレクトリに入れられた同名のファイル(config.php, db.php)の設定値で上書きされるようです。

データベース設定

Scaffold でデータベースのマイグレーションをする必要があるので、先にデータベース設定を済ませておきます。

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

データベースのアドレスやユーザー名を適宜変更してください。

ちなみに前記事で vagrant で環境を立ち上げた場合は、vagrant の mysql につなぐために 192.168.40.10 へ設定してください。

パス無し root でログイン出来ます。外からのアクセスなどの設定は済ませてあるので上記 IP で接続出来ます。

データベースは予め作っておく必要があるので、vagrant ssh でログインして mysql に 任意のデータベースを作るなどしておいてください。

(rake db:create のように migrate からできるといいんだけど…)

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

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

(余談ですが、’always_load’  => array(… の配列のところも有効にします。なんだかコメントを挟んで見落としていたので。そうしないと orm\model が見つからないというエラーが出ます)

Scaffold

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

マイグレーション、モデル、コントローラ、ビューと、ひと通り揃って生成されていました。

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

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

php oil refine migrate

ちなみに rake db:create のような機能は無いため、データベースは他の方法で作っておいてください(もしかして、ある?)

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

Performed migrations for app:default:
001_create_articles

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

Rails では scaffold でルート(route)も自動的に追記されましたが、fuelphp はルートを書かなくても命名規則にそって、コントローラ名/アクション名で動作します。

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

fuel16-2-01

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

コントローラーのコード

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

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

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

例えば、create の時、GET であれば、rails でいう new のように入力画面を表示し、POST されたらモデルを save するといった感じです。

scaffold までおさらいできました。

まだコードを書いてませんが雰囲気はつかめてきた…かな?

シェアする

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

フォローする