【发布时间】:2016-12-26 06:59:26
【问题描述】:
更新:
我在 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\RolesProvider
3.我的扩展类:
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')时,它总是给我一个错误:
类型错误:参数 1 传递给 UserBundle\Role\RolesProvider::__construct() 必须是类型 数组,没有给定,
我是否错过了一些设置?
更新---------:
我在 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"
}
}
//...
【问题讨论】:
-
你检查
$config['roles']真的数组了吗? -
嗨@MertÖksüz,我已经转储了一些变量,并更新了我的帖子。谢谢
-
我刚刚复制了您的代码,一切正常。我假设您正在开发模式下工作?也许尝试清除缓存。您的配置转储具有三个角色,但 config.yml 只有两个? 'symfony 控制台工具'是否意味着 bin/console generate:bundle?由于您的 var_dumps 正在工作,那么您的各种类名可能是正确的。
标签: php symfony service containers