Я бы пошел об этом с другого подхода.Для этого вы можете использовать только один контроллер и принять категорию в качестве параметра.Например, в ваших маршрутах:
Маршруты
Route::get('/articles', 'ArticlesController@index');
Route::get('/articles/{category}', 'ArticlesController@index');
Внутри вашего контроллера у вас будет один индексный метод.Например:
ArticleController
public function index($category)
{
if($slug) {
$articles = Article::whereHas('category', function ($query) use ($category) {
$query->where('slug', $category);
})->get();
return view('pages'.$category)->with('articles', $articles);
}
$articles = Article::all();
return view('pages.articles')->with('articles);
}
Это позволит вам загружать любые категории статей по категории.Этот подход предполагает, что у вас есть отношение category
к модели Article и что модель Category
имеет значение слаг.
В этом примере вы можете посетить /articles/tech
или /articles/business
.
Затем вы можете сделать тот же подход с методом show
.Для этого ваши маршруты могут выглядеть следующим образом:
Маршруты
Route::get('/articles/{category}/{article}', 'ArticlesController@show');
Тогда ваш контроллер может быть
ArticleController
public function show($category, $id)
{
$article = Article::whereHas('category', function (query) use ($category) {
$query->where('slug', $category);
})->where('id', $id)->first();
return view('pages.show')->with('article', $article);
}
Возможно, вам придется адаптировать вышеперечисленное для соответствия вашему конкретному случаю использования, но принцип, как правило, тот же.