更新:
我在AppBundle(自动生成的)中做了同样的事情,一切正常,在编译版本中(在 var/cache/dev/appDevDebugProjectContainer.php
中)参数传递如下
return $this->services['app.roles'] = new \AppBundle\Role\RolesProvider(array(0 => 'ROLE_SUPER', 1 => 'ROLE_ADMIN', 2 => 'ROLE_USER'));
但在我生成的bundle中没有传入任何参数 .
m使用symfony(版本3.1.6)构建应用程序,被卡住..任何帮助表示赞赏 .
详情如下:
1.使用'symfony console tool'生成一个包(没有选择可重用)
2.创建如下的服务类 .
class RolesProvider(){
public function __construct(array $roles){
//...
}
}
services.yml:
services:
user.roles.provider:
class: UserBundle\Role\RolesProvider
3.my扩展类:
class UserExtension extends Extension {
public function load(array $configs, ContainerBuilder $container) {
$configuration = new Configuration();
$config = $this->processConfiguration($configuration, $configs);
$loader = new YamlFileLoader($container, new FileLocator(__DIR__ . '/../Resources/config'));
$loader->load('services.yml');
$rolesProviderDef = $container->getDefinition('user.roles.provider');
$rolesProviderDef->setArguments([
$config['roles']
]);
}
}
4.my配置类
class Configuration implements ConfigurationInterface{
public function getConfigTreeBuilder() {
$treeBuilder = new TreeBuilder;
$rootNode = $treeBuilder->root('user');
$rootNode->children()
->arrayNode('roles')
->prototype('scalar')->end()
->end();
return $treeBuilder;
}
}
5.config.yml:
user:
roles: ["ROLE_SUPER", "ROLE_ADMIN", "ROLE_USER"]
当我打电话给 $this->get('user.roles.provider')
时,它总是给我一个错误:
类型错误:传递给UserBundle \ Role \ RolesProvider :: __ construct()的参数1必须是数组类型,没有给出,
我错过了一些设置吗?
更新 - - - - -:
我在Extension类中转储了$ config和$ rolesProviderDef变量并得到了这个
$配置
array(1) {
["roles"]=>
array(3) {
[0]=>
string(10) "ROLE_SUPER"
[1]=>
string(10) "ROLE_ADMIN"
[2]=>
string(9) "ROLE_USER"
}
}
$ rolesProviderDef的一些代码:
//...
["arguments":protected]=>
array(1) {
[0]=>
array(3) {
[0]=>
string(10) "ROLE_SUPER"
[1]=>
string(10) "ROLE_ADMIN"
[2]=>
string(9) "ROLE_USER"
}
}
//...
1 回答
Definition::setArguments()
接受所有参数的数组 . 通过$config['roles']
产生这样的想法我:我不确定这是否有问题,因为它应该导致其他类型错误 . 但可能会导致错误的代码生成(?)试试这个: