Усовершенствованный:
Я сделал то же самое в AppBundle(автоматический сгенерированный), все работает хорошо, и в скомпилированной версии (в var/cache/dev/appDevDebugProjectContainer.php
)параметры были переданы следующим образом
return $this->services['app.roles'] = new AppBundleRoleRolesProvider(array(0 => 'ROLE_SUPER', 1 => 'ROLE_ADMIN', 2 => 'ROLE_USER'));
но в моем сгенерированном пакете ни один параметр не был передан.
m создание приложения с помощью symfony (версия 3.1.6), застрял.. любая помощь была оценена.
Детали как следовать:
1.создание пакета с помощью «Symfony console tool» (не выбрано повторно)
2.создайте класс обслуживания, как показано ниже.
class RolesProvider(){
public function __construct(array $roles){
//...
}
}
сервисы.yml:
services:
user.roles.provider:
class: UserBundleRoleRolesProvider
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.мой класс конфигурации
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.конфиг.yml:
user:
roles: ["ROLE_SUPER", "ROLE_ADMIN", "ROLE_USER"]
Когда я звонил$this->get('user.roles.provider')
, он всегда дает мне ошибку:
Ошибка типа: Аргумент 1 передается
UserBundleRoleRolesProvider::_ _ construct() должен иметь тип
массив, не задан,
пропустил ли я какие-то настройки?
Усовершенствованный———:
я сбросил переменную $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"
}
}
//...
Definition::setArguments()
принимает массив всех аргументов. Передача a$config['roles']
генерирует что-то вроде этого i:Я не уверен, что это проблема, потому что это должно вызвать другую ошибку типа. Но может ли это привести к неправильной генерации кода (?)
Попробовать это: