Laravel 刀片组件中隐藏的魔法

我有匿名组件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 组件之间似乎有一些隐藏的链接,需要删除。但是这个链接在哪里?


哔哔one
浏览 116回答 4
4回答

繁星点点滴滴

在将组件类型从匿名切换到类并返回时,您必须清除已编译的视图文件:php artisan view:clear那是因为 Laravel 将特定的组件类型调用合并到编译的视图代码中。

Smart猫小萌

我发现了问题。我得到了$feedbacks is undefined,因为我没有变量的匿名组件最初位于resources\views\components\homepage\feedback.blade.php,当我决定为此组件创建视图类时,没有建立链接。Laravel 在刀片文件直接位于文件夹中时创建自动链接feedback.blade.php,并且app\View\FeedbackComponent.php仅当刀片文件直接位于文件夹中时resources\views\components。我的组件在子文件夹中。所以 laravel 尝试resources\views\components\homepage\feedback.blade.php使用$feedback内部变量进行渲染,但找不到$feedback定义的位置。所以我只是像在 appservice provider boot 方法中那样手动注册 FeedbacksComponent 类Blade::component('homepage-feedbacks',&nbsp;FeedbacksComponent::class);然后用来&nbsp;<x-homepage-feedbacks/>渲染它我会说文档不是很清楚。它说组件文件夹之外的自动发现不起作用。但它并没有说内部组件子文件夹自动发现不起作用。

紫衣仙女

在 Laravel 8 中你可以使用并且不需要声明组件<x-homepage.feedback&nbsp;/>

慕容森

我认为你是对的,我一直遇到同样的问题,而且我一直在努力解决这个问题。最后我找到了一个解决方法,如果你更改文件名它就可以工作,所以我认为这是 laravel 框架的问题,我认为他们需要解决这个问题
打开App,查看更多内容
随时随地看视频慕课网APP