【问题标题】:hidden magic in Laravel blade componentsLaravel 刀片组件中的隐藏魔法
【发布时间】:2020-08-22 22:22:17
【问题描述】:

我有匿名组件resources\views\components\homepage\feedback.blade.php 在主页上呈现反馈。从一开始它只是html。然后我决定连接Class文件。我已经有了另一个 View Class 组件,我只是手动复制了它,而不是使用 artisan 命令。

App\View\Components\Feedback.php

namespace App\View\Components;

use Illuminate\View\Component;
use App\Models\Feedback;

class Feedback extends Component
{
    public $feedbacks;

    public function __construct()
    {
        $this->feedbacks = Feedback::wherePublished(true)->take(5);
    }


    public function render()
    {
        return view('components.homepage.feedback');
    }
}

然后视图文件中的 {{ dd($feedbacks) }} 给了我这个变量没有定义的错误。

Undefined variable: feedbacks (View: C:\laragon\www\lara7\resources\views\components\homepage\feedback.blade.php)

如果我尝试使用 artisan 命令创建测试组件并将此代码放入其中,它可以工作,但是我无法将其重命名回反馈类。它给了我错误

Symfony\Component\ErrorHandler\Error\FatalError
Cannot declare class App\View\Components\Feedback because the name is already in use

但是旧的类已经被删除了,所以我不明白出了什么问题。

View Class 和 Blade 组件之间似乎有一些隐藏的链接,需要删除。但是这个链接在哪里呢?

【问题讨论】:

  • 能不能把feedback.blade.php的相关内容显示一下?
  • Laravel 高亮刀片文件 @foreach ($feedbacks as $feedback)中的这个字符串
  • 即使我只放了{{ dd($feedbacks)}},它还是没有定义
  • 所以问题不在于 Blade。问题是$categories 没有从视图类转移到视图模板

标签: php laravel laravel-blade


【解决方案1】:

当组件类型从匿名切换到类再切换回来时,你必须清除编译的视图文件:

php artisan view:clear

这是因为 Laravel 将特定的组件类型调用合并到编译后的视图代码中。

【讨论】:

    【解决方案2】:

    在 Laravel 8 中你可以使用并且不需要声明组件

    <x-homepage.feedback />
    

    【讨论】:

      【解决方案3】:

      我认为你是对的,我一直有同样的问题,而且我一直在努力解决这个问题。最后我找到了一个解决方法,如果您更改文件名它可以工作,所以我认为这是 laravel 框架的问题,我认为他们需要解决这个问题

      【讨论】:

        【解决方案4】:

        我发现了问题。

        我得到$feedbacks is undefined,因为我没有变量的匿名组件最初位于resources\views\components\homepage\feedback.blade.php,当我决定为这个组件创建视图类时,没有建立链接。 仅当刀片文件直接位于 resources\views\components 文件夹中时,Laravel 才会在 feedback.blade.phpapp\View\FeedbackComponent.php 之间创建自动链接。我的组件在子文件夹中。

        所以 laravel 尝试渲染 resources\views\components\homepage\feedback.blade.php 和内部的 $feedback 变量,它找不到 $feedback 的定义位置。

        所以我只是在 appservice 提供者启动方法中手动注册了这样的 FeedbacksComponent 类

        Blade::component('homepage-feedbacks', FeedbacksComponent::class);
        

        然后使用&lt;x-homepage-feedbacks/&gt;来渲染它

        我会说文档不是很清楚。它说组件文件夹之外的自动发现不起作用。 但这并不是说内部组件子文件夹自动发现不起作用。

        【讨论】:

          猜你喜欢
          • 2016-10-14
          • 2014-06-22
          • 2015-05-13
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2021-01-28
          • 2021-05-11
          • 2018-02-06
          相关资源
          最近更新 更多