0

也许我只是用命名空间搞砸了一些东西,但我没有看到它。

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

从资源 "../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
{
    {...}
}

所以,路线看起来与错误中所述的完全一样。我不明白为什么 FileLoader 找不到这个类,有什么想法吗?

4

1 回答 1

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在更改后运行。

于 2018-07-25T19:16:41.677 回答