【问题标题】:Laravel domain group without having to pass domain parameter to controllersLaravel 域组,无需将域参数传递给控制器
【发布时间】:2018-07-02 09:43:34
【问题描述】:

我的所有路由都在一个域组中,但我想避免在每个控制器方法中将域作为参数。

所以我想避免到处都有这个:

public function show($domain, $id) {}

并希望保留它为

public function show($id) {}

我能够部分使其与放置在中间件中的$request->route()->forgetParameter('subdomain') 一起工作,但在从控制器方法调用redirect()->action('SomeController@show') 的情况下它不起作用。


这里有更多细节:

首先,所有路由都在一个域组中。

Route::middleware(['some_middleware'])->domain('{subdomain}' .website.com)->group(function () {

    // .. All routes

}   );

然后,在 some_middleware 我有

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

    // .. 

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

    return $next($request);
}

那么它不起作用的地方:

class SomeController {

    public function process()
    {
        // ...

        redirect()->action('SimpleController@show', ['simple' => $id]);
    }
}

我得到的错误是:

Missing required parameters for [Route: ] [URI: simples/{simple}].

这仅在我明确传入 subdomain 变量时才有效。

class SomeController {

    public function process()
    {
        // ...

        redirect()->action('SimpleController@show', ['subdomain'=>'some_subdomain', 'simple' => $id]);
    }
}

任何人都可以为此建议“修复”吗?在此先感谢:)

【问题讨论】:

    标签: laravel laravel-5.5


    【解决方案1】:

    在 Laravel 5.5+ 中,您可以使用 URL::defaults 为路由助手等设置请求范围的值。

    https://laravel.com/docs/5.6/urls#default-values

    public function handle($request, Closure $next) {
    
        // .. 
        $subdomain = $request->route('subdomain');
    
        URL::defaults(['subdomain' => $subdomain]);
    
        $request->route()->forgetParameter('subdomain');
    
        return $next($request);
    }
    

    【讨论】:

      【解决方案2】:

      您可以为 action() 助手创建一个包装器 helper

      if (! function_exists('actionSub')) {
          function actionSub($name, $parameters)
          {
              return action($name, $parameters + ['subdomain' => request()->route('subdomain')]);
          }
      }
      

      然后使用它:

      redirect(actionSub('SimpleController@show', ['simple' => $id]));
      

      如果有人对此有更优雅的解决方案,很高兴看到它。

      【讨论】:

        猜你喜欢
        • 2015-02-25
        • 2020-11-30
        • 1970-01-01
        • 2015-02-16
        • 2019-08-12
        • 1970-01-01
        • 2016-05-16
        • 2017-01-12
        • 1970-01-01
        相关资源
        最近更新 更多