連絡フォームは、一連の世帯の日付、タイプ、および配送センターを指定します。[世帯のセットは、そのセンターの最新のものとして定義され、ajax を介して表示されます。] タイプ エンティティは必須であり、日付は未来であってはなりません。型制約は Contact エンティティで指定されます。日付の制約はカスタム バリデータにあります。これらの制約のいずれかに違反している場合、Netbeans デバッグで確認されているように、フォームは有効ではありません。また、Netbeans にもエラー メッセージが表示されます。ただし、どちらの制約メッセージもテンプレートに表示されません。テンプレートに form_errors のダンプを追加しても、何も提供されません。メッセージが表示されない理由を特定できません。
連絡先エンティティ スニペット:
namespace Mana\ClientBundle\Entity;
use Doctrine\ORM\Mapping as ORM;
use Symfony\Component\Validator\Constraints as Assert;
use Mana\ClientBundle\Validator\Constraints as ManaAssert;
/**
* Contact
*
* @ORM\Table(name="contact", indexes={@ORM\Index(name="idx_contact_household_idx", columns={"household_id"}), @ORM\Index(name="idx_contact_type_idx", columns={"contact_type_id"}), @ORM\Index(name="idx_contact_center_idx", columns={"center_id"})})
* @ORM\Entity(repositoryClass="Mana\ClientBundle\Entity\ContactRepository")
*
*/
class Contact
{
...
/**
* @var \Mana\ClientBundle\Entity\ContactType
*
* @ORM\ManyToOne(targetEntity="Mana\ClientBundle\Entity\ContactType", inversedBy="contacts")
* @ORM\JoinColumn(name="contact_type_id", referencedColumnName="id")
* @Assert\NotBlank(message="Type must be selected")
*/
private $contactType;
...
/**
* @var \DateTime
*
* @ORM\Column(name="contact_date", type="date", nullable=true)
* @ManaAssert\NotFutureDate
*/
private $contactDate;
ContactController スニペット:
/**
* @Route("/addContacts", name="contacts_add")
* @Template("ManaClientBundle:Contact:testLatestContacts.html.twig")
*/
public function addContactsAction(Request $request) {
$form = $this->createForm(new ContactType());
$form->handleRequest($request);
$message = "";
if ($form->isValid()) {
$em = $this->getDoctrine()->getManager();
$households = $this->getRequest()->request->get('contact_household');
$data = $form->getData();
$contactDate = $data->getContactDate();
$contactCenter = $data->getCenter();
$contactType = $data->getContactType();
$n = count($households);
foreach ($households as $id) {
$household = $em->getRepository('ManaClientBundle:Household')->find($id);
$houseContacts = $household->getContacts();
$nContacts = count($houseContacts);
$first = ($nContacts > 0) ? 0 : 1;
$county = $contactCenter->getCounty();
$contact = new Contact();
$contact->setContactDate($contactDate);
$contact->setCenter($contactCenter);
$contact->setContactType($contactType);
$contact->setCounty($county);
$contact->setFirst($first);
$household->addContact($contact);
$em->persist($household);
}
$em->flush();
$center = $contactCenter->getCenter();
$desc = $contactType->getContactDesc();
$message = "$n $desc contacts added for $center";
}
return array(
'form' => $form->createView(),
'title' => 'Add contacts',
'message' => $message,
);
}
テンプレート スニペット:
{{ form_errors(form.contactDate) }}
{{ form_errors(form.contactType) }}
<div class="width80">
<form action="{{ path("contacts_add") }}" method="post">
<div class="column1">
<table>
<tr>
<td><b>Date:</b>
<td>{{ form_widget(form.contactDate) }}
<tr>
<td><b>Type:</b>
<td>{{ form_widget(form.contactType) }}
<tr>
<td><b>Center:</b>
<td>{{ form_widget(form.center)}}
</table>
連絡先の種類:
namespace Mana\ClientBundle\Form;
use Symfony\Component\Form\AbstractType;
use Symfony\Component\Form\FormBuilderInterface;
use Symfony\Component\OptionsResolver\OptionsResolverInterface;
use Doctrine\ORM\EntityRepository;
class ContactType extends AbstractType
{
public function buildForm(FormBuilderInterface $builder, array $options)
{
$builder
->add('contactType', 'entity', array(
'class' => 'ManaClientBundle:ContactType',
'property' => 'contactDesc',
'empty_value' => 'Select contact type',
'error_bubbling' => true,
'attr' => array("class" => "smallform"),
'query_builder' => function(EntityRepository $er) {
return $er->createQueryBuilder('c')
->orderBy('c.contactDesc', 'ASC');
},
))
->add('contactDate', 'date', array(
'data' => date_create(),
'format' => 'M/d/y',
'label' => '<b>Date:</b> ',
'years' => range(date('Y'), date('Y') - 5),
))
->add('center', 'entity', array(
'class' => 'ManaClientBundle:Center',
'property' => 'center',
'data' => "",
'empty_value' => 'Select distribution center',
'error_bubbling' => true,
'attr' => array("class" => "smallform"),
'query_builder' => function(EntityRepository $er) {
return $er->createQueryBuilder('c')
->orderBy('c.center', 'ASC');
},
))
->add('household', 'choice', array(
'mapped' => false,
'expanded' => true,
'multiple' => true,
))
->add('householdId','text',array(
'mapped' => false,
))
;
}
public function setDefaultOptions(OptionsResolverInterface $resolver)
{
$resolver->setDefaults(array(
'data_class' => 'Mana\ClientBundle\Entity\Contact',
'cascade_validation' => true,
'csrf_protection' => false,
'required' => false,
'error_bubbling' => TRUE,
));
}
public function getName()
{
return 'contact';
}
}