Symfony Fileloader无法找到现有的类

时间:2018-07-25 19:02:07

标签: php symfony symfony4 fileloadexception

也许我只是弄乱了命名空间,但我看不到它。

我试图将Symfony应用程序中的某些类分成一个包。
我在Symfony中遇到的错误是:

  

预期在文件中找到类“ Shop \ Admin \ CategoryAdmin”   “ C:\ wamp64 \ www \ gall \ bundles \ Shop \ src / Admin \ CategoryAdmin.php”   从资源“ ../bundles/Shop/src/*”导入服务,但是   未找到!检查与资源一起使用的名称空间前缀   C:\ wamp64 \ www \ gall \ config / services.yaml(已加载到资源中   “ C:\ wamp64 \ www \ gall \ config / services.yaml”)。


这是我的services.yaml:

Shop\:
    resource: '../bundles/Shop/src/*'
    exclude: '../bundles/Shop/src/{Entity,Migrations,Tests}'

Shop\Controller\:
    resource: '../bundles/Shop/src/Controller'
    tags: ['controller.service_arguments']

文件结构如下:

project (C:\wamp64\www\gall)
    \- bundles
        \- Shop
            \- src
                \- Admin
                    \- CategoryAdmin.php
    \- config
        \- services.yaml

CategoryAdmin.php文件本身如下所示:

namespace Shop\Admin;

use Shop\Entity\Category;
use Sonata\AdminBundle\Admin\AbstractAdmin;
use Sonata\AdminBundle\Datagrid\ListMapper;
use Sonata\AdminBundle\Datagrid\DatagridMapper;
use Sonata\AdminBundle\Form\FormMapper;
use Symfony\Bridge\Doctrine\Form\Type\EntityType;
use Symfony\Component\Form\Extension\Core\Type\TextType;
use Symfony\Component\Form\Extension\Core\Type\CheckboxType;
use Symfony\Component\DependencyInjection\ContainerInterface;
use Sonata\TranslationBundle\Filter\TranslationFieldFilter;


/**
 * Class CategoryAdmin
 * @package Shop\Admin
 */
class CategoryAdmin extends AbstractAdmin
{
    {...}
}

Soo,路线看起来完全像错误中所述。我不明白为什么FileLoader找不到此类,有什么想法吗?

1 个答案:

答案 0 :(得分:1)

这是一个自动加载问题。

composer.json部分:

"autoload": {
    "psr-4": {
        "App\\": "src/",
    }
},

App名称空间绑定到src文件夹。

将Shop名称空间注册为bundles / Shop,并删除bundles / Shop下的src目录

编辑:我通常对尚不准备发布的捆绑软件执行此操作,但将来会发布。 来自我的一个项目的示例:

"autoload": {
    "psr-4": {
        "App\\": "src/",
        "Padam87\\AdminBundle\\": "bundles/Padam87/AdminBundle/"
    }
},

编辑2:不要忘记在更改后运行composer dump-autoload