Laravel3:ルーティング定義1(無名関数)
タグ: Laravel3
Laravelのルーティングの取り扱いやリンクの生成方法は、公式ドキュメントにまとまっています。
基本
ルートの定義はapplication/routes.php
の中で定義します。
routes.phpの中だけで無名関数を使用し、ルーティング内容を記述することができますし、他のフレームワーク同様にコントローラーを指定することもできます。
ルーティングの判定は先に定義したものが優先となります。そのため、当てはまる範囲の広いルーティングは、狭いルーティングより後ろで定義しましょう。
一番上位のURL、つまりドメイン名だけでアクセスするルーティングは'/'で表します。
ルーティングに使用できるワイルドカード(プレイスフォルダー)は3種類です。数字、英数字、何でも一致するパターンで、(:num)
、(:any)
、(:all)
となります。あってもなくても良いことを定義する場合は(:num?)
、(:any?)
、(:all?)
を利用します。
無名関数使用
// ワイルドカード無し Route::get('test/sample', function() { return 'hello'; }); // ワイルドカード使用 Route::any('task/(:num)', function($task_id) { // タスクの取得処理など return view('task_view')->with('tasks', $data ); }); // オプション指定を含む場合 Route::any('post/(:num)/(:all?)', function($post_id, $slug = null) { // 記事の取得処理など return view('postview')->with('posts', $data ); });
Routeクラスの後に、取得したいHTTPメソッドで指定します。全てのメソッドに対応する場合はany()
を使用します。
無名関数の引数が、ワイルドカードと一致しています。あってもなくても一致するオプション指定は、引数も省略時のデフォルト値を指定します。
URLの生成は以下の通りです。
// URLクラス使用 URL::to('test/sample') // ヘルパー使用 url('test/sample') // ワイルドカード使用ルーティングに対するコーディング url('task').'/'.$post_id; url('task/'.$post_id) url('post').'/'.$post_id.Str::slug($title) url('post/'.$post_id.Str::slug($title))
リンクを生成するには以下の方法を使用します。
// 通常、ビューの中で echo HTML::link('test/sample', 'サンプル表示'); // リンクにidを連結 echo HTML::link('task/'.$task_id, "タスク($task_id)表示"); // 属性を指定する場合 echo HTML::link('task/'.$task_id, "タスク($task_id)表示", array('class'=>'tasklink')); // タイトルをリンク対象 echo HTML::link('post/'.$post_id, $title); // スラグをリンクに含める echo HTML::link('post/'.$post_id.'/'.Str::slug($title), $title); // 日本語スラグをリンクに含める echo HTML::link('post/'.$post_id.'/'.urlencode($title), $title); // 更に属性を指定 echo HTML::link('post/'.$post_id.'/'.urlencode($title), $title, array('id'=>'titlelinke'));
コードがやや雑多になります。お勧めなのは、保守性を上げるためルートに全部名前をつけることです。名前付きルートの場合、生成時のコードがすっきりとします。