为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

PHP
DIEA 2021-10-15 15:25:55
我想为一个控制器使用一个路由,但使用不同的操作。我想通过会话中的当前值来切换控制器的动作,但不要更改路由(浏览器中的当前 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,laravel 5.8对于第一个代码变体:始终打开一个操作“StravaController@login”,对于第二个代码变体:打开空白页面我想期待一个动作“StravaController@index”(会话值不为空)或一个动作“StravaController@login”(如果会话值为空)
查看完整描述

1 回答

?
大话西游666

TA贡献1817条经验 获得超14个赞

将所有内容发送到一个函数:


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

    }

}

另一种选择是将登录页面放在不同的路由上,如果“登录”数据不存在,则让中间件重定向到它。


查看完整回答
反对 回复 2021-10-15
  • 1 回答
  • 0 关注
  • 99 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信