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'));
コードがやや雑多になります。お勧めなのは、保守性を上げるためルートに全部名前をつけることです。名前付きルートの場合、生成時のコードがすっきりとします。