首页 > 解决方案 > Laravel 将某个参数传递给所有视图中的所有路由

问题描述

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

我最终创建了一个ViewServiceProvider注册视图作曲家,我从请求中获取子域,如下所示:

    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 文档'*'中记录的内容,每次都会将子域变量传递给每个单一视图。

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

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

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

标签: phplaravel

解决方案


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

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

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

Laravel 8.x 文档 - URLs - 默认值


推荐阅读