【问题标题】:Symfony2: how to add label, attr to Entity to show in form (ContactType form, entity ContactMessage)?Symfony2:如何将标签,attr添加到Entity以显示在表单中(ContactType表单,实体ContactMessage)?
【发布时间】:2017-04-18 08:29:32
【问题描述】:

如何将label, trim, attr => [placeholder => "Field name"]添加到Entity中以显示在表单中(表单ContactMessageType,实体ContactMessage)? 我正在尝试在一个文件中配置表单字段和实体字段-> 实体类 ContactMessage。 那可能吗?如果是,如何? 如果没有,怎么办?

我的实体:

 use Symfony\Component\Validator\Constraints as Assert;
 use Doctrine\ORM\Mapping as ORM;
 /**
 * php app/console doctrine:schema:validate
 * php app/console doctrine:schema:update --force
 *
 * Class ContactMessage
 * @see http://symfony.com/doc/2.8/doctrine/registration_form.html
 *
 * @ORM\Entity
 * @ORM\Table(name="contact_messages", options={"collate"="utf8_general_ci"})
 */
class ContactMessage
{
    public function __construct()
    {
        $this->createdDateTime = new \DateTime("now");
    }

/**
 * @ORM\Column(type="integer", nullable=false, options={"unsigned":true, "length":11})
 * @ORM\Id
 * @ORM\GeneratedValue(strategy="AUTO")
 *
 * @var integer
 */
protected $id;
/**
 * @Assert\NotBlank()
 *
 * @ORM\Column(type="string", name="sender_name", nullable=false, length=255, options={})
 *
 * @var string
 */
protected $senderName;
/**
 * @Assert\NotBlank()
 *
 * @ORM\Column(type="string", name="sender_email", nullable=false, length=512, options={"default":""})
 *
 * @var string
 */
protected $senderEmail;
/**
 *
 *
 * @ORM\Column(type="string", name="sender_message", nullable=false, length=4096, options={"default":""})
 *
 * @var string
 */
protected $senderMessage;
/**
 *
 * @ORM\Column(type="string", name="sender_phone_number", nullable=false, length=16, options={"default":""})
 *
 * @var string
 */
protected $senderPhoneNumber;

/**
 * @ORM\Column(type="datetime", name="created_date_time", nullable=false,  options={"default": "0000-00-00 00:00:00"})
 *
 * @var \DateTime
 */
protected $createdDateTime;

}

【问题讨论】:

    标签: php forms symfony entity


    【解决方案1】:

    我不确定是否理解您的问题,但您可以在 FormType 中添加标签和占位符:

    public function buildForm(FormBuilderInterface $builder, array $options)
    {
        $builder
            ->add('senderName', TextType::class, [
                'required' => false,
                'label'    => 'Your label',
                'attr'     => [
                    'placeholder' => 'Your placeholder',
                ],
            ]);
    }
    

    【讨论】:

    • 我知道,我正试图在实体中做到这一点。使用@Assert\...,因为我在一个文件(实体)中尽可能多地写了,并且我将实体作为数据添加到表单中,所以当我在表单中有两次“senderName”时,我不知道您的代码是否不会损坏表单,来自实体并在构建器中手动写入
    • @Assert 不用于此,您也不能。它仅用于在您的数据上添加断言。您需要将您的表单与您的实体分开,因为也许在未来,您需要为一个实体提供多个表单
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-08-05
    • 1970-01-01
    • 2012-09-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多