我正在覆盖注册表并且工作正常:
services.yml
general_user.registration.form.type:
class: General\GeneralBundle\Form\Type\RegistrationFormType
arguments: [%fos_user.model.user.class%]
tags:
- { name: form.type, alias: general_user_registration }
我在config.yml中有一个变量我想从RegistrationFormType访问:
# interested in options
profile.lookingfor:
- part 1
- part 2
我读到这可以使用服务完成,所以我定义了另一个:
general_user.registration.form.type.lookingfor:
class: General\GeneralBundle\Form\Type\RegistrationFormType
arguments: [%profile.lookingfor%]
tags:
- { name: form.type, alias: general_user_registration }
我希望能够使用以下内容从RegistrationFormType访问参数:
$lookingFor = $this->get('general_user.registration.form.type');
我不知道如何将两种服务混合在一起。现在我收到错误:
Attempted to call an undefined method named "get" of class "General\GeneralBundle\Form\Type\RegistrationFormType".
Did you mean to call e.g. "getBlockPrefix", "getName" or "getParent"?
当我注释掉来电时,我得到另一个错误:
Cannot read index "email" from object of type "...\CoreBundle\Entity\User" because it doesn't implement \ArrayAccess
答案 0 :(得分:0)
将变量作为参数传递给服务的方式仅适用于参数(parameters:
或config.yml
中parameters.yml
下定义的变量)。在这种情况下,您不需要第二项服务。
要在您的服务中访问它,您只需在服务中定义构造函数参数,并将参数get自动注入为数组。
protected $lookingFor;
public function __constructor($lookingFor) {
$this->lookingFor = $lookingFor;
}
如果你想为你的捆绑使用配置块,它会变得有点复杂。请参阅:http://symfony.com/doc/master/cookbook/bundles/configuration.html
答案 1 :(得分:0)
最后我使用了Setter Injection。来自http://symfony.com/doc/current/book/service_container.html#optional-dependencies-setter-injection:
如果你有一个类的可选依赖项,那么" setter injection"可能是一个更好的选择。这意味着使用方法调用而不是通过构造函数来注入依赖项。我在RegistrationFormType
中添加了一个setter方法protected $lookingFor;
public function setLookingfor($lookingFor) {
$this->lookingFor = $lookingFor;
}
通过setter方法注入依赖项只需要添加'调用'部分:
general_user.registration.form.type:
class: General\GeneralBundle\Form\Type\RegistrationFormType
arguments: [%fos_user.model.user.class%]
tags:
- { name: form.type, alias: general_user_registration }
calls:
- [setLookingfor, ['%profile.lookingfor%']]