скрытые маги c в Laravel компоненты лезвия - PullRequest
1 голос
/ 07 мая 2020

У меня был анонимный компонент resources\views\components\homepage\feedback.blade.php для отображения обратной связи на домашней странице. С самого начала было всего html. Тогда я решил подключить файл класса. У меня уже был другой компонент 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 и поместить в него этот код работает, но потом я не могу переименовать его обратно в класс Feedback. Это дает мне ошибку.

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

Но старый класс уже удален, поэтому я не могу понять, что не так. быть стертым. Но где находится эта ссылка?

Ответы [ 2 ]

0 голосов
/ 04 сентября 2020

Думаю, вы правы, у меня была такая же проблема, и я действительно боролся с ней. Наконец, я нашел обходной путь, который заключается в том, что если вы измените имя файла, оно работает, поэтому я думаю, что это проблема с фреймворком laravel, и я думаю, что им нужно решить эту проблему

0 голосов
/ 15 мая 2020

Я обнаружил проблему.

Я получил $feedbacks is undefined, потому что мой анонимный компонент без переменных изначально находился в resources\views\components\homepage\feedback.blade.php, и когда я решил создать класс представления для этого компонента, связь не была установлена. Laravel создает автоматическую c связь между feedback.blade.php и app\View\FeedbackComponent.php, только если файл лезвия находится непосредственно в папке resources\views\components. И мой компонент находился в подпапке.

Итак, laravel попытался отобразить resources\views\components\homepage\feedback.blade.php с переменной $feedback внутри, и не смог найти, где определено $feedback.

Так что я просто вручную Зарегистрируйте класс FeedbacksComponent, подобный этому, в методе загрузки поставщика службы приложений

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

, а затем используйте <x-homepage-feedbacks/> для его рендеринга

Я бы сказал, что документация не очень ясна. Он говорит, что за пределами папки компонентов автоматическое обнаружение c не работает. Но это не говорит о том, что автоматическое обнаружение подпапок внутри компонентов c не работает.

...