Laravel的通配路线?

时间:2014-02-14 10:50:16

标签: laravel laravel-4

有没有办法拥有通配符路线?但只有特定的名字。

例如

我有很多路线通往同一个地方:

/archive/gallery/1/picture/1
/masters/gallery/1/picture/1
/browse/gallery/1/picture/1

这些都加载了相同的图片,但如果我可以做这样的事情会很棒:

Route::get('{???}/gallery/{galleryId}/picture/{pictureId}', array(
    'as'=>'picture',
    'uses'=>'PictureController@getPicture'
));

但只能使用存档或母版或浏览为通配符。

3 个答案:

答案 0 :(得分:1)

您无法定义其他控制器,具体取决于通配符。您必须在控制器中定义它。

Route::get('{page}/gallery/{galleryId}/picture/{pictureId}', array(
    'as'=>'picture',
    'uses'=>'PictureController@getPicture'
));

public function getPicture($page)
{
   if ($page == "archive")
        return View::make('archive');
   else if ($page == "browse")
        return View::make('browse');
   else if ($page == "masters")
        return View::make('masters');
}

请务必将路线放在路线文件的底部,否则它将覆盖其他路线:)因为laravel使用first-in - >一线>列

答案 1 :(得分:1)

你可以试试这个

Route::get('{type}/gallery/{galleryId}/picture/{pictureId}', array(
    'as'=>'picture',
    'uses'=>'PictureController@getPicture'
))->where('type', 'masters|browse|archive');

PictureController:

public function getPicture($type, $galleryId, $pictureId)
{
    // $type could be only masters or browse or archive
    // otherwise requested route won't match

    // If you want to load view depending on type (using type)
    return View::make($type);
}

答案 2 :(得分:0)

如果您拥有{???},那么这只是一个正则表达式。

也许像这样{(archive|browse|masters)}

更新:我认为以上工作在L3,但L4必须以不同的方式完成

Route::get('/{variable}', function()
{
    return View::make('view');
})->where('masters', 'browse', 'archive');