Laravel 5.5 - 动态添加路由后缀导致“页面已过期”?

时间:2017-12-12 01:57:37

标签: php laravel routing laravel-5.5

由于各种原因,我们试图创建一个路由结构,以便每个路由也使用-mobile后缀动态识别自身。例如,如果我们在路线中定义了/login,那么用户也可以自动导航到/login-mobile版本的/login并删除页眉和页脚。

我们已经在/app/Exceptions/Handler.php的渲染函数中设置了一定程度的成功,在它抛出404错误之前捕获并重新路由。

public function render( $request, Exception $exception ) {
    $suffix = '-mobile';
    $route = $request->getPathInfo();

    // Check for mobile page suffix
    if ( substr( $route, -strlen( $suffix ) ) === $suffix && strpos( $route, '/api' ) === false ) {
        define( 'MOBILE_PAGE', true );
        $route = substr( $route, 0, -strlen( $suffix ) );
        $new_request = $request->duplicate();
        $new_request->server->set( 'REQUEST_URI', $route );

        return \Route::dispatch( $new_request );
    }

    return parent::render( $request, $exception );
}

简而言之,如果它检测到以-mobile结尾的路线,则会删除已删除-mobile的请求的副本。否则,它正常处理路由。这很有用,效果很好。

除了......当我们提交表单并且它通过-mobile路由时,它总是返回“页面已过期”错误,并忽略表单提交。这立即表明在请求中没有发送CSRF令牌的问题 - 但正常版本的页面工作正常,我们直接复制原始请求。 var_dump( $new_request );显示输入,标题,Cookie,会话ID,所有内容都相同。那么为什么Laravel会抛出这个错误?

任何人都可以对这个问题有所了解,或者说明一种更简单的方法来动态地后缀所有路线吗?

0 个答案:

没有答案