我正在使用Symfony2并希望通过运行为实体生成getter和setter:
$ php app/console doctrine:generate:entities TestBundle
控制台返回以下消息:
[RuntimeException]找不到“TestBundle”的基本路径(路径:“C:\ xampp \ htdocs \ ProjectX \ src \ Namespace \ TestBundle”,目的地:“C:/ xampp / htdocs / ProjectX / src /命名空间/ TestBundle“)。
Bundle存在于此位置:C:\xampp\htdocs\ProjectX\src\Namespace\TestBundle
怎么了?
答案 0 :(得分:5)
添加其他内容以防其他人达到此目的。我有一个问题导致相同的错误,但这是由于我的实体生活在使用PSR-4的代码库中。在进行代码生成时,Doctrine不支持PSR-4。它与将类名称空间映射到文件系统路径以及PSR-4如何允许不直接映射到文件系统的类/命名空间路径有关。
答案 1 :(得分:2)
我遇到了这个问题,这是由我的bundle目录中的小写/大写的一些问题引起的。它不是windows下的问题,但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无法根据命名空间重新创建类路径:这意味着您的命名空间或文件夹错误(检查大小写)
答案 2 :(得分:0)
您的Bundle php文件的名称错误 在路径中从 TestBundle.php 更改为 NamespaceTestBundle.php : C:/ xampp / htdocs / ProjectX / src / Namespace / TestBundle /
答案 3 :(得分:0)
John Pancoast's answer是正确的。
添加其他内容以防其他人达到此目的。我有一个问题导致相同的错误,但这是由于我的实体生活在使用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