更新:的symfony 3,參數不能被傳遞給服務(使用setArguments)
我做的的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.generate通過使用「symfony的控制檯工具」束(無重複使用的選擇的)
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')
,它總是給我一個錯誤:
Type error: Argument 1 passed to UserBundle\Role\RolesProvider::__construct() must be of the type array, none given,
有我錯過了一些設置或這樣嗎?
更新---------:
我甩在擴展類的$配置和$ 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"
}
}
//...
你是否檢查'$配置[「角色」]'真的陣列? –
hi @MertÖksüz,我傾倒了一些變量,並更新我的帖子。謝謝 –
我剛剛複製了你的代碼,並且事情按預期工作。我假設你正在開發模式?也許嘗試清除緩存。您的配置轉儲有三個角色,但config.yml只有兩個? 'symfony控制檯工具'是否意味着bin/console生成:bundle?由於你的var_dumps在工作,所以你的各種類名可能是正確的。 – Cerad