Чому я повинен запускати команду “composer dump-autoload”, щоб перенесення працювали в laravel?


80

Я створив у своєму додатку кілька класів міграції для створення потрібних таблиць, але постійно отримую помилки. Мені потрібно виконати цю команду:

composer dump-autoload

Тільки тоді він знову працює, як очікувалося. Я роблю щось не так, що породжує цю помилку, або це нормальна поведінка при міграціях?

Нижче наведена помилка, яку я отримую під час запуску процесу міграції:

  [Symfony\Component\Debug\Exception\FatalErrorException]  
  Class 'CreateVideoStatusTable' not found  

ви використовуєте phpartisan для міграцій?
Дуєна

так, я використовую його для створення таблиці створення та запуску міграції
Хасан Аль-Натур

чи використовуєте ви Illuminate \ Database \ Schema \ Blueprint; використовувати Illuminate \ Database \ Migrations \ Migration; всередині вашого файлу і поширюєте клас Migration?
Дуєна

так, використовуючи "use Illuminate \ Database \ Schema \ Blueprint" і "use Illuminate \ Database \ Migrations \ Migration".
Хасан Аль-Натур

Зазвичай, коли я створюю файли міграції, вони виглядають подібними до цього codehare.io/3iRxd, подивіться і перевірте, чи дотримується ваш аналогічний зразок. Якщо це не так, вам потрібно переконатися, що ви розширюєте клас Migration. все виглядає нормально?
Дуєна

Відповіді:


95

Гаразд, я думаю, я знаю проблему, яка виникає у вас.

В основному, оскільки Composer не бачить файли міграції, які ви створюєте, вам доведеться запустити команду dump-autoload, яка не завантажує нічого нового, але знову шукає всі класи, які вона повинна включити. Він просто регенерує список усіх класів, які потрібно включити до проекту (autoload_classmap.php), і саме тому ваша міграція працює після запуску цієї команди.

Як це виправити (можливо) Вам потрібно додати додаткову інформацію у файл composer.json.

"autoload": {
    "classmap": [
        "PATH TO YOUR MIGRATIONS FOLDER"
    ],
}

Вам потрібно додати шлях до папки міграцій до масиву classmap. Потім виконайте наступні три команди ...

php artisan clear-compiled 
composer dump-autoload
php artisan optimize

Це очистить поточні скомпільовані файли, оновить потрібні класи, а потім випише їх назад, щоб не потрібно було робити це знову.

В ідеалі ви виконуєте composer dump-autoload -oдля швидшого завантаження веб-сторінок. Єдина причина, що це не за замовчуванням, полягає в тому, що генерування займає трохи більше часу (але це лише трохи помітно).

Сподіваюся, вам вдасться це відсортувати, адже це дуже дратує :(


6
я не розумію, чому laravel не впорався з цим, це чудова структура.
Хасан Аль-Натур

у мене вже є файл composer.json із цим: "autoload": {"classmap": ["database"], "psr-4": {"App \\": "app /"}},
Hasan Al- Natour

як мені додати шлях?
Хасан Аль-Натур

у мене сталася помилка під час запуску "php artisan dump-autoload": [InvalidArgumentException] Команда "dump-autoload" не визначена.
Хасан Аль-Натур

4
вибачте, вам потрібно використовувати композитор, а не php artisan. Тож його композитор дамп-автозавантаження
Дуєна


2

Коротка відповідь: класи занять статичні, тоді як автозавантаження PSR динамічне.

Якщо ви не хочете використовувати класи, використовуйте замість цього автозавантаження PSR.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.