没有顶级命名空间的Symfony 4

时间:2018-04-26 12:33:06

标签: symfony namespaces symfony4

我想将Silex项目迁移到Symfony 4.我先处理骨架,然后执行:

composer create-project symfony/skeleton myProject

然后要求每个包含composer require bundle的捆绑包。

其中一个需要安装一些配置,所以我添加了一个具有这种配置的文件config/packages/custom_bundle.yaml

custom_bundle.yaml需要一个自定义用户提供程序服务,我将其从Silex项目复制到具有相同名称(Security)的同一名称空间(UserProvider.php),因此我在{{}创建了一个服务{1}}:

config/services.yaml

然后我尝试再次要求捆绑包,我收到此错误:

  

自动加载器预期类" App \ Security \ UserProvider"在文件中定义" / vagrant / myProject / vendor / composer /../../ src / Security / UserProvider.php"。
   找到该文件但该类不在其中,类名或命名空间可能在/vagrant/myProject/config/services.yaml中有一个拼写错误(在资源中加载" / vagrant / myProject / config / services .yaml"。)

当然,我必须告诉作曲家从非顶级命名空间加载类,所以我换了:

security.users_provider:
    class: Security\UserProvider
<{1>}中的

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

但现在我收到此错误,因为composer.json命名空间为"autoload": { "psr-4": { "": "src/" } },

  

PHP致命错误:未捕获的Symfony \ Component \ Debug \ Exception \ ClassNotFoundException:尝试加载类&#34;内核&#34;来自命名空间&#34; App&#34;。

我有没有顶级命名空间的整个Silex项目,因此添加Kernel.php或其他任何顶级命名空间意味着重命名整个项目类。

另一方面,删除App App命名空间意味着将此类用作全局,这可能不是一个好主意。

避免重写所有类名称空间的任何解决方法?

PS:我也尝试过:

App

但同样的事情发生了。

修改

问题是服务的默认定义:

Kernel.php

由于我没有"autoload": { "psr-4": { "App\\": "src/", "": "src/", } }, 命名空间,我现在必须对其进行评论。稍后,我必须添加任何要使用其命名空间自动定义的服务。 E.g。

App\:
    resource: '../src/*'
    exclude: '../src/{Entity,Migrations,Tests,Kernel.php}'

因此,它可以评论默认的App服务定义并添加:

App

以及Service\: resource: '../src/Service/*' 的任何其他名称空间。感谢@Cerad的提示。

EDIT2:

甚至可以使用:

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

0 个答案:

没有答案