首页 > 解决方案 > 仅针对某些路线的服务提供者 - Laravel

问题描述

我正在 laravel 中构建页面构建器。前端呈现添加到我的管理员页面的“块”。我认为确保这些块在我需要它们的任何地方都可用的最佳方法是将它们加载到一个效果很好的 View Composer 中;

View::composer('*', function ($view) {
    $blocks = Page::where('url', url()->current());

    return view()->with(['blocks', $blocks]);
});

但是,这会尝试为前端路由和管理路由加载块。有什么方法可以确保它们只加载到前端的路由?

我已经将我的路线分成这样的单独文件;

// lets me use an admin.php for my admin routes, instead of web.php
$this->mapAdminRoutes();

protected function mapAdminRoutes()
{
    Route::prefix('admin')
         ->middleware('admin')
         ->namespace($this->namespace)
         ->group(base_path('routes/admin.php'));
}

我在谷歌搜索时确实发现了这个问题

在特定路由上绑定 Laravel 服务提供者

但这仍然会在所有路由上加载服务提供者 - 只是推迟视图编写器(它适用于该 OP 的性能问题)。

标签: phplaravel

解决方案


中间件更适合这种类型的事情,因为您可以将其应用于您想要的任何路由/路由组。


推荐阅读