TextField true上需要Symfony渲染
我不明白为什么此子窗体的呈现没有呈现我的TextTypeTextField true上需要Symfony渲染,symfony,Symfony,我不明白为什么此子窗体的呈现没有呈现我的TextTypefirstName上的required标记 我的表单基于订单实体 OrderFormType的集合类型为Tent,基于TentFormType TentFormType的集合类型为Camper,基于CamperFormType 所以订单>帐篷>露营车 namespace AppBundle\Form\Type; use Symfony\Component\Form\AbstractType; use Symfony\Component\F
firstName
上的required
标记
我的表单基于订单
实体OrderFormType
的集合类型为Tent
,基于TentFormType
TentFormType
的集合类型为Camper
,基于CamperFormType
所以订单>帐篷>露营车
namespace AppBundle\Form\Type;
use Symfony\Component\Form\AbstractType;
use Symfony\Component\Form\Extension\Core\Type\TextType;
//...
class CamperFormType extends AbstractType
{
public function buildForm(FormBuilderInterface $builder, array $options)
{
$builder->add('firstName', TextType::class, [
'required' => true, //Should even not been usefull since SF2.8
'label' => 'First name',
'attr' => [
'placeholder' => 'First name'
],
]);
//...
}
public function configureOptions(OptionsResolver $resolver)
{
$resolver->setDefaults([
'data_class' => 'AppBundle\Entity\Camper',
'csrf_protection' => true,
'error_bubbling' => true,
'csrf_field_name' => '_token',
//...
]);
}
}
这些字段仅通过form_小部件呈现:
{{ form_widget(form.firstName) }}
{{ form_widget(form.lastName) }}
但这并没有添加必需的字段:
<input id="app_order_form_type_tents_0_campers_0_firstName" name="app_order_form_type[tents][0][campers][0][firstName]" placeholder="First name" class="form-control" type="text">
<input id="app_order_form_type_tents_0_campers_0_lastName" name="app_order_form_type[tents][0][campers][0][lastName]" placeholder="Last name" class="form-control" type="text">
但我的FormType不需要它
有人知道为什么吗
--编辑--
我的露营车
实体
<?php
namespace AppBundle\Entity;
use Doctrine\ORM\Mapping as ORM;
use Symfony\Component\Validator\Constraints as Assert;
/**
* Camper.
*
* @ORM\Table(name="camper")
* @ORM\Entity()
*/
class Camper
{
/**
* @var int
*
* @ORM\Column(name="id", type="integer")
* @ORM\Id
* @ORM\GeneratedValue(strategy="AUTO")
*/
private $id;
/**
* @var string
* @Assert\NotBlank()
*
* @ORM\Column(name="firstName", type="string", length=255, nullable=false)
*/
private $firstName;
// ...
}
很抱歉,我不能使用评论,所以我在这里提出了一个建议。。。
尝试:
你能把你的实体粘贴到这里吗?就这么做了:)!我已经有了form\u start
和form\u end
form\u widget(form)
将在同一个位置呈现我的所有字段,这不是我想要的。占位符需要在attr中?是的,因为您的实体中有@Assert\NotBlank(),也许您可以省去required。的确,但是用户可以提交表单而不必填写表单,这不是用户友好的要求,需要进行HTML5验证。Assert\NotBlank是一种后端验证,我希望同时获得这两种验证。问题不在于如何获取必填字段,我可以使用{form_widget(form.firstName,{'attr':{'required':'required'}}}}}
,问题是“为什么它在应该呈现的情况下默认不呈现?”
<?php
namespace AppBundle\Entity;
use Doctrine\ORM\Mapping as ORM;
use Symfony\Component\Validator\Constraints as Assert;
/**
* Camper.
*
* @ORM\Table(name="camper")
* @ORM\Entity()
*/
class Camper
{
/**
* @var int
*
* @ORM\Column(name="id", type="integer")
* @ORM\Id
* @ORM\GeneratedValue(strategy="AUTO")
*/
private $id;
/**
* @var string
* @Assert\NotBlank()
*
* @ORM\Column(name="firstName", type="string", length=255, nullable=false)
*/
private $firstName;
// ...
}
{{ form_start(form) }}
{{ form_widget(form) }}
{{ form_end(form) }}