我已经成功安装并设置了Symfony 2,并且一直在关注文档。
我目前正处于http://symfony.com/doc/2.0/book/doctrine.html
一切都很好,直到我到达这一行:
php app/console doctrine:generate:entities Acme/StoreBundle/Entity/Product
此时我收到以下错误:
[RuntimeException]
The autoloader expected class "Acme\StoreBundle\Entity\Product" to be defined
in file "C:\Program Files (x86)\Apache Software Foundation\Apache2.2\htdocs\Symf
ony\app/../src\Acme\StoreBundle\Entity\Product.php". The file was found but the
class was not in it, the class name or namespace probably has a typo.
在Linux和Windows机器上都发生了这种情况。
Product.php的内容与教程一致:
// src/Acme/StoreBundle/Entity/Product.php
namespace Acme\StoreBundle\Entity;
use Doctrine\ORM\Mapping as ORM;
/**
* @ORM\Entity
* @ORM\Table(name="product")
*/
class Product
{
/**
* @ORM\Id
* @ORM\Column(type="integer")
* @ORM\GeneratedValue(strategy="AUTO")
*/
protected $id;
/**
* @ORM\Column(type="string", length=100)
*/
protected $name;
/**
* @ORM\Column(type="decimal", scale=2)
*/
protected $price;
/**
* @ORM\Column(type="text")
*/
protected $description;
}
答案 0 :(得分:25)
该消息来自DebugUniversalClassLoader.php:
public function loadClass($class)
{
if ($file = $this->findFile($class)) {
require $file;
if (!class_exists($class, false) && !interface_exists($class, false)) {
throw new \RuntimeException(sprintf('The autoloader expected class "%s" to be defined in file "%s". The file was found but the class was not in it, the class name or namespace probably has a typo.', $class, $file));
}
}
}
因此,文件必须在那里并且可读,否则findFile
和require
将无效。所有这些检查都是require()
文件,然后使用标准的PHP class_exists()来查看该类是否在那里。
我能想到的唯一一件事可能会导致这些消息给出这些文件内容:你错过了文件开头的<?php
。现在,我知道这有点不对劲,但老实说,我不能想到任何其他不会引起其他错误的事情。
答案 1 :(得分:1)
我遇到了同样的错误“找到了文件但是类不在其中,类名或命名空间可能有错字。”这只是因为
<?php
文件开头缺少!!唉,从教程中复制粘贴...... 再见!