Laravel4でコントローラーの作成とモデルの作成に関する簡単なまとめ
Laravel4のBeta4がリリースされ動きが活発なLaravel。
Laravel4のコントローラーの作成とモデルの作成に関する簡単なまとめを残しておこうと思います。
[下準備]
- Laravel4のインストールについては前のエントリーを参照して下さい。
[新しいコントローラーの作成]
- app/controllers/のディレクトリに新しいコントローラーの作成する
- デフォルトではBaseControllerとHomeControllerのふたつ。
- サンプルとして、このディレクトリにShopControllerという名前のコントローラーを作成する
- ファイル名は一応、ShopController.php。ただし、必ずしも、この名前じゃなければいけないわけではない。詳しくは後述。
- BaseControllerを継承するコントローラークラス
- アクションとして、indexアクションを作成する。
<?php class ShopController extends BaseController { public function getIndex(){ return "Shop Index!"; } }
ただし、この状態で、http://localhost/project/public/shop/にアクセスしてもエラーになるだけ。
- ここからが重要。
- Laravel4では新しいクラスファイルを作成した場合、プロジェクトルートにて、composer dump-autoloadを実行しなければならない。
- このコマンドを実行することによって、ShopControllerの存在がプロジェクトに認識されることになる。
- Generating autoload filesと表示されればOK。
- このコマンドを実行することによって、ShopControllerの存在がプロジェクトに認識されることになる。
- 正しく、ShopControllerの存在が認識されているか確認するには?
- Laravel4では新しいクラスファイルを作成した場合、プロジェクトルートにて、composer dump-autoloadを実行しなければならない。
<?php // autoload_classmap.php generated by Composer $vendorDir = dirname(__DIR__); $baseDir = dirname($vendorDir); return array( 'BaseController' => $baseDir . '/app/controllers/BaseController.php', 'DatabaseSeeder' => $baseDir . '/app/database/seeds/DatabaseSeeder.php', 'HomeController' => $baseDir . '/app/controllers/HomeController.php', /** 中略 **/ 'ShopController' => $baseDir . '/app/controllers/ShopController.php', 'TestCase' => $baseDir . '/app/tests/TestCase.php', 'User' => $baseDir . '/app/models/User.php', );
コントローラークラスのオートロードが確認できたら、今度はルーティングの設定。
作ったコントローラーを呼び出すための定義をしなければならない。
- app/routes.phpを開く
- デフォルトでは、publicルートの定義のみが行われているだけ。
- project/public/shop/というURIで呼び出すためのコントローラーを登録するためには?
- Route::controller('shop', 'ShopController');
- 基本これだけでOK。
- Route::controller('shop', 'ShopController');
で、ブラウザでhttp://localhost/project/public/shop/にアクセス!
Shop Index!と表示されていれば、ひとまず、コントローラーの作成に成功!
[新しいモデルの作成]
- モデルファイルを作って、DBからデータを取得するサンプルにチャレンジしてみる。
- DBはとりあえず、MySQLで、商品テーブルからデータを取得するという想定で。
- 商品情報が保存されているitemテーブルには、商品ID=item_id=主キー、商品名=item_name、価格=item_priceの3つのフィールドがあるする。
- サンプルデータは適当に入れておいて下さい。
- DBはとりあえず、MySQLで、商品テーブルからデータを取得するという想定で。
- まずは、app/config/database.phpにある、mysqlの項目を環境に合わせて変更。
<?php 'mysql' => array( 'driver' => 'mysql', 'host' => 'localhost', 'database' => 'sample_db', 'username' => 'user', 'password' => 'password', 'charset' => 'utf8', 'collation' => 'utf8_unicode_ci', 'prefix' => '', ),
- 次にモデルクラスの作成。app/models/にItem.phpというファイルを作成。
- ItemクラスはLaravelのORMである、Eloquentクラスを継承する。コードは以下の様な具合で。
<?php class Item extends Eloquent { protected $table = 'item'; protected $primaryKey = "item_id"; public $timestamps = false; }
- $timestampsは created_atとupdated_atのフィールドを更新するためのもの。今回のテーブルには両方共存在しないので、falseを設定。
- 次はコントローラークラスを作成した時と同様に、プロジェクトルートにて、composer dump-autoloadを実行。Generating autoload filesと表示されていればOK。
[コントローラーにアクションメソッドを追加]
<?php class ShopController extends BaseController { public function getList(){ foreach(Item::all() as $item){ echo $item->item_name."<br />"; } } }
-
-
- http://localhost/project/public/shop/list/へアクセスして、商品名一覧が表示されていれば、無事、成功。
-
とりあえず、今日はここまで。追記もあるかもしれません。