0

連絡フォームは、一連の世帯の日付、タイプ、および配送センターを指定します。[世帯のセットは、そのセンターの最新のものとして定義され、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';
    }
}
4

1 に答える 1

0

エラーは、コードを含めることによるものでした

'error_bubbling' => true,

フォームは子ではなかったので、そのコードが存在する理由はありませんでした。これは、アプリケーションの以前のバージョンの成果物でした。

于 2013-09-15T17:27:07.800 に答える