一种用于不同控制器动作的途径

时间:2019-07-17 13:49:51

标签: php laravel

我想对一个控制器使用一条路由,但要执行不同的操作。我想通过会话中的当前值切换控制器的动作,但不更改路由(浏览器中的当前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');
}

但是,返回的会话值始终为null(可能是值被缓存了吗?!)

我想在下面使用这里的代码,但是不能按需使用...我也有正确的会话值,但是,我不明白,我需要从回调函数返回什么?

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,laravel 5.8

对于第一个代码变体:始终打开操作“ StravaController @ login”, 对于第二种代码:打开空白页

我希望有一个操作'StravaController @ index'(会话值不为空)或一个操作'StravaController @ login'(如果会话值为空)

1 个答案:

答案 0 :(得分:3)

将所有内容发送到一个功能:

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

另一种选择是将登录页面置于不同的路径上,并且如果不存在“已登录”数据,则使中间件重定向到该页面。