【问题标题】:How to resovle problem view composer in laravel如何解决 laravel 中的问题视图作曲家
【发布时间】:2020-08-20 10:37:37
【问题描述】:

config/app.php

'providers' => [
     // ...
     App\Providers\ViewServiceProvider::class,
     App\Http\View\Composers\AdComposer::class,
],

app/Providers/ViewServiceProvider.php

<?php

namespace App\Providers;

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

class ViewServiceProvider extends ServiceProvider
{

    public function register()
    {
        //
    }

    public function boot()
    {
        View::composer(
            'layouts.sidebar', 'App\Http\View\Composers\AdComposer'
        );
    }
}

app/Http/View/Composers/AdComposer.php

<?php

namespace App\Http\View\Composers;

use App\Ad;
use Illuminate\View\View;
use Illuminate\Support\Facades\Request;

class AdComposer
{

    protected $ads;

    public function __construct(Ad $ads)
    {
        $this->ads = $ads;
    }

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

我的问题是:

TypeError 参数 1 传递给 App\Http\View\Composers\AdComposer::__construct() 必须是一个实例 App\Ad 的实例,给定的 Illuminate\Foundation\Application 实例,称为 在 E:\appoo\vendor\laravel\framework\src\Illuminate\Foundation\ProviderRepository.php 在第 208 行

如何解决此问题并将 $ads 传递给查看?

【问题讨论】:

    标签: php laravel laravel-blade service-provider


    【解决方案1】:

    从 providers 数组中移除 AdComposer

    文档状态:

    请记住,如果您创建一个新的服务提供者来包含您的视图编写器注册,您需要将服务提供者添加到 config/app.php 配置文件中的 providers 数组中。

    它不会告诉你将你的作曲家添加到提供者数组中。

    此外,如果您键入提示 App\Ad,您将得到一个空实例,以便您知道。

    【讨论】:

    • 我从提供程序数组中删除了 AdComposer,但 ViewServiceProvider 仍保留在此数组中。但现在显示错误:目标类 [view.engine.resolver] 不存在。
    • @MehdiJalali 确保您的 viewServiceProvider 是提供程序数组中的最后一个条目,并确保 Illuminate\View\ViewServiceProvider::class 仍在您的条目上方的数组中。如果这没有帮助,我需要完整的错误回溯
    • 谢谢。此问题已解决,但现在出现了新问题:使用 foreach $ads 作为 $ad 并使用 $ad->title 显示“非对象错误”。我使用 foreach ($ads as $ad) {{ dd($ad) }} endforeach 并且只显示 true。
    • @MehdiJalali 那是因为你试图通过作曲家的构造函数依赖注入一个模型,它不会返回一个数组,也不会那样工作,我不确定你到底是什么重新绑定,但如果您想展示所有广告,只需使用 $view-&gt;with('ads', Ad::all()) 并完全删除 $this-&gt;ads
    • 谢谢sssssssss。将$view-&gt;with('ads', Ad::all()) 更改为$this-&gt;ads 并在视图中返回值。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-06-15
    • 2016-07-07
    • 1970-01-01
    • 2014-05-07
    • 2019-09-20
    • 2015-06-14
    • 2016-08-06
    相关资源
    最近更新 更多