對於聯繫表單我有兩個實體。Symfony表單驗證實體類型
class ContactRequest
{
/**
* @var int
*
* @ORM\Column(name="id", type="integer")
* @ORM\Id
* @ORM\GeneratedValue(strategy="AUTO")
*/
private $id;
[...]
/**
* @ORM\ManyToOne(targetEntity="ContactCategory")
* @ORM\Column(name="type", type="integer")
*/
private $type;
/**
* @var string
*
* @ORM\Column(name="message", type="text", nullable=false)
*/
private $message;
[...]
}
而且
class ContactCategory
{
/**
* @var int
*
* @ORM\Column(name="id", type="integer")
* @ORM\Id
* @ORM\GeneratedValue(strategy="AUTO")
*/
private $id;
[...]
public function __toString()
{
return $this->getName();
}
}
然後我的形式
class ContactRequestType extends AbstractType
{
public function buildForm(FormBuilderInterface $builder, array $options)
{
$builder->add('requesterFirstname', Type\TextType::class, array('label' => 'Prénom'))
->add('requesterLastname', Type\TextType::class, array('label' => 'Nom'))
->add('requesterMail', Type\EmailType::class, array('label' => 'Email'))
->add('requesterPhone', Type\TextType::class, array('label' => 'Téléphone'))
->add('message', Type\TextareaType::class, array('label' => 'Message'))
$builder->add('type', EntityType::class, [
'class' => 'CargoApiBundle:ContactCategory',
'group_by' => 'group',
'query_builder' => function (EntityRepository $er) use ($options) {
return $er->createQueryBuilder('cc')
->where('cc.site = :site')->setParameter('site', $options['site'])
->orderBy('cc.group', 'ASC')
->orderBy('cc.name', 'ASC');
}
]);
}
public function configureOptions(OptionsResolver $resolver)
{
$resolver->setDefaults([
'short' => false,
'site' => null,
'data_class' => 'Cargo\ApiBundle\Entity\ContactRequest'
]);
}
}
顯示工作得很好,但是當我提交表單,它拋出連接的類型字段錯誤「此值應整數類型「。看起來合乎邏輯,因爲它必須是我的聯繫人類別的ID。
所以我看了看形式生成的代碼並發現不妥:
<select id="contact_request_type" name="contact_request[type]" class="form-control">
<optgroup label="Général">
<option value="4">Autre</option>
<option value="3">Du partenariat/sponsoring</option>
<option value="1">Le fonctionnement de l'association</option>
<option value="2">Un tournoi internationnal</option>
</optgroup>
<optgroup label="Une section">[...]</optgroup>
<optgroup label="Le site">[...]</optgroup>
</select>
所以我甩請求的內容,看看有什麼提案,得到了這一點:
array (size=3)
'action' => string 'contact_send' (length=12)
'contact_request' =>
array (size=7)
'requesterFirstname' => string 'Kiro' (length=5)
'requesterLastname' => string 'Staz' (length=4)
'requesterMail' => string '[email protected]' (length=18)
'requesterPhone' => string '0000000000' (length=10)
'type' => string '2' (length=1)
'message' => string 'test' (length=17)
'_token' => string '32LuZWWh8h-6lMlEShrjrs1w5HspaX0R4WikcGf5u3o' (length=43)
我的數據都是分辯但contact_request ['type']被轉儲爲一個字符串,我認爲這個問題,它應該是一個整數類型被驗證爲一個整數。
有人可以給我一個關於我做錯了什麼的線索嗎?
我沒有自定義約束驗證器。
謝謝!
什麼是你的Symfony和PHP的版本? –
Symfony 3.3.2和PHP 7.0.3 – SteveM