【问题标题】:Symfony3 customize label of EntityType choicesSymfony3 自定义 EntityType 选项的标签
【发布时间】:2016-05-03 15:12:43
【问题描述】:

我搜索了一个解决方案来自定义 EntityType 的选择标签。

实体

发布

class Post
{
    // ...

    /**
     * @ORM\ManyToMany(targetEntity="AppBundle\Entity\Item", cascade={"persist"})
     */
    private $items;

    // ...
}

项目

class Item
{
    // ...

    /**
     * @var string
     *
     * @ORM\Column(name="title", type="string", length=127)
     */
    private $title;

    /**
     * @var string
     *
     * @ORM\Column(name="image", type="string", length=255, nullable=true)
     */
    private $image;

    // ...

    public function __toString(){
        return $this->title;
    }
}

表格

class PostType extends AbstractType
{
    /**
     * @param FormBuilderInterface $builder
     * @param array $options
     */
    public function buildForm(FormBuilderInterface $builder, array $options)
    {
        $builder
            ->add('items', EntityType::class, array(
                'class' => 'AppBundle\Entity\Item',
                'multiple' => true,
                'expanded' => true,
            ))
        ;
    }

    /**
     * @param OptionsResolver $resolver
     */
    public function configureOptions(OptionsResolver $resolver)
    {
        $resolver->setDefaults(array(
            'data_class' => 'AppBundle\Entity\Post'
        ));
    }
}

结果

我知道如何修改 DOM 来获取:

<ul>
    <li>
        <input type="checkbox" id="post_items_1" name="post[items][]" value="1">
        <label for="post_items_1">Item 1</label>
    </li>
    <li>
        <input type="checkbox" id="post_items_2" name="post[items][]" value="2">
        <label for="post_items_2">Item 2</label>
    </li>

    <!-- ... -->
</ul>

但我想从项目选择中获取其他信息(如属性图像):

<ul>
    <li>
        <input type="checkbox" id="post_items_1" name="post[items][]" value="1">
        <label for="post_items_1">
            Item 1
            <img src="/uploads/item/lorem.jpg" alt="" /> <!-- path store into item #1 -->
        </label>
    </li>
    <li>
        <input type="checkbox" id="post_items_2" name="post[items][]" value="2">
        <label for="post_items_2">
            Item 2
            <img src="/uploads/item/ipsum.jpg" alt="" /> <!-- path store into item #2 -->
        </label>
    </li>

    <!-- ... -->
</ul>

有人有解决办法吗?

【问题讨论】:

    标签: symfony symfony-forms


    【解决方案1】:

    设置choice_label 就是您要查找的内容:

    $builder->add('users', EntityType::class, array(
        'class' => 'AppBundle:User',
        'choice_label' => 'username',
    ));
    

    来源:http://symfony.com/doc/current/reference/forms/types/entity.html

    如果您想在标签中使用图像,您可以自定义表单模板。你可以在这里阅读:

    【讨论】:

    • 谢谢,但我不确定这是否能帮助我。如果我使用choice_label =&gt; 'username',SF 从实体调用 getUsername() 并且它必须返回一个字符串。就我而言,我想使用我的实体的所有属性(例如图像)来自定义模板 form_label,而不仅仅是使用字符串。我很可能忘记了什么...谢谢您的帮助!
    • 您可以创建一个方法(即 getLabel()),它返回一个包含变量(例如用户名、image_url 和电子邮件)的数组。您可以在树枝模板中使用该数组。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-08-30
    • 1970-01-01
    • 2013-04-24
    • 2022-01-05
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多