3

写真ギャラリー アプリには 4 つのルートがあります。それらはすべて同じことを行います: データベースにクエリを実行し、画像をレンダリングします。それらの唯一の違いは、レコードの順序です。例えば:

http://example.com/favorites : shows pics ordered by favorites
http://example.com/random    : shows pics ordered by random
http://example.com/votes     : shows pics ordered by votes
http://example.com/views     : shows pics ordered by views

このために、ギャラリー コントローラーで 1 つのアクションを使用し、注文をパラメーターとして渡します。

私はこのルートを作成できることを知っています:

Route::get('/{orderby}', 'GalleryController@showPics')

次に、コントローラーからパラメーターを取得します。

class GalleryController extends BaseController
{
    public function showPics($orderby)
    {
        //query model ordering by $orderby and render the view
    }
}

問題は、example.com/whatever をキャプチャしたくないことです。これら 4 つの特定のルートのみをキャプチャします。

ルートからコントローラー アクションにパラメーターを渡す方法はありますか。または、代わりに、コントローラーから現在アクセスされているルートを読み取るには?

4

1 に答える 1

13

以下に示すように、正規表現で可能な値を制限するパラメーター制約をルートに追加できます。

Route::get('/{orderby}', 'GalleryController@showPics')
    ->where('orderBy', 'favorite|random|vote|view');

ご存知のように、マップされたコントローラー アクションでこれらの値を取得します。

public function showPics($orderby)
{
    dd($orderby); // favorite, random, vote or view.
}

ドキュメントでパラメータールート制約の詳細を読むことができます: http://laravel.com/docs/routing#route-parameters

于 2013-08-13T12:40:45.553 に答える