我想将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/",
}
},