如何在sonata管理类中向formmMapper添加自定义选项?
我在admin类中有与实体相关的表单。出于某种原因,我想将自己的选项添加到其中一个字段
$formMapper
->with('tab.dimension')
->add('dimension', 'collection', array(
'type' => 'dimension_product',
'allow_add' => true,
'allow_delete' => true,
'required' => false,
'my_custom_options' => false,
))
->end();
不幸的是,这种方式是不可能的,因为这个选项在解析器中没有定义。 但我无法以正常的方式访问解析器"。 Sonata用两种方法定义了表单构建器:
public function getFormBuilder()
{
$this->formOptions['data_class'] = $this->getClass();
$formBuilder = $this->getFormContractor()->getFormBuilder(
$this->getUniqid(),
$this->formOptions
);
$this->defineFormBuilder($formBuilder);
return $formBuilder;
}
public function defineFormBuilder(FormBuilder $formBuilder)
{
$mapper = new FormMapper($this->getFormContractor(), $formBuilder, $this);
$this->configureFormFields($mapper);
foreach ($this->getExtensions() as $extension) {
$extension->configureFormFields($mapper);
}
$this->attachInlineValidator();
}
此对象中定义了允许的选项:
new FormMapper($this->getFormContractor(), $formBuilder, $this);
有人可以给我建议我如何添加自己的选项?
答案 0 :(得分:1)
派对有点晚了,但这取决于你想用这个选项做什么。
如果您需要添加一个真正的自定义表单选项,它与直接使用Symfony表单没有太大区别。您可以使用form extension 为给定的表单类型添加额外的选项和功能。您甚至可以通过这种方式为奏鸣曲表单类型添加功能。
如果您只需要将一个选项从一个管理员传递给子管理员(我认为您可能想要这样做),您可以使用字段描述选项而不是实际的表单选项:
@user = User.new(userFirstName: params[:userFirstName], userLastName: params[:userLastName], userEmail: params[:userEmail], password: encrypted_password, userImage: params[:userImage])
if @user.save #if save succeeds, redirect to the index action
redirect_to(:action => 'show', id: User.last.id)
else
#if not succeeds, redirect to the index action
redirect_to(:action => 'new')
end end
现在,在您的孩子管理员中,您可以使用
检索这些选项$formMapper
->with('tab.dimension')
->add('dimension', 'collection', array(
'type' => 'dimension_product',
'allow_add' => true,
'allow_delete' => true,
'required' => false,
), array(
'my_custom_options' => false,
))
->end();
用于配置您的孩子Admin。