Symfony 3.3 from 3.2:编译错误:无法声明类Symfony \ Bundle \ SecurityBundle \ Security \ FirewallMap

时间:2017-06-09 10:16:54

标签: php symfony

自从我从symfony 3.2更新到3.3后,我遇到了一些问题,我收到了这个错误

Compile Error: Cannot declare class Symfony\Bundle\SecurityBundle\Security\FirewallMap, because the name is already in use
in classes.php (line 1709)
in ClassCollectionLoader.php (line 99)
at ClassCollectionLoader::load()in Kernel.php (line 428)
at Kernel->doLoadClassCache()in Kernel.php (line 112)
at Kernel->boot()in Kernel.php (line 168)
at Kernel->handle()in app_dev.php (line 12)
at {main}()in app_dev.php (line 0)

这很有意思,因为我只是通过浏览器访问app_dev.php时遇到此错误,如果我直接exeucte

php app_dev.php

然后错误没有出现,我只是重定向到登录页面,因为我被禁止

<!DOCTYPE html>
<html>
    <head>
        <meta charset="UTF-8" />
        <meta http-equiv="refresh" content="1;url=http://:/login" />

        <title>Redirecting to http://:/login</title>
    </head>
    <body>
        Redirecting to <a href="http://:/login">http://:/login</a>.
    </body>
</html>

命令工作正常,我可以清除缓存,淘汰路由......

有什么想法吗?

谢谢!

更新:这是app_dev.php的内容

<?php
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\Debug\Debug;

/** @var \Composer\Autoload\ClassLoader $loader */
$loader = require __DIR__.'/../app/autoload.php';
Debug::enable();

$kernel = new AppKernel('dev', true);
$kernel->loadClassCache();
$request = Request::createFromGlobals();
$response = $kernel->handle($request);
$response->send();
$kernel->terminate($request, $response);

6 个答案:

答案 0 :(得分:1)

我解决了这个删除vendor / symfony文件夹并运行composer update

的问题

答案 1 :(得分:1)

与Celso的答案类似,只有删除了整个供应商文件夹, AND var / cache中的所有内容

答案 2 :(得分:0)

当我在不同命名的文件中确实拥有相同名称的类时,这通常会发生在我身上。

如何重现它:

  1. 你有一个文件MyClass.php,类MyClass
  2. 由于某种原因你制作了该文件的副本:MyClass_2.php
  3. 您尝试清除缓存
  4. 可怕的“无法声明类AppBundle \ Entity \ MyClass,因为该名称已被使用”再次出现 - 这实际上是正确的,因为它确实再次看到了相同的类名。

    在这种情况下 - 只需确保您不在Web根目录下进行任何愚蠢的文件备份。 :)

    BTW,还有另一种情况,当我遇到这个问题时 - 有两个文件具有相同的类名,在不同的文件夹中,但如果我记得很清楚 - 这实际上是一个Symfony错误,并在一些处理点。

答案 3 :(得分:0)

我有一个非常可能的情况,但也许会帮助某人。在Twig模板中,我使用了一个常量,并在某个时候对对象名称空间中的斜杠进行了两次转义:

{{ constant('App\\Entity\\\\MyClass::MY_CONSTANT') }}

应为:

{{ constant('App\\Entity\\MyClass::MY_CONSTANT') }}

多余的斜杠导致出现此错误消息。

答案 4 :(得分:0)

类似于@Jody的回答,对我来说问题是额外的转义。

我已经更新了services.yml文件,以使用单引号而不是双引号。

我的原始版本如下:

my_controller:
    class: App\Controller\MyController
    arguments:
        class: "App\\Entity\\MyClass"

新版本(引发错误)如下所示:

my_controller:
    class: App\Controller\MyController
    arguments:
        - 'App\\Entity\\MyClass'

删除斜杠(像这样)是解决问题的方法:

my_controller:
    class: App\Controller\MyController
    arguments:
        - 'App\Entity\MyClass'

答案 5 :(得分:0)

将项目从 symfony 3.4 迁移到 4.4 后,我遇到了类似的错误。该错误仅在删除缓存时发生。 这是由于两个不同文件中的同一个类的要求require_once 替换 require 为我解决了这个问题