WinRoadのLaravel4初心者講座

次世代PHPフレームワークのLaravel4を初心者向けに解説して参ります。

Winroad徒然草の管理人がお届けします
コントローラーの基礎

コントローラーの基礎

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

Laravelでは、簡単なプログラムならコントローラを使わずに、ルーターのみで、作成できます。只、全てのロジックをルーターのみで管理するのは、逆に煩雑になってしまい、プログラムの可読性が低下します。

そこで、コントローラで組織立ててプログラムを作成していく方法を調べてみましょう。

コントローラーの基礎

基本的にコントローラーはapp/controllersフォルダに作成し、BaseControllerを継承します。

class UserController extends BaseController{

このBaseControllerは、デフォルトで、app/controllersフォルダ内にあり、全てのコントローラーで使用する共通のコントローラーロジックを記述することが出来ます。

尚、BaseControllerはフレームワークのControllerクラスを拡張しています。

RESTフルコントローラー

Route::getメソッドで、コントローラアクションに対して、ルートを指定することが出来ますが、より便利にコントローラーを使用するためにRESTフルコントローラーが用意されています。

RESTフルコントローラーの登録

RESTフルコントローラーは、Route::controllerメソッドを使用して、app/routes.php内に下記のように登録します。

Route::controller(‘users’,’UserController’);

controllerメソッドの第1引数は、そのコントローラーが使用するベースのURIを指定します。第2引数には、コントローラーのクラス名を指定します。尚、第3引数には、オプションで、コントローラアクションの名前を連想配列で指定することが出来ます。

RESTフルコントローラの使用方法

RESTフルコントローラーを使用するには、HTTPメソッド(GET,POST,PUT,DELETE等)をコントローラアクションの名前の前に付けて使用します。

  1. public function getCreate(){
    //ロジックの記述
    }
  2. public function postCreate(){
    //ロジックの記述
    }

つまり、1.では、createアクションにGETでアクセスした場合の処理、2.では、POSTでアクセスした場合の処理を記述することが出来ます。これによりコントローラ内のアクションメソッドで、GETの場合は、このように処理して、POSTの場合はこのように処理するという条件分岐を記述する必要がないので、とても便利です。

基本例

<?php
class UserController extends BaseController{
//GETの処理(ビューの表示)
 public function getCreate(){
 return View::make('user/create');
 }
 //POSTの処理(受信データのバリデーション及び新規作成)
 public function postCreate(){
 //受信データの整理
 $inputs=Input::only('username','email','password');
 //バリデーションの指定
 $rules=array(
 'username'=>'required',
 'email'=>'required|email|unique:users',
 'password'=>'required|min:4',
 );
 //バリデーションチェック
 $val=Validator::make($inputs,$rules);
 //バリデーションNGなら
 if($val->fails()){
 return Redirect::back()
 ->withErrors($val)
 ->withInput();
 }
 //ユーザーの新規作成
User::create($inputs);
return Redirect::to('/');
}
}

リソースフルコントローラー

Laravelでは、上記のRESTフルコントローラをもっと簡単に扱うことが出来るようにリソースフルコントローラーが用意されています。

Aritsanコマンドで作成

リソースフルコントローラはArtisanコマンドのcreate:makeで素早く生成することが出来ます。

cd c:\xampp\htdos\laravel

php artisan controller:make PhotoController

これで、app/contorllersフォルダに、PhotoController.phpが作成されます。

リソースフルコントローラーの登録

Artisanコマンドで作成したリソースフルコントローラーは、app/routes.phpに下記のように登録します。

Route::resource(‘photo’,’PhotoController’);

resourceメソッドの第1引数には、そのコントローラで使用するベースのURIを指定します。第2引数には、コントローラ名を指定します。

リソースフルコントローラーの使用方法

Artisanコマンドで自動生成したコントローラには、下記のように生成されています。(※コメントは省略しています。)

<?php
class PhotoController extends \BaseController {

public function index(){}
public function create(){}
public function store(){}
public function show($id){}
public function edit($id){}
public function update($id){}
public function destroy($id){}
}

この自動生成された7つのコントローラアクションの使い方を下記に簡単に記述しておきます。

  • index()
    リソース(上記例では、http://localhost/laravel4/public/photo)にGETでアクセスした場合の処理を記述します。基本的には、トップページを表示するのが一般的でしょう。※尚、photo/の後には、indexは付けてはいけません。indexを付けると、下記のshow()アクションとして処理されます。
  • create()
    リソース/create(上記例では、http://localhost/laravel4/public/photo/create)にGETでアクセスした場合の処理を記述します。基本的には、新規作成のページを表示するために使用するのが一般的でしょう。
  • store()
    リソースにPOSTでアクセスした場合の処理を記述します。
  • show()
    リソース/{id}にGETでアクセスした場合の処理を記述します。基本的には詳細ページを表示するために使用するのが一般的でしょう。
  • edit()
    リソース/{id}/editにGETでアクセスした場合の処理を記述します。基本的には、編集用のページを表示するために使用するのが一般的でしょう。
  • update()
    リソース/{id}にPUTやPATCHでアクセスした場合の処理を記述します。基本的には、データ更新用のロジックを記述するのが一般的でしょう。
  • destroy()
    リソース/{id}にDELETEでアクセスした場合の処理を記述します。基本的には、データ削除用のロジックを記述するのが一般的でしょう。

尚、上記の使用方法は、一般的な使用方法を記述しましたが、リソースフルコントローラはあくまでも、アクションに対するHTTPメソッドの紐付けを定義しているだけですので、アクション内のロジックは上記に準ずる必要はありません。

« »

コメント

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です