Symfony Fileloader 找不到现有的 class
Symfony Fileloader fails to find existing class
也许我只是把命名空间弄乱了,但我没看到。
我试图将我的 Symfony 应用程序中的一些 classess 分成一个包。
我在 Symfony 中得到的错误是:
Expected to find class "Shop\Admin\CategoryAdmin" in file
"C:\wamp64\www\gall\bundles\Shop\src/Admin\CategoryAdmin.php" while
importing services from resource "../bundles/Shop/src/*", but it was
not found! Check the namespace prefix used with the resource in
C:\wamp64\www\gall\config/services.yaml (which is loaded in resource
"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 找不到这个 class,有什么想法吗?
这是一个自动加载问题。
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
。
也许我只是把命名空间弄乱了,但我没看到。
我试图将我的 Symfony 应用程序中的一些 classess 分成一个包。
我在 Symfony 中得到的错误是:
Expected to find class "Shop\Admin\CategoryAdmin" in file "C:\wamp64\www\gall\bundles\Shop\src/Admin\CategoryAdmin.php" while importing services from resource "../bundles/Shop/src/*", but it was not found! Check the namespace prefix used with the resource in C:\wamp64\www\gall\config/services.yaml (which is loaded in resource "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 找不到这个 class,有什么想法吗?
这是一个自动加载问题。
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
。