#php #composer-php #autoload #psr-4
#php #композитор-php #автозагрузка #psr-4
Вопрос:
Я только начинаю использовать composer для управления зависимостями, и мне трудно понять, почему я не придерживаюсь psr-4 для автозагрузки, поэтому я здесь за советом. У меня есть класс, который генерирует случайные значения, которые уже есть в packagist. Структура проекта следующая (я пометил файлы composer.json A и B).:
режиссер проекта
|classfile.php
A |composer.json
|vendor
|autoload.php
|ejfrancis
|php-random-value
B |composer.json
|RandomValue.php <--the class I want autoloaded
composer.json A
{
"require": {
"ejfrancis/php-random-value": "dev-master"
}
}
composer.json B
{
"name": "ejfrancis/php-random-value",
"description": "Secure random value generator.",
"require": {
"php": ">=5.3.0"
},
"license": "MIT",
"autoload": {
"psr-4": {
"ejfrancis\" : ""
}
}
}
и, наконец, RandomValue.php файл, который объявляет пространство имен ejfrancis
namespace ejfrancis;
class RandomValue{
//foo
}
Когда я запускаю приложение, я получаю сообщение об ошибке «класс randomValue не найден», поэтому он не загружается правильно. Я не соблюдаю psr-4, или есть что-то еще, что я делаю неправильно? Я также пробовал автозагрузку, просто используя composer classmap, "classmap" : ["RandomValue.php"]
но безуспешно.
Спасибо за помощь
Обновление: я запустил «composer validate» в файле composer.json B, он определенно действителен
Комментарии:
1. Как выглядит код, который создает ту ошибку, о которой вы упоминаете? На мой взгляд, вы, скорее всего, пропустили использование правильного пространства имен, все остальное выглядит хорошо.
2. похоже, вы правы! код был ‘$randomValue = new randomValue’, я добавил ‘use ejfrancis randomValue as randomValue’ в верхней части файла класса, в котором он используется, и теперь он работает. если вы добавите это как полный ответ, а не как комментарий, я отмечу его как правильный
Ответ №1:
Измените свой композитор на "Namespace\"
и создайте композитор dump-autoload -o
Комментарии:
1. Я изменил свой атрибут autoload psr-4 в composer.json B на «ejfrancis \»: «» и запустил «composer dump-autoload -o», по-прежнему говорит, что класс не найден
2. Я также запустил ‘composer validate’ для composer.json B, он определенно действителен. вы были правы в отношении завершающего ‘\’
3. Спасибо @ejfrancis за эту команду composer, это помогло мне увидеть, что мой файл composer не был отформатирован должным образом
4. это спасло m день, хотя я опоздал, чтобы найти его