【问题标题】:Laravel pass a certain parameter to all routes in all viewsLaravel 将某个参数传递给所有视图中的所有路由
【发布时间】:2020-12-17 01:57:08
【问题描述】:

我需要将一个子域名传递给所有视图,这样当它们生成带有route('namedRoute') 的路由时,用户最终将位于同一个子域中。

我最终创建了一个ViewServiceProvider,它注册了一个view composer,我从请求中获取子域,如下所示:

    use Illuminate\Support\Facades\View as FView;
    use Illuminate\View\View;

    class ViewServiceProvider extends ServiceProvider {
         FView::composer('*', function(View $view){
             $view->with('subdomain', request()->route()->subdomain);
         });
    }

由于'*' 记录在Laravel docs 中,这种方式每次都会将子域变量传递给每个单一视图。

然后当我需要在任何视图中生成任何路由时,我总是必须像这样传递子域并且路由将正确生成。

    {{ route('signInPage', ['subdomain' => $subdomain]) }}

那么,在 laravel 中是否有一些东西(比如 post view processing)我可以挂钩来自动填充子域,这样我现在就不必修改每个视图中的每个路由生成?

【问题讨论】:

    标签: php laravel


    【解决方案1】:

    URL 生成器可以采用默认值,因此您在生成 URL 时不必为路由传递参数:

    URL::defaults(['subdomain' => ....]);
    

    您可以创建一个路由中间件,从请求中获取subdomain 参数并设置此默认值。

    Laravel 8.x Docs - URLs - Default Values

    【讨论】:

    • 这听起来比我做的还要好,我会读一下,试试看。谢谢!
    • 没问题,如果文档中的示例还不够,我可以为您提供一些代码,祝您好运:)
    • 我现在只有一个问题,由于某种原因,在我调用此 URL::defaults 的中间件中,request()->route() 为空,所以试图找出我是否这样做出了点问题或如何从 url 获取子域
    • 我会将其设为路由中间件并将其应用于路由所在的任何组。您也可以使用$request->route('subdomain') 尝试检索参数...以及 Laravel 的版本你在用吗?
    • 我最终将它添加到应用程序的路由中间件“web”组中,这样它就会自动应用于 web.php 中定义的所有路由
    猜你喜欢
    • 1970-01-01
    • 2020-05-10
    • 1970-01-01
    • 2015-04-20
    • 1970-01-01
    • 1970-01-01
    • 2015-02-16
    • 1970-01-01
    • 2019-03-03
    相关资源
    最近更新 更多