Laravel «Не удается найти класс или представление для компонента» в рабочей среде

#php #laravel #laravel-blade #laravel-livewire

#php #laravel #laravel-blade #laravel-livewire

Вопрос:

Я разрабатываю локально на Mac. Последняя версия Big Sur.

Сегодня я отправился развертывать свое приложение для производства через сервер Ubuntu через Forge и получил сообщение об ошибке, которую я никогда раньше не видел, и не могу найти ответ в Интернете. Я вижу, что МНОГИЕ люди жалуются на это, но все, что кто-либо сказал в других ответах, — это ссылки на проблемы, которые на самом деле не имеют решений или даже объяснений, поэтому я задаю новый вопрос.

Точная ошибка заключается в следующем; Unable to locate a class or view for component [layouts.base]. (View: /home/forge/default/releases/20201204084441/resources/views/layouts/app.blade.php)

В моем приложении у меня есть; appViewComponentsLayoutsApp.php который выглядит так;

 <?php

namespace AppViewComponentsLayouts;

use IlluminateViewComponent;

class App extends Component
{
    public function render()
    {
        return view('layouts.app');
    }
}
 

Тогда у меня также есть;
resourcesviewslayoutsapp.blade.php

 <x-layouts.base>
<!-- contents -->
</x-layouts.base>
 

(Также почти то же самое для base)

Работает безупречно на Mac. Как только я развертываю его в Ubuntu, я получаю сообщение об ошибке выше, что он «не может найти класс или представление» с этими именами.

Может кто-нибудь, пожалуйста, проинструктировать меня о том, как я могу это исправить, поскольку пока я понятия не имею, и, несмотря на то, что я знаю, что чувствительность к регистру, вероятно, является проблемой в соответствии с другими вопросами по этому поводу, я не могу найти никакого реального решения или способа решить эту проблему.

Комментарии:

1. попробуйте composer dump-autoload

2. @KamleshPaul Спасибо за предложение, но та же проблема / ошибка. Также может вызвать ту же ошибку при запуске php artisan view:cache на моем сервере. Но если я выполню ту же команду на своем Mac, она завершится успешно.

3. проверьте, присутствует ли это в вашем ubuntu views/layouts/app.blade.php ?

4. @KamleshPaul Да, он присутствует.

5. в той же папке /home/forge/default/releases/20201204084441 ?

Ответ №1:

У меня была та же проблема. Благодаря вашему вопросу я смог узнать, как его решить: D

В моем случае я создал компонент внутри другой папки для лучшей организации:

 $ php artisan make:component Tutorial/channelName/Alert
 

Таким образом, он создал компонент представления внутри следующего каталога:

views/components/tutorial/channel-name/alert.blade.php

Теперь, чтобы вызвать ваш компонент, вы делаете это следующим образом:

 <x-tutorial.channelName.alert />
 

Это в значительной степени так.

Ответ №2:

Я столкнулся с той же проблемой, и я исправил ее, перепроверив имя моей папки.

Обратите внимание, что имя папки должно быть components , а не component .

Обратитесь к скриншоту для лучшей идеи.

введите описание изображения здесь

Пример:

В случае, если вы следуете соглашению, еще одна вещь заключается в том, что если у вас есть файл в

views/components/admin/side-menu/side.blade.php

Вы можете вызвать свой компонент как:

<x-admin.side-menu.side></x-admin.side-menu.side>

Объяснено:

Синтаксис, x- используемый в блейде, в основном сообщает, что вы выбираете папку или файл из Components папки.

. (Точка) используется для каждого каталога, который вы копаете в файл блейда, который хотите использовать.

Комментарии:

1. Мне потребовалось слишком много времени, чтобы понять, что я назвал его component вместо components, спасибо 🙂

Ответ №3:

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

Пожалуйста, попробуйте использовать заглавную букву имени класса, которое соответствует компоненту в сообщении об ошибке.

Ответ №4:

В моем случае я не предоставил пространство имен в компоненте, это решилось после предоставления пространства имен.

Ответ №5:

когда я был новичком, я получил ту же ошибку, но в моем случае все в порядке, но есть небольшая синтаксическая ошибка <x- card /> , между карточкой и тире есть пробел, который неверен, поэтому между тире и картой не должно быть пробела <x-card /> , поэтому попробуйте один раз, возможно, это ваша проблема.

Ответ №6:

У меня была та же проблема — решение состояло в том, чтобы изменить: <x-forms.inputradio> to: <x-forms.inputRadio> просто размер буквы..

Ответ №7:

Проблема, связанная с упомянутой проблемой, чувствительна к регистру,

для локального похоже, что по причинам, не зависящим от регистра, он работает для локального perfect, но прерывается при подаче.

если у вас есть создать новый компонент внутри любой новой папки, то есть

 $ php artisan make:component Widgets/CustomAlert
 

он создаст два файла, class и blade-файл для компонента.
файл класса

 appViewsComponents\CustomAlert.php
 

блейд-файл

 resourcesviewscomponentswidgets.custom-alert.blade.php
 

вы можете отобразить компонент либо с помощью класса, либо с помощью блейд-файла.
для класса убедитесь, что папка, имя класса чувствительны к регистру
ie.

 <x-Widgets.CustomAlert />
 

для отображения блейд-файла он должен быть

 <x-widgets.custom-alert />
 

Примечание
если вы вручную переместили файл, убедитесь, что ваше пространство имен в файле класса, имя файла и синтаксис вызова компонента должны совпадать (с учетом регистра)

примеры приведены только для справки попробуйте сравнить синтаксис и имена с вашими файлами, папками.

Надеюсь, это поможет 🙂

Ответ №8:

Это происходит на сервере. старайтесь не создавать компоненты внутри папки.. у меня была такая же проблема на сервере, но я не получил никакого решения, единственное решение — сохранить ваши компоненты вне любой подпапки