у меня проблема с созданием новостного сайта. У меня есть несколько индексных функций для загрузки в представления категорий. внутри каждого представления я хочу иметь возможность перейти на страницу статьи с помощью функции показа. как использовать несколько функций шоу в одном контроллере.
это 2 из 8 индексных функций, которые я использую.
public function indexbusiness()
{
$artikels = Artikel::where('category_id', '4')->get();
return view('pages.business')->with('artikels', $artikels);
}
public function indextech()
{
$artikels = Artikel::where('category_id', '5')->get();
return view('pages.tech')->with('artikels', $artikels);
}
я хочу добавить такие функции шоу
public function showbusiness($id)
{
$artikel = Artikel::find($id);
return view(pages.show);
}
может кто-нибудь помочь мне в этом?
любая помощь приветствуется
Разве вы не можете создать одну индексную функцию и добавить ярлык категории в URL-адрес?
потому что здесь на моей стажировке сказали, что не нужно создавать 8 разных контроллеров для каждой категории. они сказали, что я могу сделать это только с 1 или 2. поэтому я пытаюсь выяснить, как вы можете выполнять несколько функций шоу в одном контроллере.
все еще возможно отредактировать один контроллер, который я добавил, и добавить 7 других для всех других категорий?






Я бы пошел об этом с другого подхода. Вы можете использовать для этого всего один контроллер и принимать категорию в качестве параметра. Например, в ваших маршрутах:
Маршруты
Route::get('/articles', 'ArticlesController@index');
Route::get('/articles/{category}', 'ArticlesController@index');
В вашем контроллере у вас будет один индексный метод. Например:
СтатьяКонтроллер
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 к модели статьи и что модель Category имеет значение slug.
В этом примере вы можете посетить /articles/tech или /articles/business.
Затем вы можете сделать тот же подход с методом show. Для этого ваши маршруты могут выглядеть следующим образом:
Маршруты
Route::get('/articles/{category}/{article}', 'ArticlesController@show');
Тогда ваш контроллер может быть
СтатьяКонтроллер
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);
}
Возможно, вам придется адаптировать приведенное выше в соответствии с вашим конкретным вариантом использования, но принцип, как правило, тот же.
спасибо за этот ответ. это может быть немного сложно реализовать, потому что я все еще новичок, но я одобрю ваш ответ, когда добьюсь успеха.
Почему вы хотите иметь все эти функции в одном контроллере, а не просто использовать несколько контроллеров, т.е. есть ли конкретное преимущество в вашем приложении?