初めてのLaravel 5.1 : (27) Implicit Controllers

今回は、コントローラ内の全てのメソッドを1行のルート設定で簡単に定義できる、Implicit Controllers(暗黙コントローラ)を試してみます。


Routing

まずは、HogeControllerを作成します。–plainオプションを指定して中身が空のコントローラを作成します。

$ php artisan make:controller HogeController --plain

次に、routes.phpを以下のように編集します。

<?php // app/Http/routes.php

...

Route::controller('hoge', 'HogeController');  // 追加

HogeControllerを Implicit Controllerとして定義しました。
Route::controller() の第1引数は、ベースとなるURIを指定します。第2引数はコントローラ名を指定します。
“/hoge/XXXX”にアクセスがあると、HogeControllerのXXXXメソッドがコールされます。

この段階で一旦 artisanコマンドでルートを確認してみます。

$ php artisan route:list
+--------+--------------------------------+--------------------------+------------------+---------------------------------------------------+------------+
| Domain | Method                         | URI                      | Name             | Action                                            | Middleware |
+--------+--------------------------------+--------------------------+------------------+---------------------------------------------------+------------+
|        | GET|HEAD|POST|PUT|PATCH|DELETE | hoge/{_missing}          |                  | App\Http\Controllers\HogeController@missingMethod |            |
+--------+--------------------------------+--------------------------+------------------+---------------------------------------------------+------------+

※上記の表は hoge に絞って表示しています。

1つだけルートが定義されています。{_missing} はワイルドカードで、何が渡されても missingMethod()メソッドがコールされます。
missingMethod()は HogeControllerのスーパークラスである Illuminate\Routing\Controller の中で定義されています。


Controller

HogeControllerを以下のように編集します。

<?php // app/Http/Controllers/HogeController.php

...

class HogeController extends Controller
{
    public function getIndex() {}

    public function getCreate() {}

    public function postStore() {}

    public function getShow($id) {}

    public function getEdit($id) {}

    public function patchUpdate($id) {}

    public function deleteDestroy($id) {}

    public function noneRoutedMethod() {} // ルーティングされない
}

ルーティングさせたいメソッドは、メソッド名をHTTPのメソッド名(get, post, put, patch, delete)で開始する必要があります。

この段階で artisanコマンドでルートを確認してみます。

$ php artisan route:list
+--------+--------------------------------+-----------------------------------------------------+------------------+---------------------------------------------------+------------+
| Domain | Method                         | URI                                                 | Name             | Action                                            | Middleware |
+--------+--------------------------------+-----------------------------------------------------+------------------+---------------------------------------------------+------------+
|        | GET|HEAD                       | hoge/index/{one?}/{two?}/{three?}/{four?}/{five?}   |                  | App\Http\Controllers\HogeController@getIndex      |            |
|        | GET|HEAD                       | hoge                                                |                  | App\Http\Controllers\HogeController@getIndex      |            |
|        | GET|HEAD                       | hoge/create/{one?}/{two?}/{three?}/{four?}/{five?}  |                  | App\Http\Controllers\HogeController@getCreate     |            |
|        | POST                           | hoge/store/{one?}/{two?}/{three?}/{four?}/{five?}   |                  | App\Http\Controllers\HogeController@postStore     |            |
|        | GET|HEAD                       | hoge/show/{one?}/{two?}/{three?}/{four?}/{five?}    |                  | App\Http\Controllers\HogeController@getShow       |            |
|        | GET|HEAD                       | hoge/edit/{one?}/{two?}/{three?}/{four?}/{five?}    |                  | App\Http\Controllers\HogeController@getEdit       |            |
|        | PATCH                          | hoge/update/{one?}/{two?}/{three?}/{four?}/{five?}  |                  | App\Http\Controllers\HogeController@patchUpdate   |            |
|        | DELETE                         | hoge/destroy/{one?}/{two?}/{three?}/{four?}/{five?} |                  | App\Http\Controllers\HogeController@deleteDestroy |            |
|        | GET|HEAD|POST|PUT|PATCH|DELETE | hoge/{_missing}                                     |                  | App\Http\Controllers\HogeController@missingMethod |            |
+--------+--------------------------------+-----------------------------------------------------+------------------+---------------------------------------------------+------------+

※上記の表は hoge に絞って表示しています。

HogeController内のメソッドが、Implicit Controller機能によって、自動的にルーティングされました。
パラメータは1〜5まで任意で受け取れるようになっています。
noneRoutedMethod()はメソッド名がHTTPのメソッド名で始まっていないので、ルーティングされていないのが分かります。

※ HogeController.phpは説明の為に作成したので、ここで削除してください。
※ routes.php内の Route::controller(‘hoge’, ‘HogeController’); も、ここで削除してください。


まとめ

ルーティングで、Route::controllers を使うと、コントローラのメソッド名から自動的にルート設定を行うことができる。
この機能を Implicit Controllers(暗黙コントローラ)と言う。

公式サイト
http://laravel.com/docs/5.1/controllers#implicit-controllers

コメントを残す

以下に詳細を記入するか、アイコンをクリックしてログインしてください。

WordPress.com ロゴ

WordPress.com アカウントを使ってコメントしています。 ログアウト / 変更 )

Twitter 画像

Twitter アカウントを使ってコメントしています。 ログアウト / 変更 )

Facebook の写真

Facebook アカウントを使ってコメントしています。 ログアウト / 変更 )

Google+ フォト

Google+ アカウントを使ってコメントしています。 ログアウト / 変更 )

%s と連携中