忍者ブログ

スイーツ(笑)と呼ばないで!!

NEW ENTRY
04 2024/05 1 2 3 45 6 7 8 9 10 1112 13 14 15 16 17 1819 20 21 22 23 24 2526 27 28 29 30 31 06

05/05/07:00  [PR]

×

[PR]上記の広告は3ヶ月以上新規記事投稿のないブログに表示されています。新しい記事を書く事で広告が消えます。

06/03/00:21  Route::controllerって本当に便利?

laravelにはいろんなroutingの書き方がありますね。

その中の一つにImpicit Controller(暗黙的なコントローラー)というものがあります。

どの辺が「暗黙的」か例を挙げましょう。


Route::controller(‘articles’,’ArticlesController’);

とroutes.phpに書きます。

そして、ArticlesControllerの中に、

public function getAbc(){

}

というアクションを定義するとします。

そうすると、このアクションは自動的に/articles/abcに対するgetリクエストにマッピングされます。
postAbc()と書けば、postリクエストにマッピングされたりしますね。

つまり、

httpメソッド名(get,post等) + アクション名

という形で自動でマッピングされるわけですね。

これが1つ目の暗黙のルールです。

なるほど、これは便利ですね。


ただ、この暗黙的なコントローラー、実は一部の人たちにはとても不人気です。

なぜでしょうか?

その理由の一つをご説明しましょう。

まず、ターミナルで
php artisan route
と打ってみましょう。

そのアプリケーションで定義されているroutingの一覧が表示されますね。
そこで先ほどの暗黙的なコントローラーについて見てみましょう。

GET|HEAD articles/abc/{one?}/{two?}/{three?}/{four?}/{five?}
というURIが
ArticlesController@getAbc
というアクションにマッピングされていますね。

さてURIの最後についている
/{one?}/{two?}/{three?}/{four?}/{five?}
これなんでしょうか?

URIからスラッシュ区切りで5つのパラメータの値を取得できる、という意味ですね。
暗黙的なコントローラーは自動で5つのパラメータの値を取得するroutingを作成するのです。

これが2つ目の暗黙のルールです。

これが嫌で暗黙的なコントローラーを使わない人は結構いますね。

例えば、下記のケースを考えてみましょう。

/articles/list?sort=1&page=3&category_id=3
こんなURIの一覧画面を想像してみましょう。
Webアプリではよく見るURIですね。

さて、本来、暗黙的なコントローラーを使用するなら、上のケースは
/articles/list/1/3/3/
という形式で表現するのが正しいかもしれませんね。
5つまではパラメータをURIから取得するのを予定したルーティングなのですから。

でも、別にInputのFacadeを使ってパラメータを取得してコントロールする分には、
最初に書いたURI前提でも一応動いたりしますね。

でも、前々回のブログ(クエリストリングの回)で書いたような
Redirect::action(‘ArticlesController@list’,パラメータの配列)
という形で楽々laravelの機能を使おうとすると、どうなるでしょうか?

暗黙のコントローラーは、5つのパラメータをスラッシュ区切りで受け取ることを予定しているので、
実はこれ、受け取った連想配列のうち最初の5つのパラメータだけはスラッシュ区切りのURIに展開されてしまうのです。

つまり、
/articles/list/value1/value2/value3/value4/value5?param6=value6&param7=value7…
という形で、最初の5つのパラメータだけはスラッシュ区切りのURIに展開され、
6つのパラメータから、いつものparam6=value6&param7=value7…という感じのクエリストリングに展開されるんですね。

先の例の後者のパターン
/articles/list/1/3/3/
という形で動くように書いてあれば何の問題もありませんが、そうでなければ、そこでアプリはクラッシュですね。


ということで、皆さん、暗黙のコントローラーを使用する際には、暗黙のルールをきちんと理解して使いましょう。

そして、暗黙のルールが嫌なら、暗黙的なコントローラーは使わない、というのは多くの人が選んできた一つの正解だと私は思います。

人それぞれですけどね^^

綺麗なバラにはトゲがある
一見便利な機能には罠がある

拍手[1回]

PR
URL
FONT COLOR
COMMENT
Vodafone絵文字 i-mode絵文字 Ezweb絵文字
PASS

TRACKBACK

TRACKBACK-URL