【问题标题】:View composer is not working in laravel 5.6视图作曲家在 laravel 5.6 中不起作用
【发布时间】:2018-09-28 05:27:10
【问题描述】:

我正在为所有视图创建一个通用作曲家,但它不能正常工作。

App/Http/ViewComposers 中为作曲家创建目录。

ViewComposers 内创建一个MovieComposer.php

namespace App\Http\ViewComposers;

use Illuminate\View\View;

class MovieComposer
{
    public $movieList = [];

    public function __construct()
    {
        $this->movieList = [
        'Movie One',
        'Movie Two',
        'Movie Three',
        'Movie Four',
        'Movie Five'
        ];
    }

    public function compose(View $view)
    {
        $view->with('latestMovie', 'Hello');
    }
}

为作曲家创建服务提供者

php artisan make:provider ComposerServiceProvider

在providers的config/app.php中注册ComposerServiceProvider

App\Providers\ComposerServiceProvider::class,

ComposerServiceProvider.php内的代码

namespace App\Providers;

use Illuminate\Support\Facades\View;
use Illuminate\Support\ServiceProvider;

class ComposerServiceProvider extends ServiceProvider
{
    /**
     * Bootstrap the application services.
     *
     * @return void
     */
    public function boot()
    {
        // View::share('latestMovie', 'Hello world');

        View::composer('app', 'App\Http\ViewComposers\MovieComposer@compose');

        // view()->composer('app', function($view){
        //     $view->with('latestMovie', 'Hello world');
        // });

        // view()->composer(
        //   'app',
        //   'App\Http\ViewComposers\MovieComposer'
        // );
    }

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

在此代码中,latestMovie 变量是在所有视图中使用的全局变量,但它不能正常工作。

错误。

错误异常 (E_ERROR) 未定义变量:latestMovie(查看:/home/rupendrakumardhiman/Projs/badass/resources/views/layouts/app.blade.php)(查看:/home/rupendrakumardhiman/Projs/badass/resources/views/layouts/app.blade。 php)

【问题讨论】:

    标签: laravel


    【解决方案1】:

    尝试将您的视图作曲家附加视图更改为layouts.app

    View::composer('layouts.app', 'App\Http\ViewComposers\MovieComposer@compose');
    

    或通配符视图

    View::composer('*', 'App\Http\ViewComposers\MovieComposer@compose');
    

    请记住,每个使用的@include 都会触发通配符视图。

    【讨论】:

      【解决方案2】:
      View::composer('app', 'App\Http\ViewComposers\MovieComposer@compose');
      

      你不应该使用最后的@compose。如果问题仍然存在,请确保您的“resources/views”目录中有一个名为“app”(视图文件的名称)的视图。

      【讨论】:

        猜你喜欢
        • 2019-03-08
        • 2015-06-14
        • 1970-01-01
        • 2018-12-30
        • 2019-02-28
        • 1970-01-01
        • 2017-03-13
        • 2022-06-13
        • 1970-01-01
        相关资源
        最近更新 更多