更新:
我在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'));但是在我生成的包中没有传入任何参数。
我用symfony(3.1.6版)构建了一个应用程序,被塞了下来。任何帮助都是非常感谢的。
详情如下:
1.使用“symfony控制台工具”生成包(没有可重用的选择)
2.创建一个服务类,如下所示。
class RolesProvider(){
public function __construct(array $roles){
//...
}
}services.yml:
services:
user.roles.provider:
class: UserBundle\Role\RolesProvider3.我的补习班:
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.我的配置类
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必须是类型数组,没有给出,
我错过了一些设定吗?
更新
我将$config和$rolesProviderDef变量转储到扩展类中,并得到以下内容
$config
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"
}
}
//...发布于 2016-12-26 07:58:19
Definition::setArguments()接受所有参数的数组。传递一个$config['roles']会产生这样的想法:
// somewhere in the compiled container:
new RolesProvider("ROLE_SUPER", "ROLE_ADMIN", "ROLE_USER");我不确定这是个问题,因为它会导致其他类型的错误。但是它是否会导致错误的代码生成(?)试试这个:
// note the additional brackets
$rolesProviderDef->setArguments([$config['roles']]);
// or
// set only first one argument
$rolesProviderDef->replaceArgument(0, $config['roles']); https://stackoverflow.com/questions/41327569
复制相似问题