Я использую Symfony2 и хочу генерировать геттеры и сеттеры для объектов, запустив:
$ php app/console doctrine:generate:entities TestBundle
Консоль возвращает мне следующее сообщение:
[RuntimeException] Не удается найти базовый путь для «TestBundle» (путь: «C: \ xampp \ htdocs \ ProjectX \ src \ Namespace \ TestBundle», назначение: «C: / xampp / htdocs / ProjectX / src / Namespace / TestBundle «).
Пакет существует в этом месте: C:\xampp\htdocs\ProjectX\src\Namespace\TestBundle
Что не так?
Просто добавьте что-то еще, если другие достигнут этого. У меня возникла ошибка, вызвавшая ту же ошибку, но это было связано с тем, что мои сущности, живущие в кодовой базе, использовали PSR-4. Doctrine не поддерживает PSR-4, когда что-то делает с генерацией кода. Это связано с тем, как они сопоставляют пространства имен классов с путями файловой системы и как PSR-4 позволяет пути класса / пространства имен, которые непосредственно не сопоставляются с файловой системой.
У меня была эта проблема, вызванная некоторой проблемой с нижним регистром / верхним регистром в моем каталоге пакетов. Это не проблема под окнами, но функция php str_replace чувствительна к регистру, генерирует ошибку
//Doctrine\Bundle\DoctrineBundle\Mapping\MetadataFactory private function getBasePathForClass($name, $namespace, $path) { $namespace = str_replace('\\', '/', $namespace); $search = str_replace('\\', '/', $path); $destination = str_replace('/' . $namespace, '', $search, $c); if ($c != 1) { throw new \RuntimeException(sprintf('Can\'t find base path for "%s" (path: "%s", destination: "%s").', $name, $path, $destination)); } return $destination; }
Doctrine не может воссоздать путь класса на основе пространства имен: значит, ваше пространство имен или ваша папка неправильны (check case)
Имя вашего php-файла Bundle является неправильным изменением с TestBundle.php на NamespaceTestBundle.php в пути: C: / xampp / htdocs / ProjectX / src / Namespace / TestBundle /
Ответ Джона Панкоаста верен.
Просто добавьте что-то еще, если другие достигнут этого. У меня возникла ошибка, вызвавшая ту же ошибку, но это было связано с тем, что мои сущности, живущие в кодовой базе, использовали PSR-4. Doctrine не поддерживает PSR-4, когда что-то делает с генерацией кода. Это связано с тем, как они сопоставляют пространства имен классов с путями файловой системы и как PSR-4 позволяет пути класса / пространства имен, которые непосредственно не сопоставляются с файловой системой.
Чтобы точно определить, что необходимо для устранения сообщения об ошибке; отредактируйте файл composer.json
вашего пакета, а также измените структуру папок пакета.
в composer.json
измените psr-4
на psr-0
:
"autoload": { "psr-4": { "Acme\\Bundle\\AwesomeBundle\\": "" } },
чтобы:
"autoload": { "psr-0": { "Acme\\Bundle\\AwesomeBundle\\": "" } },
Измените структуру папок пакета:
vendor +--acme +--awsome-bundle |--Controller |--Entity
чтобы:
vendor +--acme +--awsome-bundle +--Acme +--Bundle +--AwsomeBundle |--Controller |--Entity
Следующая команда больше не будет генерировать исключение:
bin/console doctrine:generate:entities AwesomeBundle