拉维尔 5.4 : How to DO NOT use route parameter in controller

标签 laravel laravel-5.4

我正在开发一个多语言应用程序并尝试制作一个中间件来将路由 {locale} 前缀传递给 URL。但是现在我不需要在 Controller 中使用这个 {locale} 参数,例如:

public function getPost(App\Post $post)
{
    return view('welcome')->withPost($post);
}

但上面的代码不起作用,除非我将 App\Post $post 更改为 $locale, App\Post $post

问题是因为每当我创建一个新的 Controller 时我都需要传递 $locale 参数。那可不酷。

如何避免将 $locale 参数传递给所有 Controller ?我不需要它,因为我已经在我的中间件上使用了它。

更新:

路由\web.php

Route::prefix('{locale}')->middleware('locale')->group(function () {     

    Route::get('/', 'PageController@getHome')->name('welcome');
    Auth::routes();
    Route::get('/home', 'HomeController@index')->name('home');

    ...

    // This route must be the last!
    Route::get('/{post}', 'PageController@getPost')->name('post');
});

最佳答案

在 Laravel 的路由类中有一个 forgetParameter() 方法,它可以从解析到 Controller 方法中移除一个参数。

它可以用于例如在中间件中,通过这样调用它:

$request->route()->forgetParameter('locale');

然后该参数将从 Controller 调度程序的参数属性中删除,因此不会作为参数解析到 Controller 方法中。

关于拉维尔 5.4 : How to DO NOT use route parameter in controller,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44619512/

相关文章:

laravel - Homestead 尝试重新下载盒子

mysql - 数据库访问权限模型

php - 更改文件夹结构以删除公用文件夹时对 Laravel 5 安全性的影响

Laravel 5.4 同步()上的 key 'PRIMARY' 的重复条目

javascript - Laravel Blade,使用 javascript 设置 textarea 多行值

php - Laravel 使用 Monolog\Handler\BrowserConsoleHandler 进行日志记录

php - 找不到两位数的月份 Laravel 中缺少数据

php - Auth::无法识别用户 Laravel 5.4

php - Laravel 5 路由中的多个可选参数

javascript - Vue.js 2.0 在一个项目上渲染相同的组件,但不在另一个项目上渲染