開発ブログ

株式会社Nextatのスタッフがお送りする技術コラムメインのブログ。

電話でのお問合わせ 075-744-6842 ([月]-[金] 10:00〜17:00)

  1. top >
  2. 開発ブログ >
  3. PHP >
  4. Laravel >
  5. PHPフレームワークLaravelを使う Routing
no-image

PHPフレームワークLaravelを使う Routing

インストールの記事から間が飽きましたが、
PHPフレームワークLaravelを触ってみているよという記事の第3段です。
 
クイックスタートは公式ドキュメントにもある上に
多くの方が記事を書いてらっしゃるので特に網羅性は気にせず書いていこうかと思います。
 

参考

 

ルートの定義

app/routes.phpに定義します。
 
HTTPメソッドがそのままメソッド名になっており、Route::get、Route::postなどととてもわかりやすい記述です。

RESTfulなルート

Route:resource('user', 'userController');
コマンドラインから
$ php artisan routes
で確認すると
メソッド URI アクション
GET /user index
GET /user/create create
POST /user store
GET /user/{id} show
GET /user/{id}/edit edit
PUT /user/{id} update 
PATCH /user/{id} update 
DELETE /user/{id} destroy 

の8つのルートが生成されています。

HTTPメソッドを指定しないルート

Route::any('foo', function()
{
    return 'Hello world';
});

ルートパラメータ

Route::get('user/{id}/{name}', function($id, $name)
{
    return $name;
});
※パラメータをオプションにする場合
Route::get('user/{name?}', function($name = 'John')
{
    return $name;
});

ルートフィルター

beforeフィルターとafterフィルターを設定可能。
Route::get('user', array('before' => 'age', function()
{
    return 'You are over 18 years old.';
}));
フィルターはapp/filters.phpに定義します。 デフォルトではauth、auth.basic、guest、csrfフィルターが用意されています。
Route::filter('age', function()
{
    if (Input::get('age') < 18)
    {
        return Redirect::to('home');
    }
});

名前付きルート

Route::get('user/profile', array('as' => 'profile', 'uses' => 'UserController@showProfile'));
定義しておくと名前からURLを生成可能になります。
$url = URL:route('profile');
$redirect = Redirect:route('profile');

グループ

Route::group(array('before' => 'auth', 'prefix' => 'admin'), function()
{
    Route::get('/user', function()
    {
        // Has Auth Filter
    });

    Route::get('user/profile', function()
    {
        // Has Auth Filter
    });
});
まとめてフィルターを適用したい時やプレフィックスを付けたい時に利用



ここまででMVCフレームワークでも見かける設定がひと通り揃ってますね。
以下、ドキュメントを読んでいてこれは便利そうだなと思った機能です。

サブドメインルーティング

サブドメインをワイルドカードでパラメーターとして処理可能です。 ユーザーごとにサブドメインを割り当てるWebサービスで使えますね。
Route::group(array('domain' => '{account}.example.com'), function()
{
 
    Route::get('user/{id}', function($account, $id)
    {
        //
    });
 
});

パラメータの制約条件を正規表現で指定

Route::get('user/{id}/{name}', function($id, $name)
{
    return $name;
})
->where(array('id' => '[0-9]+', 'name' => '[a-z]+'))
ちゃっちゃと作りたい時に便利そうです。

モデルとの結合

ルートからモデルのインスタンスを直接受け取ることができます。 下記の例では、ユーザーIDの代わりにユーザーインスタンスを受取ります。
Route::model('user', 'User');
これでモデルとパラメーターが結合されるので、
Route::get('profile/{user}', function(User $user)
{
    //
});
とルートを定義すると関数にはUserインスタンスが渡されます。


名前からユーザを特定するなど、ルートパラメータを解決する方法を指定するにはRoute:bindを利用します。
Route::bind('user', function($value, $route)
{
    return User::where('name', $value)->first();
});
上手く使えばパラメータの検証部分を共通化して分離できますね。
TOPに戻る