Symfony数据库教程代码错误

时间:2011-09-20 08:39:18

标签: symfony

我已经成功安装并设置了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;
}

2 个答案:

答案 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));
        }
    }
}

因此,文件必须在那里并且可读,否则findFilerequire将无效。所有这些检查都是require()文件,然后使用标准的PHP class_exists()来查看该类是否在那里。

我能想到的唯一一件事可能会导致这些消息给出这些文件内容:你错过了文件开头的<?php。现在,我知道这有点不对劲,但老实说,我不能想到任何其他不会引起其他错误的事情。

答案 1 :(得分:1)

我遇到了同样的错误“找到了文件但是类不在其中,类名或命名空间可能有错字。”这只是因为

<?php
文件开头缺少

!!唉,从教程中复制粘贴...... 再见!