【发布时间】:2014-11-03 07:35:18
【问题描述】:
我希望能够通过短链接访问文章,例如 articles/ID,但我也希望通过完整链接 articles/ID/category/slug 到达那里。但我无法让以下工作:
// Route file:
Route::pattern('id', '[0-9]+');
Route::pattern('cat', '^(?!create).*');
Route::pattern('slug', '^(?!edit).*');
Route::get('articles/{id}/{cat?}/{slug?}', ['as' => 'articles.show', 'uses' => 'ArticlesController@show']);
// Controller file:
public function show($id, $cat = null, $slug = null)
{
dd('1: ' . $cat . ' | 2:' . $slug);
}
下面的链接articles/28/ullam/vel-repellendus-aut-est-est-esse-fugiat给出了结果:
string(53) "1: ullam/vel-repellendus-aut-est-est-esse-fugiat | 2:"
我不明白为什么它没有被拆分,如果我在路由定义中删除 ? 就可以了。
我已经尝试过这个解决方案https://stackoverflow.com/a/21865488/3903565 并且有效,但在针对控制器时无效。为什么?
更新;我最终重新安排了路线文件:
Route::pattern('id', '[0-9]+');
// Articles
Route::get('articles/create', ['as' => 'articles.create', 'uses' => 'ArticlesController@create']);
Route::get('articles/edit/{id}', ['as' => 'articles.edit', 'uses' => 'ArticlesController@edit']);
Route::get('articles/{id}/{category?}/{slug?}', ['as' => 'articles.show', 'uses' => 'ArticlesController@show']);
Route::get('articles/{category?}', ['as' => 'articles.index', 'uses' => 'ArticlesController@index']);
Route::resource('articles', 'ArticlesController', ['only' => ['store', 'update', 'destroy']]);
【问题讨论】:
标签: laravel laravel-4 laravel-routing