Класс не найден [Laravel 5.5, производственный проект]

Я работаю с Laravel 5.5. Я загрузил свой проект на сервер. Но я получил ошибку, из-за которой мой проект отлично работает на локальном сервере.

Класс 'App\Models\Textbox\TextBox' не найден Symfony\Component\Debug\Exception\FatalThrowableError

Я знаю, я просто запускаю composer dump-autoload и все работает нормально. Но главная проблема в том, что основной сервер хостинга — bluehost/cpanel. Я не могу запустить какую-либо команду в оболочке, потому что там написано ваша учетная запись не подтверждена, и я не могу этого сделать, потому что учетная запись не моя.

Но я искал альтернативные решения и просто загружал эти папки на сервер после запуска dump-autoload на локальном сервере.

\bootstrap
\vendor\composer

Но это не работает. Наконец, я просто загружаю всю папку vendor и не получаю никакого результата.

Должен ли я запускать dump-autoload только сервер commandline/bash ?
Могу ли я решить эту проблему, не выполняя никаких commandline запросов на сервере?

P.S. Я просмотрел все связанные вопросы и все решения из Google, но не могу подготовить их к работе :(

Это моя структура папок:

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


person rufatZZ    schedule 26.12.2017    source источник
comment
Установите правильный путь для модели TextBox   -  person parth patel    schedule 26.12.2017
comment
что ты имеешь в виду, путь?, все пути верны   -  person rufatZZ    schedule 26.12.2017
comment
объявить TextBox в верхней части файла, например, использовать App\Models\Textbox\TextBox; исправить этот путь   -  person parth patel    schedule 26.12.2017
comment
Я только что обновил свой вопрос, добавил структуру папок. Все правильно. Если какой-либо путь неправильный, он не будет работать. Но проект отлично работает на локальном сервере :)   -  person rufatZZ    schedule 26.12.2017


Ответы (1)


Помните о регистре имени вашего класса.

Как видите, вы получаете ошибку:

App\Models\Textbox\TextBox

но ваш класс:

App\Models\TextBox\TextBox

так что, как вы видите, каталог / пространство имен с большой буквы B.

Это важно для автозагрузки композитора, чтобы иметь точно такое же имя класса и каталог с допустимым регистром (при условии, что вы используете PSR-4, но это значение по умолчанию для Laravel).

В Windows регистр файла/каталога не имеет значения, поэтому вы можете написать свое пространство имен также TEXTBOX (для Windows каталог TEXTBOX совпадает с textbox), но на сервере Linux нет каталога TEXTBOX, нет каталога Textbox - есть только TextBox каталог, поэтому будет невозможно автоматически загрузить класс, и поэтому вы получаете сообщение об ошибке на производстве, а на локальном хосте он работает нормально.

person Marcin Nabiałek    schedule 26.12.2017
comment
Ваше имя может быть все еще объявлено в нижнем регистре. Помните, что при разработке на компьютере с Windows ваша файловая система нечувствительна к регистру, но при развертывании на компьютере с Linux имя папки должно быть написано с правильным регистром. - person Jonas Osburg; 26.12.2017
comment
@JonasSchwabe правда? Спасибо за хорошее замечание. Я не знаю об этом. Да, я запускаю этот проект на локальном сервере без проблем, но сервер доставил мне некоторые проблемы :) - person rufatZZ; 26.12.2017