Autoloader预期类Symfony2

时间:2013-06-12 05:14:17

标签: php symfony doctrine-orm autoloader

我正在使用symfony 2.3框架,自动加载器声称已找到该文件但没有类:

RuntimeException: The autoloader expected class "Sensio\Bundle\
FrameworkExtraBundle\Request\ParamConverter\DateTimeParamConverter" 
to be defined in file "/home/na/auth/vendor/sensio/framework-extra-bundle/
Sensio/Bundle/FrameworkExtraBundle/Request/ParamConverter/
DateTimeParamConverter.php". The file was found but the class was not in it, 
the class name or namespace probably has a typo.

此参考的文件如下所示:

<?php

/*
 * This file is part of the Symfony framework.
 *
 * (c) Fabien Potencier <fabien@symfony.com>
 *
 * This source file is subject to the MIT license that is bundled
 * with this source code in the file LICENSE.
 */

namespace Sensio\Bundle\FrameworkExtraBundle\Request\ParamConverter;

use Sensio\Bundle\FrameworkExtraBundle\Configuration\ConfigurationInterface;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpKernel\Exception\NotFoundHttpException;
use DateTime;

/**
 * Convert DateTime instances from request attribute variable.
 *
 * @author Benjamin Eberlei <kontakt@beberlei.de>
 */
class DateTimeParamConverter implements ParamConverterInterface
{
    /**
     * @{inheritdoc}
     * 
     * @throws NotFoundHttpException When invalid date given
     */
    public function apply(Request $request, ConfigurationInterface $configuration)
    {
        $param = $configuration->getName();

        if (!$request->attributes->has($param)) {
            return false;
        }

        $options = $configuration->getOptions();
        $value   = $request->attributes->get($param);

        $date = isset($options['format'])
            ? DateTime::createFromFormat($options['format'], $value)
            : new DateTime($value);

        if (!$date) {
            throw new NotFoundHttpException('Invalid date given.');
        }

        $request->attributes->set($param, $date);

        return true;
    }

    /**
     * @{inheritdoc}
     */
    public function supports(ConfigurationInterface $configuration)
    {
        if (null === $configuration->getClass()) {
            return false;
        }

        return "DateTime" === $configuration->getClass();
    }
}

无论如何,一些可能有用的细节是我最近安装了Doctrine并运行命令......

 2028  php app/console doctrine:schema:create
 2029  php app/console doctrine:generate:entities Auth

在这些命令之后,symfony停止工作。我不知道这是不是一些奇怪的错误。如果您需要更多信息,我可以发布。谢谢你的帮助。

11 个答案:

答案 0 :(得分:17)

缺少(或短暂)PHP开启标记也会导致该错误。是的,听起来很有趣,但是如果你只是按照Symfony的例子来复制/粘贴全班,你可能不会注意到(因为我没有)。

答案 1 :(得分:5)

现在有点老了,但是如果其他人通过搜索来到这里: 这无疑是一个缓存问题。手动删除app / cache / dev和app / cache / prod的内容,一切都应解决。

答案 2 :(得分:2)

如果有其他人遇到此问题且无法通过清除缓存而消失,那么我建议您删除整个文件夹,并使用您的编辑器依赖关系并重新执行composer install

它对我有用:)。

答案 3 :(得分:0)

我认为Symfony2中存在一个错误。他们最近更新到symfony的新版本(2.3.1),我认为必须破坏它。无论如何,我不得不在AppKernel.php文件中注释//新的Sensio \ Bundle \ FrameworkExtraBundle \ SensioFrameworkExtraBundle()行来摆脱错误。

答案 4 :(得分:0)

确保您的名称空间是在您尝试使用的类中定义的。例如,在我的控制器中,我有:

use Acme\DemoBundle\Amazon\AmazonProductAPI;

这是我的AmazonProductAPI类的正确路径,但在我向该类添加适当的命名空间之前,系统无法识别它:

namespace Acme\DemoBundle\Amazon;

答案 5 :(得分:0)

@MilanG的回答帮助了我!我从

切换了我的PHP配置
short_open_tag = Off

short_open_tag = On

答案 6 :(得分:0)

我通过删除\之前的额外Doctrine来解决此问题,如下所示:

 <entity repository-class="ACC\Bundle\MGLBundle\\\Doctrine\ORM\PersonRepository" 
         name="ACC\Bundle\MGLBundle\Entity\Person" >`

我使用generate:doctrine:entity实用程序来创建实体以及orm.xml文件。这个实用程序似乎有一个错误,它在xml文件中添加了额外的\,如上所述。删除这个额外的反斜杠\解决了我的问题。因此,在使用命令orm.xml后检查php app/console doctrine:generate:entity文件,以确保路径中没有额外的反斜杠。这个错误可能已经在Symfony的更高版本中解决了,但是如果你遇到这个错误,这可能是原因。

答案 7 :(得分:0)

在我的情况下,这是类名中的拼写错误。当类名被命名为AssetsCommand.php

时,AsssetsCommand出现错误

确保类文件的基本名称与类名相同。

答案 8 :(得分:0)

感觉就像我读过的每一个答案都会解决但却没有。在我的情况下,它最终是OpCache。忘了我在开发过程中打开了它。解决方案是每次更改代码库或完全禁用OpCache时重新启动PHP-FPM或Httpd(使用mod_php时)。

答案 9 :(得分:0)

当我声明错误的命名空间时,它发生在我身上 示例:命名空间AppBundle \ 控制器;

但该课程就在这条道路上:AppBundle \ RestController

答案 10 :(得分:0)

如果出现此错误,您还应检查拼写错误的文件名。然而,在我的情况下,它说“找到了文件,但课程不在其中, 类名或命名空间可能有拼写错误“,实际上文件名不正确(”From“而不是”Form“)