【发布时间】: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')?那就是你的“布局”视图。