Phi*_*arc 4 laravel laravel-routing laravel-5.5
Laravel 5.5 中新Route::redirect引入的功能很实用,但是是否允许{any}通配符?
这是我以前在 Laravel 5.4 中所做的
Route::get('slug', function () {
return redirect('new-slug', 301);
});
Run Code Online (Sandbox Code Playgroud)
在 Laravel 5.5 中,我可以执行以下操作:
Route::redirect('slug', url('new-slug'), 301);
Run Code Online (Sandbox Code Playgroud)
这允许通过摆脱闭包来缓存路由。
到目前为止一切顺利,但是如果我想使用通配符怎么办?在 Laravel 5.4 中,我可以这样做:
Route::get('slug/{any}', function ($any) {
return redirect('new-slug/'.$any, 301);
});
Run Code Online (Sandbox Code Playgroud)
当然,我仍然可以在 Laravel 5.5 中使用它,但我的观点是能够缓存我的路由文件。
新版本是否Route::redirect允许使用通配符,或者是我使用控制器的唯一选择?
编辑:我想做的是这样的:
Route::redirect('slug/{any}', url('new-slug/'.$any), 301);
Run Code Online (Sandbox Code Playgroud)
这当然不起作用,因为我不知道在哪里引用该$any变量。
您可以使用:
Route::redirect('slug/{any}', url('new-slug', Request::segment(2)), 301);
Run Code Online (Sandbox Code Playgroud)
如果您需要使用输入数据进行重定向:
Route::redirect('slug/{any}', str_replace_first('slug', 'new-slug', Request::fullUrl()), 301);
Run Code Online (Sandbox Code Playgroud)
请注意,上述函数url() Request::segment(2) str_replace_first将在每个请求中调用,尽管没有匹配slug/{any},无需担心,但我更喜欢在这种情况下创建自己的控制器或直接在 Web 服务器中添加重定向。
| 归档时间: |
|
| 查看次数: |
2972 次 |
| 最近记录: |