由于各种原因,我们试图创建一个路由结构,以便每个路由也使用-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会抛出这个错误?
任何人都可以对这个问题有所了解,或者说明一种更简单的方法来动态地后缀所有路线吗?