Symfony2表单选择 - 对象数组(不是映射实体)

Bob*_*ing 1 forms symfony twig

我有一个对象数组:

[0] ProductObject
         Title
         Image
         Link

[1] ProductObject
         Title
         Image
         Link
Run Code Online (Sandbox Code Playgroud)

等等

我可以将这些对象精确地传递给我的形式:

public function buildForm(FormBuilder $builder, array $options)
    {
        $builder->add(
                'products',
                'choice',
                array(
                        'choices'   => $productsArray,
                        'multiple'  => false,
                        'required' => false
                )
        );

    }
Run Code Online (Sandbox Code Playgroud)

然后在模板中:

            {{ form_label(form.products, 'products') }}
            {{ form_errors(form.products) }}
            {{ form_widget(form.products) }}

            {{ form_rest(form) }}
Run Code Online (Sandbox Code Playgroud)

现在,正如预期的那样,表单呈现出来:

<optgroup label="0">
    <option value="id">174</option>
    <option value="title">A Bag Of Frogs</option>
    <option value="image">Image</option>
    <option value="link">http://www.myshoppe.com</option>
</optgroup>
Run Code Online (Sandbox Code Playgroud)

我只希望在下拉列表中有标题,但我希望保持图像和链接可用,因为我想使用javascript在用户选择产品后立即用图像标题和链接填充另一个div.

所以,问题是"如何在Twig中隐藏对象属性?"

要么

这是荒唐的吗?

:)

gre*_*ire 5

我想你正在寻找ObjectChoiceList.

你可以像这样使用它:

$choiceList = new ObjectChoiceList($products, 'title', array(), null, 'id');

public function buildForm(FormBuilder $builder, array $options)
{
    $builder->add(
            'products',
            'choice',
            array(
                    'choice_list'   => $choiceList,
                    'multiple'  => false,
                    'required' => false
            )
    );

}
Run Code Online (Sandbox Code Playgroud)