Несколько функций Laravel show в одном контроллере

у меня проблема с созданием новостного сайта. У меня есть несколько индексных функций для загрузки в представления категорий. внутри каждого представления я хочу иметь возможность перейти на страницу статьи с помощью функции показа. как использовать несколько функций шоу в одном контроллере.

это 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);
}

может кто-нибудь помочь мне в этом?

любая помощь приветствуется

Почему вы хотите иметь все эти функции в одном контроллере, а не просто использовать несколько контроллеров, т.е. есть ли конкретное преимущество в вашем приложении?

Rwd 27.02.2019 10:13

Разве вы не можете создать одну индексную функцию и добавить ярлык категории в URL-адрес?

Jerodev 27.02.2019 10:22

потому что здесь на моей стажировке сказали, что не нужно создавать 8 разных контроллеров для каждой категории. они сказали, что я могу сделать это только с 1 или 2. поэтому я пытаюсь выяснить, как вы можете выполнять несколько функций шоу в одном контроллере.

JohnSmith2521 27.02.2019 10:22

все еще возможно отредактировать один контроллер, который я добавил, и добавить 7 других для всех других категорий?

JohnSmith2521 27.02.2019 10:24
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
0
4
1 638
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Я бы пошел об этом с другого подхода. Вы можете использовать для этого всего один контроллер и принимать категорию в качестве параметра. Например, в ваших маршрутах:

Маршруты

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);
}

Возможно, вам придется адаптировать приведенное выше в соответствии с вашим конкретным вариантом использования, но принцип, как правило, тот же.

спасибо за этот ответ. это может быть немного сложно реализовать, потому что я все еще новичок, но я одобрю ваш ответ, когда добьюсь успеха.

JohnSmith2521 27.02.2019 10:41

Другие вопросы по теме