スイーツ(笑)と呼ばないで!!
| |||||||||||||||||||||||||||||||||||||
|
|
||||||||||||||||||||||||||||||||||||
11/24/08:01 [PR] |
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¶m7=value7… という形で、最初の5つのパラメータだけはスラッシュ区切りのURIに展開され、 6つのパラメータから、いつものparam6=value6¶m7=value7…という感じのクエリストリングに展開されるんですね。 先の例の後者のパターン /articles/list/1/3/3/ という形で動くように書いてあれば何の問題もありませんが、そうでなければ、そこでアプリはクラッシュですね。 ということで、皆さん、暗黙のコントローラーを使用する際には、暗黙のルールをきちんと理解して使いましょう。 そして、暗黙のルールが嫌なら、暗黙的なコントローラーは使わない、というのは多くの人が選んできた一つの正解だと私は思います。 人それぞれですけどね^^ 綺麗なバラにはトゲがある 一見便利な機能には罠がある PR
|
|
|