【问题标题】:Service provider only for certain routes - Laravel仅针对某些路线的服务提供者 - Laravel
【发布时间】:2019-04-19 16:09:32
【问题描述】:

我正在 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'));
}

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

Binding a Laravel service provider on specific routes

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

【问题讨论】:

    标签: php laravel


    【解决方案1】:

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

    【讨论】:

    • 一次使用多个中间件有什么缺点吗?我已经在我的前端使用了一些(网络、身份验证等)。
    • 不是真的,只要您没有在中间件中执行任何耗时的任务。
    • 每次访问特定路由时都必须注册服务提供商,这更糟糕。这是中间件的完美用途。
    猜你喜欢
    • 1970-01-01
    • 2019-03-30
    • 2015-01-19
    • 2016-12-21
    • 2015-10-24
    • 2016-10-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多