Symfony2错误:加载和声明的类名之间的大小写不匹配:

时间:2014-06-17 15:58:48

标签: symfony

我正在研究Symfony2,并用composer.phar update

更新了我的项目

现在,当我用app_dev.php检查我的网站时,我总是有这个错误:

Case mismatch between loaded and declared class names: Blu\ProjectBun
  dle\Entity\AccountRepository vs Blu\ProjectBundle\Entity\AccountRepos
  itory

当我清除dev缓存时,手动与否也是一样的。我在AccountRepository.php中没什么特别的。

有什么想法吗?

修改:我已尝试在if ($name !== $class && 0 === strcasecmp($name, $class)) {中添加DebugClassLoader.php而无效

6 个答案:

答案 0 :(得分:6)

意图使用var_dump($ name)和var_dump($ class)以及strcasecmp($ name,$ class)来查看你输入条件的原因。

答案 1 :(得分:2)

虽然答案是类名称空间中的拼写错误,但如果您的实体是通过xml定义的,即User.orm.xml,并且您不小心将文件命名为小写,则会发生此错误,这将驱动xml加载程序

  1. 创建FooNamespace \ BarBundle \ Resources \ config \ User.orm.xml

  2. 创建FooNamespace \ BarBundle \ Entity \ User.php(类User {...})

答案 2 :(得分:1)

这是Symfony2中的已知错误:

https://github.com/symfony/symfony/commit/8e9cc35

它已合并到2.5但尚未标记(source

要检查您是否确实如此,您可能需要尝试手动修改src/Symfony/Component/Debug/DebugClassLoader.php文件:

// Line 178
if ($name !== $class && 0 === strcasecmp($name, $class)) {

...并检查清除缓存后是否仍有问题

答案 3 :(得分:1)

请在第177行的DebugClassLoader.php文件中添加此if条件

    if ($name === $class) {
        if ($name !== $class && 0 === strcasecmp($name, $class)) {
            throw new \RuntimeException(sprintf('Case mismatch between loaded and declared class names: %s vs %s', $class, $name));
        } 
    }

它将解决您的问题

地点:root\Projectname\Symfony\vendor\symfony\symfony\src\Symfony\Component\Debug

感谢

答案 4 :(得分:1)

我遇到了这个问题,在尝试了我找到的所有解决方案后,没有人为我工作。我正在使用Symfony 2.8,Doctrine ORM和Sonata Admin Bundle,当我添加一个管理类(对于与异常消息中显示的类相关的类)时出现此异常,我试图打开它。

我的错误是我在相关类中的Doctrine注释中以小写形式写了数据库表的名称,检查是否以大写形式显示:

ORM\ManyToOne(targetEntity="Product")

答案 5 :(得分:1)

您的控制器名称第一个单词在routing.yml

中是小写的
usr_teacher_new:
path:     /new
defaults: { _controller: CoreUserBundle:teacher:newteacher }
像老师一样..

T eacher