2014-02-14 207 views
0

有没有办法让通配符路由?但只限于特定的名称。Laravel的通配符路线?

例如,

我有很多途径,导致在同一个地方:

/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'=>'[email protected]' 
)); 

但只能使用存档或主人或浏览为通配符。

+0

所以你有三个资源,但是你想让通用路由器具有通配符? – carousel

回答

1

根据通配符,您无法定义不同的控制器。你将不得不在控制器中定义它。

Route::get('{page}/gallery/{galleryId}/picture/{pictureId}', array(
    'as'=>'picture', 
    'uses'=>'[email protected]' 
)); 

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采用先入 - >一线>出

0

如果你有您的{???}这可以只是一个正则表达式。

也许这样的事情{(archive|browse|masters)}

更新:我想在L3上述作品,但L4具有以不同的方式

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

做你可以试试这个

Route::get('{type}/gallery/{galleryId}/picture/{pictureId}', array(
    'as'=>'picture', 
    'uses'=>'[email protected]' 
))->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); 
}