【问题标题】:Laravel 5 view composer service provider, exclude prefix from wildcardLaravel 5 查看作曲家服务提供者,从通配符中排除前缀
【发布时间】:2015-02-21 14:54:56
【问题描述】:

view composer documentation 之后,我为我的基本视图创建了一个类 ComposerServiceProvider 和一个 ViewComposer。我想为我的站点的管理区域使用另一个视图编辑器,称为 AdminComposer。这些是我的班级标题:

(namespace App\Http\Composers)

class ViewComposer
class AdminComposer extends ViewComposer

这是我的 Composer 服务提供者:

<?php namespace App\Providers;

use View;
use Illuminate\Support\ServiceProvider;

class ComposerServiceProvider extends ServiceProvider {

    /**
     * Register bindings in the container.
     *
     * @return void
     */
    public function boot()
    {
        View::composer('admin/*', 'App\Http\Composers\AdminComposer');
        View::composer('*', 'App\Http\Composers\ViewComposer');
    }

    /**
     * Register any application services.
     *
     * @return void
     */
    public function register()
    {
        //
    }

}

在我的作曲家服务提供商的 boot() 方法中,我想将 ViewComposer 分配给我的所有视图,但前缀为“admin”的视图除外,它应该使用 AdminComposer。

然而,在当前设置中,两个视图合成器都被使用,因为路径“admin/*”也遵循路径“*/”。有没有办法可以从通配符路径中排除管理员前缀,而不必单独声明将使用 ViewComposer 的所有路径?

【问题讨论】:

  • 视图作曲家需要什么?将其附加到两个区域的布局视图可能就足够了。
  • 它包含各种标准输入、数据、变量等。我曾经在 Laravel 4 中有这些,我只是在其中创建了一个自定义视图方法,它在 L5 中不再工作得很好。我设置默认页面标题,添加要加载的样式表和脚本列表,加载一些用户设置等。AdminComposer 仅覆盖 ViewComposer 的一小部分。
  • 您认为将它们附加到布局视图会起作用吗?
  • 不确定。如果这涉及在控制器中使用“$this->layout”做任何事情,那么不,因为我没有在我的应用程序中使用它。
  • 不,绝对不是。我假设您在您的视图中使用@extends('something')?那就是你的“布局”视图。

标签: php laravel-5


【解决方案1】:

仅将视图编辑器附加到您的两个布局文件可能就足够了。这样,您不仅可以解决普通视图和管理视图之间的冲突,而且 composer 每个请求只运行一次,而不是两次或更多(对于视图和布局视图,可能还有更多视图)

View::composer('layouts.admin', 'App\Http\Composers\AdminComposer');
View::composer('layouts.master', 'App\Http\Composers\ViewComposer');

【讨论】:

    猜你喜欢
    • 2017-12-26
    • 1970-01-01
    • 1970-01-01
    • 2015-06-18
    • 2015-07-25
    • 2016-12-21
    • 2014-08-02
    • 1970-01-01
    • 2013-04-12
    相关资源
    最近更新 更多