PHPフレームワーク「Laravel」でコントローラーを使用する

PHPフレームワーク「Laravel」の使い方を調べています。
PHPフレームワーク「Laravel」でプログラムエラーの表示

今回は、コントローラーの使い方を調べてみます。
http://laravel.com/docs/controllers



コントローラー



app/routes.phpに全てのロジックを書くわけにもいかないので、
url毎に処理するクラスを分けていきます。

コントローラーは「BaseController」を継承して、app/controllersに作成します。
「MyController.php」を作ってみました。


  1. <?php
  2. // app/app/controllers/MyController.php で保存
  3. class MyController extends BaseController {
  4.     public function showHello($user) {
  5.         
  6.         return "こんにちは、{$user}";
  7.     }
  8. }




呼び出すためのroutes.phpはこのようになります。


  1. <?php
  2. // app/routes.php
  3. Route::get('/{user}', 'MyController@showHello');





http://[サーバーIP]/symfoにアクセスしてみると、ちゃんと挨拶が表示されました。

452_01.png





コントローラーへのリンク



内部リンクなどを作成したい場合は、「URL::action」か「actionヘルパーメソッド」を
使用すると便利です。

コントローラーに対するURLを作成してくれます。


  1. <?php
  2. // app/app/controllers/MyController.php で保存
  3. class MyController extends BaseController {
  4.     public function showHello($user) {
  5.         
  6.         return "こんにちは、{$user}";
  7.     }
  8.     
  9.     // URL::actionでshowUrlへのリンクを作成
  10.     public function showUrl() {
  11.         return URL::action('MyController@showUrl');
  12.     }
  13.     
  14. }





  1. <?php
  2. // app/routes.php
  3. Route::get('hello/{user}', 'MyController@showHello');
  4. Route::get('url', 'MyController@showUrl');




452_02.png




現在実行中のコントローラ



現在実行中のコントローラー@メソッドを取得するには
「Route::currentRouteAction()」
を使用します。

具体的な使い方はこんなかんじでしょうか。


  1. <?php
  2. // app/app/controllers/MyController.php で保存
  3. class MyController extends BaseController {
  4.     public function showHello($user) {
  5.         
  6.         return "こんにちは、{$user}";
  7.     }
  8.     
  9.     // URL::actionでshowUrlへのリンクを作成
  10.     public function showUrl() {
  11.         //return URL::action('MyController@showUrl');
  12.         
  13.         // Route::currentRouteAction()で
  14.         // 実行中のコントローラーを取得し、URL作成
  15.         return URL::action(Route::currentRouteAction());
  16.     }
  17.     
  18. }








コントローラーのエイリアス



コントローラーは名前をつけてRouteに登録できます。


  1. array(
  2. 'uses' => '[コントローラー名@メソッド名]',
  3. 'as' => '[名前]'
  4. )



という形式で指定します。

URL::actionでURLを生成するとき、ここでつけた別名が指定できるので便利です。


  1. <?php
  2. // app/routes.php
  3. Route::get('hello/{user}', 'MyController@showHello');
  4. Route::get('url', array(
  5.     'uses' => 'MyController@showUrl',
  6.     'as' => 'mycon_name'
  7.     ));





  1. <?php
  2. // app/app/controllers/MyController.php で保存
  3. class MyController extends BaseController {
  4.     public function showHello($user) {
  5.         
  6.         return "こんにちは、{$user}";
  7.     }
  8.     
  9.     // URL::actionでshowUrlへのリンクを作成
  10.     public function showUrl() {
  11.         //return URL::action('MyController@showUrl');
  12.         
  13.         // Route::currentRouteAction()で
  14.         // 実行中のコントローラーを取得し、URL作成
  15.         //return URL::action(Route::currentRouteAction());
  16.         
  17.         // Routeに登録した別名でURL作成
  18.         return URL::action('mycon_name');
  19.     }
  20.     
  21. }








RESTフルコントローラー



いちいちコントローラーのメソッド名まで指定るるのは面倒だという場合は、
コントローラーのメソッド名の命名規約で分岐することができます。

getXXXでgetメソッド。
postXXXでpostメソッド。
anyXXXで全てのメソッドという具合。


ルートの登録は


  1. Route::controller('test', 'MyController');



という形式で行います。


  1. <?php
  2. // app/routes.php
  3. // Route::getではなく、Route::controllerであることに注意
  4. //Route::get('users', 'MyController');
  5. Route::controller('test', 'MyController');





コントローラーはこのようになりました。


  1. <?php
  2. // app/app/controllers/MyController.php で保存
  3. class MyController extends BaseController {
  4.     public function getIndex() {
  5.         
  6.         return 'トップページ';
  7.     }
  8.     public function getHello() {
  9.         
  10.         return 'Hello World!';
  11.     }
  12.     
  13.     public function getArg($arg) {
  14.         
  15.         return "引数は{$arg}";
  16.     }
  17.     
  18.     public function getArgs($arg1, $arg2) {
  19.         
  20.         return "引数は{$arg1}, {$arg2}";
  21.     }
  22. }





http://[サーバーIP]/testでgetIndexが実行されます。

452_03.png


http://[サーバーIP]/test/helloでHello World!。

452_04.png


http://[サーバーIP]/test/arg/symfo

452_05.png


http://192.168.1.102/test/args/1/2

452_06.png

関連記事

コメント

プロフィール

Author:symfo
blog形式だと探しにくいので、まとめサイト作成中です。
https://symfo.web.fc2.com/

PR

検索フォーム

月別アーカイブ