在奏鸣曲管理类中添加表单选项

时间:2014-10-22 05:59:40

标签: sonata-admin symfony-sonata

如何在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); 

有人可以给我建议我如何添加自己的选项?

1 个答案:

答案 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。