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'));

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

参照:Laravel3:ルーティング定義2(名前付きルート)