Я хочу использовать один маршрут для одного контроллера, но разные действия. Я хотел бы переключить действие контроллера на текущее значение в сеансе, но не менять маршрут (текущий 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» (если значения сеанса пусты)
Я знаю о конструкторе контроллера, но я хотел бы понять некоторые функции, которые я не могу найти в документах. Например, как я могу изменить 'controller@action' в обратном вызове маршрута... Если это возможно, конечно






Отправить все в одну функцию:
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();
}
}
Альтернативным вариантом может быть размещение страницы входа по другому маршруту и перенаправление промежуточного программного обеспечения на нее, если данные «вошли в систему» отсутствуют.
хорошо... но могу ли я сделать это в конфигурации веб-маршрута? или это не невозможно?
@АнтонХороший Нет, вы не можете сделать это в конфигурации веб-маршрута. (Отчасти потому, что сеансы еще не доступны в этот момент, а отчасти потому, что вы должны кэшировать конфигурацию маршрута в рабочей среде.)
Не проще ли это сделать в конструкторе контроллера?