2012-05-13 15 views
8

मैं अपने फार्म के साथ एक समस्या है, मैं इस त्रुटि हर बार है मैं एक टिप्पणी को सहेजना चाहते:अपेक्षित तर्क, वस्तु दिया

प्रकार सरणी या traversable की

अपेक्षित तर्क और ArrayAccess, वस्तु दिया

सबसे पहले मैं अपने वर्ग commentType बनाएँ:

public function buildForm(FormBuilder $builder, array $options) 
{ 
    $builder 
     ->add('comment', 'textarea') 
     ->add('commentedName', 'text') 
     ->add('idNews','hidden', array('error_bubbling'=>true)) 
     ->add('country', 'text') 
     ->add('email','email') 
     ->add('captcha', 'captcha'); 
} 

मैं अपने रूप को अनुकूलित:

public function getDefaultOptions(array $options){ 

$collectionConstraint = new Collection (array (
    'email' => new Email(array('message' => 'invalid address email')), 
    'commentedName' => array(new MaxLength(array('limit' => 30, 'message' => ''))), 
    'comment' => array(new MinLength(array('limit' => 20, 'message' => ''))), 
    'country' => new MinLength(array('limit' => 3, 'message' => '')), 
    'idNews' => array(new MaxLength(array('limit' => 30, 'message' => ''))), 
)); 

return array('validation_constraint' => $collectionConstraint); 
} 

फिर मेरे नियंत्रक में मैं अपने प्रपत्र फोन और मैं डीबी में डेटा को बचाने:

$comment = new \Mybundle\BackendBundle\Entity\Comments(); 

$form = $this->createForm(new \Mybundle\MainBundle\Form\CommentType(), $comment); 

    $request = $this->get('request'); 
if ($request->getMethod() == 'POST') { 
    $form->bindRequest($request); 

    if ($form->isValid()) { 
     $idNews= $this->getDoctrine() 
      ->getRepository('Mybundle\BackendBundle\Entity\News') 
      ->find($id); 

     $comment->setIdNews($idNews); 

     $em = $this->getDoctrine()->getEntityManager(); 
     $em->persist($comment); 
     $em->flush(); 

     return $this->redirect($this->generateUrl('News',array('id' => $id,'slug'=>$slug))); 

और मेरे टहनी में मैं करता हूँ:

<table style="float: right;" > 
<tbody> 
    <tr> 
     <td>{{ form_widget(form.commentedName) }} </td> 
     <td>{{ form_label(form.commentedName, "name") }}</td> 
    </tr> 
    <tr> 
     <td class="comment-error">{{ form_errors(form.commentedName) }}</TD> 
    </tr> 
    <tr> 
     <td>{{ form_widget(form.country) }} </td> 
     <td>{{ form_label(form.country, "country") }}</td> 
    </tr> 
    <tr> 
     <td class="comment-error">{{ form_errors(form.country) }}</TD> 
    </tr> 
    <tr> 
     <td class="large_text">{{ form_widget(form.email) }} </td> 
     <td>{{ form_label(form.email, "address") }}</td> 
    </tr> 
    <tr> 
     <td class="comment-error">{{ form_errors(form.email) }}</td> 
    </tr> 
    <tr> 
     <td>{{ form_widget(form.comment) }} </td> 
     <td>{{ form_label(form.comment, "comment") }}</td> 
    </tr> 
    <tr> 
     <td class="comment-error">{{ form_errors(form.comment) }}</td> 
    </tr> 
    <tr> 
     <td>{{ form_widget(form.captcha) }} </td> 
    </tr> 

<tr> 
     <td class="comment-error">{{ form_errors(form) }}</td> 
    </tr> 

मैं टिप्पणी जब मैं अपने cotroller में ऑब्जेक्ट "$ टिप्पणी" के ऊपर पंक्ति में "शून्य" के साथ बदल गया है, मुझे त्रुटि नहीं है लेकिन मैं डेटाबेस में डेटा को सहेज नहीं सकता ...

किसी को भी कोई विचार है?

उत्तर

6

संग्रह की बाधा के साथ आप केवल सरणी (या Traversable लागू करने वाले कुछ भी) को मान्य कर सकते हैं। आपको Comments कक्षा में annotation पर जाना होगा।

+0

इसका मतलब है कि मैं अपने फॉर्म से getDefaultOptions को हटाता हूं और टिप्पणियों में फॉर्म के सभी फ़ील्ड को सत्यापित करता हूं टिप्पणियां का उपयोग करके इकाई ... – Nll

+0

@ elec1984 हाँ, बिल्कुल। यह काम करेगा, चिंता मत करो। और मुझे लगता है कि एक ही स्थान (फ़ील्ड क्लास में अर्थ) में फ़ील्ड परिभाषा और सत्यापन होना संपादन के लिए बेहतर है। – gremo

+0

ठीक है मुझे आशा है कि जीरेमो, टीएनक्स – Nll

संबंधित मुद्दे