Laravel 5.8 - один маршрут, два разных действия контроллера - PullRequest
0 голосов
/ 11 июня 2019

В laravel 5.8 у меня есть 2 типа URL.

/ news / {category} -> действие отправки в контроллер новостей, если есть категория bind / news / {news} -> send toДействие контроллера новостей, если есть привязка новостей. Другой случай прерывается с 404.

Как я могу решить эту проблему?

1 Ответ

1 голос
/ 11 июня 2019

В Laravel и почти во всех фреймворках и системах маршрутизации, о которых я знаю, отношение Route и Controller / Action составляет 1: 1. Каждый маршрут может иметь только один контроллер или действие для его обработки.

Если я правильно понимаю ваш вопрос, у вас есть один шаблон маршрута /news/{parameter}, и вы хотите, чтобы произошло одно из трех:

  1. {parameter} содержит действительный слаг категории. Получить категорию и отобразить соответствующий вид.

  2. {parameter} содержит действительный фрагмент статьи (подробности). Получить статью и отобразить соответствующий вид.

  3. {parameter} не содержит допустимой категории или слагаемой статьи и, следовательно, не найден. Вернуть ошибку 404.

Вам по-прежнему потребуется только одно действие контроллера, но вы можете разделить логику, чтобы упростить понимание:

маршруты / web.php:

Route::get('/news/{param}', 'NewsController@index');

app / Http / Controllers / NewsController (с псевдокодом):

class NewsController extends Controller
{
    public function index(string $param)
    {
        if ($category = Category::whereSlug($param)->first()) {
            // Return your category view.
        }

        if ($article = Article::whereSlug($param)->first()) {
            // Return your article view.
        }

        \abort(404);
    }
}

Я бы лично рекомендовал не использовать общую структуру URL для двух разных типов сущностей, подобных этой. Это открывает возможность для конфликтов имен (категории и статьи имеют одинаковый слаг) и может ввести пользователя в заблуждение. (Это также может повредить поисковой оптимизации или результатам, но это всего лишь предположение - у меня нет ничего, чтобы это подтвердить или опровергнуть.)

...