我有以下路线:
Route::get('news', [
'as' => 'news',
'uses' => 'ArticleController@getIndex',
]);
还有其他路由使用相同的资源控制器,例如:
Route::get('travel', [
'as' => 'travel',
'uses' => 'ArticleController@getIndex',
]);
在文章控制器中,我如何获得文章的类别。例如旅行还是新闻?
我无法将其变成路线参数,例如。
Route::get('{travel}', [
'as' => 'travel',
'uses' => 'ArticleController@getIndex',
]);
由于还有其他部分,例如contact,faqs等,不使用文章控制器。
我知道我可以把它全部放在一条路上:
Route::get('/article/{category}', [
'as' => 'travel',
'uses' => 'ArticleController@getIndex',
]);
但我想要漂亮的URL,如:
mydomain.com/category-slug/article-slug
理想情况下,如果我可以使用资源控制器:
Route::resource('news', ArticleController');
使用某种数组:
Route::resource(['news', 'travel'], ArticleController');
所以我的问题:
如何获取资源的名称。例如新闻,在我的控制器中旅行?
是否有一种简单的方法可以指定到同一资源的不同路由?
答案 0 :(得分:4)
例如保持这样的路由作为您的静态路由将是有限的,并且需要是唯一的,这样它们就不会在路由之间产生冲突 演示路线:
Route::get('contact', [
'as' => 'contact',
'uses' => 'contactController@getIndex',
]);
Route::get('{travel}', [
'as' => 'travel',
'uses' => 'ArticleController@getIndex',
]);
答案 1 :(得分:1)
为了达到这样的路线:
Route::get('/{category}/{article}', 'ArticleController@getArticle');
使用以下内容:
getArticle
然后在您的控制器中,您的public function getArticle($category, $article)
{
//Your code here
}
方法中将包含2个参数。
DefMenuItem
答案 2 :(得分:0)
为了获得漂亮的网址,您需要执行以下步骤:
1)
首先,您需要在article表中添加一个列,例如' slug'。
2)然后,您需要在文章模型中指定路线密钥。像这样:
文章模型
public function getRouteKeyName()
{
return 'slug';
}
3)当你添加一篇文章时,你应该自己创建一个slug才能是唯一的。所以在您创建文章的控制器中添加此代码。
$slug = str_slug($article['title'], '-');
$slugs_count = DB::table('articles')->where('name',$article['title'])- >count();
if($slugs_count>1){
$slug = $slug.'-'.($slugs_count-1);
}
$article->slug = $slug;
$article->update();
4)现在我们必须设置路线
Route::get('/article/{slug}', [
'as' => 'travel',
'uses' => 'ArticleController@getIndex'
])->where(['slug','[\w\d\-\_]+']);
5)最后,为了得到你需要的文章
$article = Article::where('slug','=',$slug)->first();
如果您想使用类别等,您可以在路线中传递更多参数并在控制器中对其进行操作。像这样
Route::get('/article/{category}/{slug}', [
'as' => 'travel',
'uses' => 'ArticleController@getIndex'
])->where(['slug','[\w\d\-\_]+','category','[\w\d\-\_]+']);
where子句用一些正则表达式限制参数(可选)。 我忘了提到模型中的routekeyname在laravel 5.2中工作。