Я пытаюсь сделать контактную форму с Symfony 2.4.1, и у меня есть следующая ошибка:
Neither the property "contact" nor one of the methods "getContact()", "isContact()", "hasContact()", "__get()" exist and have public access in class "Open\OpcBundle\Entity\Contact".
Я понимаю эту ошибку, но я нахожу что-нибудь для ее решения в документации по формам SF2 или в Интернете:
Код контроллера:
[..] class OpcController extends Controller { public function contactAction(Request $request) { $contact = new Contact(); $form = $this->createForm(new ContactType(), $contact); $form->handleRequest($request); return $this->render("OpenOpcBundle:Opc:contact.html.twig", array("formu" => $form->createView(), ) ); } }
Контактное лицо:
[...] class Contact { protected $nom; protected $courriel; protected $sujet; protected $msg; public function getNom() { return $this->nom; } public function setNom($nom) { $this->nom = $nom; } public function getCourriel() { return $this->courriel; } public function setCourriel($courriel) { $this->courriel = $courriel; } public function getSujet() { return $this->sujet; } public function setSujet($sujet) { $this->sujet = $sujet; } public function getMsg() { return $this->msg; } public function setMsg($msg) { $this->msg = $msg; } }
И код класса Form:
public function buildForm(FormBuilderInterface $builder, array $options) { $builder->add('contact'); ->add('nom', 'text')) ->add('courriel', 'email') ->add('sujet', 'text') ->add('msg', 'textarea') ->add('submit', 'submit'); } public function getName() { return "Contact"; } public function setDefaultOptions(OptionsResolverInterface $resolver) { $resolver->setDefaults(array('data_class' => 'Open\OpcBundle\Entity\Contact', )); } }
Любая идея проблемы? благодаря
Ваша ошибка верна и сообщит вам, что ваша организация Contact
не имеет свойства contact
и никакого связанного метода buildForm()
getter, в то время как в вашем buildForm()
вы использовали свойство контакта, например $builder->add('contact');
но в объекте отсутствует связанное свойство. Определите свойство сначала в своей сущности
class Contact { protected $nom; protected $courriel; protected $sujet; protected $msg; protected $contact; public function getContact() { return $this->contact; } public function setContact($contact) { $this->contact= $contact; } /* ... remaining methods in entity */ }
или если это не отображаемое поле, тогда вы должны определить это поле в построителе как не отображаемое
$builder->add('contact','text',array('mapped'=>false));
Определив выше, вам не нужно обновлять свою сущность