7

我正在使用 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 停止工作。我不知道这是什么奇怪的错误或什么。如果您需要更多信息,我可以发布。谢谢你的帮助。

4

11 回答 11

17

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

于 2014-11-10T13:07:27.260 回答
5

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

于 2013-08-28T10:41:54.417 回答
2

如果其他人有这个问题并且清除缓存并没有消失,那么我建议使用您的作曲家依赖项删除整个文件夹并重新执行composer install.

它对我有用:)。

于 2015-09-29T13:24:06.580 回答
0

我认为 Symfony2 中存在错误。他们最近更新到 symfony 的新版本(2.3.1),我认为它一定会破坏一些东西。无论如何,我不得不在 AppKernel.php 文件中注释掉 //new Sensio\Bundle\FrameworkExtraBundle\SensioFrameworkExtraBundle() 行以消除错误。

于 2013-06-12T05:34:06.690 回答
0

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

use Acme\DemoBundle\Amazon\AmazonProductAPI;

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

namespace Acme\DemoBundle\Amazon;
于 2015-05-23T22:42:32.567 回答
0

就我而言,这是类名称中的拼写错误。AssetsCommand.php当类名被命名为时出现错误AsssetsCommand

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

于 2017-01-18T19:34:31.597 回答
0

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

于 2017-04-21T15:28:51.617 回答
0

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

于 2017-11-02T11:40:24.560 回答
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 中得到解决,但以防万一你得到这个错误,这可能是原因。

于 2016-03-21T17:12:43.953 回答
0

@MilanG 的回答帮助了我!我将我的 PHP 配置从

short_open_tag = Off

short_open_tag = On
于 2016-02-17T09:43:49.470 回答
0

当我声明错误的命名空间时,它会发生在我身上。
示例:命名空间 AppBundle\ Controller

但该类位于此路径:AppBundle\ RestController

于 2017-10-06T13:08:25.710 回答