2013-10-11 55 views
1

假我Symfony2的isValid()的返回没有错误

if ($editForm->isValid()) { 

保持返回false,但我没有得到任何错误消息。

我试着在下面的线程所有建议的方法,我比如做

var_dump($editForm->getErrorsAsString()); 
die; 

,并得到

string(266) "name: No errors syncSchema: 1: No errors 12: No errors 37: No errors 38: No errors 49: No errors 14: No errors 39: No errors 76: No errors 152: No errors " 

Symfony2 : How to get form validation errors after binding the request to the form

其他任何可能导致此行为?

*** UPDATE(包括代码)*****

控制器

public function updateAction(Request $request, $id) 
{ 
    $currentCompany = $this->container->get('security.context')->getToken()->getUser()->getCompany(); 

    $folderHelper = $this->get('biztv.helper.folderHelper'); 

    $em = $this->getDoctrine()->getManager(); 

    $entity = $em->getRepository('BizTVMediaManagementBundle:Video')->find($id); 

    if (!$entity) { 
     throw $this->createNotFoundException('Unable to find Video entity.'); 
    } 
    if ($entity->getCompany() != $currentCompany) { 
     throw $this->createNotFoundException('Unable to find Folder entity in THIS company.'); 
    }   

    $deleteForm = $this->createDeleteForm($id); 
    $editForm = $this->createEditForm($entity); 

    $folders = $folderHelper->getFolders(); 

    $editForm->handleRequest($request); 

    if ($editForm->isValid()) { 

     $entity->setCompany($currentCompany); 

     //Get and check the folder chosen as parent 
     $entity->setFolder($folderHelper->checkFolderId($request->request->get('folder'))); //will cause die() if folder doesn't belong to this company 

     //Check which folder to go back to later on 
     $goToFolder = $folderHelper->goToFolder($entity);   

     $helper = $this->get('biztv.helper.globalHelper'); 
     $helper->log('success', 'Videon <strong>'. $entity->getName() .'</strong> har uppdaterats.'); 

     $em->flush(); 

     return $this->redirect($this->generateUrl('video')); 
    } 

/** 
* Creates a form to edit a Video entity. 
* 
* @param Video $entity The entity 
* 
* @return \Symfony\Component\Form\Form The form 
*/ 
private function createEditForm(Video $entity) 
{ 
    $currentCompanyId = $this->container->get('security.context')->getToken()->getUser()->getCompany()->getId(); 

    $form = $this->createForm(new VideoTypeEdit($currentCompanyId), $entity, array(
     'action' => $this->generateUrl('video_update', array('id' => $entity->getId())), 
     'method' => 'PUT', 
    )); 

    return $form; 
} 

FormType

namespace BizTV\MediaManagementBundle\Form; 

use Symfony\Component\Form\AbstractType; 
use Symfony\Component\Form\FormBuilderInterface; 
use Symfony\Component\OptionsResolver\OptionsResolverInterface; 

use Doctrine\ORM\EntityRepository; 

class VideoTypeEdit extends AbstractType 
{ 
     /** 
    * @param FormBuilderInterface $builder 
    * @param array $options 
    */ 

    function __construct($company) 
    { 
     $this->company = $company; 
    } 

    public function buildForm(FormBuilderInterface $builder, array $options) 
    { 
     $company = $this->company; 

     $builder 
      ->add('name') 
     ; 

     $builder 
      ->add('syncSchema', 'entity', array(
       'label' => ' ', 
       'multiple' => true, // Multiple selection allowed 
       'expanded' => true, // Render as checkboxes 
       'property' => 'select_label', 
       'class' => 'BizTV\ContainerManagementBundle\Entity\Container', 
       'query_builder' => function(\Doctrine\ORM\EntityRepository $er) use ($company) { 
        $qb = $er->createQueryBuilder('a'); 
        $qb->innerJoin('a.containerType', 'ct'); 
        $qb->where('a.containerType IN (:containers)', 'a.company = :company'); 
        $qb->setParameters(array('containers' => array(1,2,3,4), 'company' => $company)); 
        $qb->orderBy('ct.id', 'ASC'); 

        return $qb; 
       } 
      )); 


    } 

    /** 
    * @param OptionsResolverInterface $resolver 
    */ 
    public function setDefaultOptions(OptionsResolverInterface $resolver) 
    { 
     $resolver->setDefaults(array(
      'data_class' => 'BizTV\MediaManagementBundle\Entity\Video' 
     )); 
    } 

    /** 
    * @return string 
    */ 
    public function getName() 
    { 
     return 'biztv_mediamanagementbundle_videoedit'; 
    } 
} 

查看

{% extends '::base.html.twig' %} 

{% block contents -%} 
    <h1>Video edit</h1> 

    <div class="userAction_wrapper" style="width:800px;"> 

      {{ form_errors(edit_form.name) }} 
      {{ form_errors(edit_form.syncSchema) }} 

      {{ form_errors(edit_form) }} 

     <form action="{{ path('video_update', { 'id': entity.id }) }}" method="post" {{ form_enctype(edit_form) }} novalidate> 
      {{ form_widget(edit_form) }} 

      <label for="folder">Mapp</label> 
      <select name='folder'> 
        <option value='none'>Ingen mapp</option> 
        {% include 'BizTVMediaManagementBundle:Image:options.html.twig' with {'folders': folders, 'level': 0 } %} 
      </select> 

      <div> 
       <table> 
       <tr> 
        <td>Längd</td> 
        <td>{{ entity.duration }}s</td> 
       </tr> 
       <tr> 
        <td>Bredd</td> 
        <td>{{ entity.width }}px</td> 
       </tr> 
       <tr> 
        <td>Höjd</td> 
        <td>{{ entity.height }}px</td> 
       </tr> 
       <tr> 
        <td>Codec</td> 
        <td>{{ entity.codec }}</td> 
       </tr> 
       <tr> 
        <td>Filstorlek</td> 
        <td>{{ entity.filesize }}bytes</td> 
       </tr>    

       </table> 
      </div> 

      Välj vilka ställen videofilen skall kopieras till 
      {% render(controller('BizTVContentManagementBundle:Default:index', {'userEdit': true})) %} 

      <div> 
       <button type="submit">Spara</button> 
      </div> 

     </form> 

     <ul class="record_actions"> 
      <li> 
       <a href="{{ path('video') }}"> 
        Back to the list 
       </a> 
      </li> 
      <li>{{ form(delete_form) }}</li> 
     </ul> 

    </div> 


<script type="text/javascript"> 

$(function() { 

$('#biztv_mediamanagementbundle_videoedit_syncSchema').children().each(function() { 

     fromId = $(this).attr('id'); 

     if (typeof fromId != 'undefined') { 
      Id = fromId.replace("biztv_mediamanagementbundle_videoedit_syncSchema_",""); 
      toId = 'container_'+Id; 

      $('#'+toId).append(' '); 
      $('#'+toId).append($('#'+fromId)); 

     } 

    });  

$('#biztv_mediamanagementbundle_videoedit_syncSchema').remove();  

}); 

</script> 
{% endblock %} 
+2

请发表您的formtype,实体等 – nietonfir

+0

还有,对不起=) –

回答

3

显然,建筑形式,当symfony2.3方式,你需要做到这一点的树枝,

{{ form_start(form) }} 
    {{ form_errors(form) }} 

    {{ form_row(form.task) }} 
    {{ form_row(form.dueDate) }} 
{{ form_end(form) }} 

虽然,对于那些建的老式方法的形式,你仍然可以树枝他们老老式的方式。

1

假设使用的Symfony 2.3 ,我想你错过了form_end()在你的模板(iirc它被称为form_rest()之前的2.3)。见当前docmentation。因此,而不是简单地写入</form>form_end(edit_form)应使您的表单有效。

+0

遗憾的是没有变化..顺便说一句是不是form_rest包括()(或...结束)的东西当你有{{form_widget(edit_form)}}?是的,2.3自一个月左右..可怕的BC打破了更新.. –

+0

@MattiasSvensson是的,我知道。但我找不到任何文件(至少不是2.3),所以我不再确定。那么我最后的猜测是删除'$ deleteForm',也许它干扰了某种方式?在旁注中,你并没有更新entitymanager中的实体,所以你不会在'flush()'上保存任何改变。 – nietonfir

1

想想,你验证出的一切,由什么没有错误显示真实,所以有一些隐藏的验证:)

{{form_widget(form._token)}}? csrf检查?

BTW form_rest!= form_end

相关问题