我尝试将表单验证器中的变量传递给约束,但不能。 我这样做:
$payForm = $this->createForm(new CableTVPayType(), null, array('balance' => $balance));
在CableTVPayType中:
public function getDefaultOptions(array $options)
{
$maxSumm = $options['balance'] - 100;
[...]
它工作正常,我的maxSumm是我想要的,但Symfiony检查$ options数组。 'balance'不是默认选项,并且抱怨这个:
The option "balance" does not exist
是否有另一种更正确的方式将自定义变量传递给验证?
答案 0 :(得分:2)
使用构造函数来填充类型的所有实例。例如,您的类型可能需要实体管理器才能工作。它将在所有表单实例中重用。
例如特定的东西使用选项。如果您使用构造函数作为实例特定的东西,那么所有实例都将获得您传递给第一个实例的构造函数的值。
/**
* @FormType
*/
class PayType extends AbstractType {
private $someService;
/**
* @InjectParams
*/
public function __construct(SomeService $someService)
{
$this->someService = $someService;
}
public function getDefaultOptions(array $options)
{
return array(
'balance' => 0
);
}
public function getName()
{
return 'pay';
}
}
$form = $this->createForm('pay', null, array('balance' => $balance));
请注意,@FormType
注释会将类型注册为服务。它允许您使用类型的名称,而不是手动创建实例。当类型需要将服务注入其中时,它会变得更加方便。在这种情况下,您只使用名称 - pay
- 而不是像这样:
$form = $this->createForm(new PayType($this->get('some_service')), null, array(
'balance' => $balance
));
答案 1 :(得分:0)
完成此事!
类的Crate变量,并通过构造方法
将值传递给它class CableTVPayType extends AbstractType {
private $maxSumm;
public function __construct($maxSumm) {
$this->maxSumm = $maxSumm;
}
使用参数
创建表单$payForm = $this->createForm(new CableTVPayType($someValue));
现在我可以在我的表单中使用此变量。