Один маршрут для разных действий контроллера

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

Я пробовал этот код:

$token = session('stravaAccessToken');
$athlete = session('stravaAthlete');
$stats = session('stravaStats');

if (empty($token) || empty($athlete) || empty($stats)) {
    Route::get('/', 'StravaController@login');
} else {
    Route::get('/', 'StravaController@index');
}

но значения сеанса всегда возвращаются нулевыми (может быть, значения кэшируются?!)

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

Route::get('/', function(){
    $token = session('stravaAccessToken');
    $athlete = session('stravaAthlete');
    $stats = session('stravaStats');

    if (empty($token) || empty($athlete) || empty($stats)) {
        Route::get('/', 'StravaController@login');
    } else {
        Route::get('/', 'StravaController@index');
    }
});

php 7.1, ларавель 5.8

для первого варианта кода: всегда открывал действие «StravaController@login», для второго варианта кода: открытая пустая страница

Я хотел бы ожидать действия «StravaController@index» (если значения сеанса не пусты) или действия «StravaController@login» (если значения сеанса пусты)

Не проще ли это сделать в конструкторе контроллера?

qwertzman 17.07.2019 15:54

Я знаю о конструкторе контроллера, но я хотел бы понять некоторые функции, которые я не могу найти в документах. Например, как я могу изменить 'controller@action' в обратном вызове маршрута... Если это возможно, конечно

Антон Хороший 17.07.2019 17:08
Стоит ли изучать 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 и хотите разрабатывать...
1
2
46
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

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

Отправить все в одну функцию:

Route::get('/', 'StravaController@handle');

и пусть эта функция вызывает функции login/index соответственно:

public function handle() {
    $token = session('stravaAccessToken');
    $athlete = session('stravaAthlete');
    $stats = session('stravaStats');

    if (empty($token) || empty($athlete) || empty($stats)) {
        return $this->login();
    } else {
        return $this->index();
    }
}

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

хорошо... но могу ли я сделать это в конфигурации веб-маршрута? или это не невозможно?

Антон Хороший 17.07.2019 15:59

@АнтонХороший Нет, вы не можете сделать это в конфигурации веб-маршрута. (Отчасти потому, что сеансы еще не доступны в этот момент, а отчасти потому, что вы должны кэшировать конфигурацию маршрута в рабочей среде.)

ceejayoz 17.07.2019 16:00

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