Laravel 5视图编辑器服务提供程序,从通配符中排除前缀

Mar*_*kes 6 php laravel-5

视图编辑器文档之后,我为基本视图创建了一个ComposerServiceProvider类和一个ViewComposer.我想在我的网站的管理区域使用另一个视图编辑器,名为AdminComposer.这些是我的类标题:

(namespace App\Http\Composers)

class ViewComposer
class AdminComposer extends ViewComposer
Run Code Online (Sandbox Code Playgroud)

这是我的作曲家服务提供商:

<?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()
    {
        //
    }

}
Run Code Online (Sandbox Code Playgroud)

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

但是,在当前设置中,使用两个视图编辑器,因为路径"admin/*"也遵循路径"*/".有没有办法可以从通配符路径中排除管理员前缀,而不必单独声明将使用ViewComposer的所有路径?

luk*_*ter 10

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

View::composer('layouts.admin', 'App\Http\Composers\AdminComposer');
View::composer('layouts.master', 'App\Http\Composers\ViewComposer');
Run Code Online (Sandbox Code Playgroud)