【问题标题】:How to prevent a parameter from getting injected in controller methods in Laravel如何防止参数被注入 Laravel 的控制器方法中
【发布时间】:2018-06-05 04:06:57
【问题描述】:

我正在 Laravel 中创建一个多语言网站。我需要这样的网址:

https://website.com/en/admin/user/1
https://website.com/ar/admin/user/1

所以我的路线文件看起来像这样:

Route::group(['prefix' => '{locale}'], function(){
Route::middleware("locale")->group(function () {

Route::group(['prefix' => 'admin', 'as' => "admin.", "namespace" => "Admin"],function(){

    Route::get('login', 'LoginController@index')->name("signin")->middleware("Guest");
    Route::post('login', 'LoginController@login')->name('login')->middleware("Guest");

    Route::group(["middleware" => "Admin"], function (){

        Route::get('/', ["as" => "dashboard", "uses" =>'DashboardController@index']);
        Route::get('logout', 'LoginController@logout')->name('logout');
        Route::resource('users', 'UsersController');

    });

});

});
});

我的中间件“语言环境”:

    public function handle($request, Closure $next)
{

    URL::defaults(['locale' => $request->segment(1)]);
    if(in_array($request->segment(1), config('app.locales')))
    {
        app()->setLocale($request->segment(1));
    }
    return $next($request);

}

现在的问题是,当我尝试调用带参数的路由时,我必须将语言环境添加为第一个参数。例如: 这是 UsersController 中的一个方法:

    public function destroy($locale, $id)
{
    //Any Code

}

我必须将 $locale 作为参数添加到方法中才能使用其他参数,否则 $id 将具有 $locale 的值,即“en”、“ar”而不是用户 ID。那么有什么办法可以避免这种情况,所以我的方法看起来像:

    public function destroy($id)
{
    //Any Code
}

【问题讨论】:

    标签: php laravel laravel-5 parameters laravel-routing


    【解决方案1】:

    您可以像这样构建您的路线:

    Route::group(['prefix' => app()->getLocale()], function(){
    

    这样你就可以去掉 locale 路由参数了。

    【讨论】:

    • 是的,我可以这样做,但现在用户将无法通过更改 URL 来更改语言。
    • 嗯,这取决于您如何允许更改语言,您可以创建循环遍历所有语言,或者如果您只想允许更改主页的语言,您可以创建一些额外的路由来处理主页语言改变
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-08-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多