2016-03-23 59 views
0

我在这里有Symfony3这个问题。我很新,所以我不知道在哪里调试。Symfony3控制器必须返回一个响应(null给出)

UserController.php

public function userEdit($id, Request $request) 
{ 
    $user = $this->getDoctrine() 
     ->getRepository('AppBundle:Users') 
     ->find($id); 

    $user->setEmail($user->getEmail()); 
    $user->setPassword($user->getPassword()); 
    $user->setPhone($user->getPhone()); 
    $user->setType($user->getType()); 
    $user->setName($user->getName()); 
    $user->setFeedback($user->getFeedback()); 
    $user->setPicture($user->getPicture()); 
    $user->setRating($user->getRating()); 
    $user->setInfo($user->getInfo()); 
    $user->setDatecreated($user->getDatecreated()); 

    $form = $this->createFormBuilder($user) 
     ->add('email', EmailType::class, array('attr' => array('class' => 'form-control', 'style' => 'margin-bottom:15px'))) 
     ->add('password', RepeatedType::class, array(
      'type' => PasswordType::class, 
      'invalid_message' => 'The password fields must match.', 
      'options' => array('attr' => array('class' => 'password-field form-control', 'style' => 'margin-bottom:15px')), 
      'required' => true, 
      'first_options' => array('label' => 'Password'), 
      'second_options' => array('label' => 'Repeat Password'), 
     )) 
     ->add('phone', TextType::class, array('attr' => array('class' => 'form-control', 'style' => 'margin-bottom:15px'))) 
     ->add('type', ChoiceType::class, array('choices' => array('Client' => 'Client', 'Builder' => 'Builder'), 'attr' => array('class' => 'form-control', 'style' => 'margin-bottom:15px'))) 
     ->add('name', TextType::class, array('attr' => array('class' => 'form-control', 'style' => 'margin-bottom:15px'))) 
     ->add('picture', FileType::class, array('data_class' => null,'attr' => array('class' => 'form-control', 'style' => 'margin-bottom:15px'))) 
     ->add('info', TextareaType::class, array('attr' => array('class' => 'form-control', 'style' => 'margin-bottom:15px'))) 
     ->add('save', SubmitType::class, array('label' => 'Register', 'attr' => array('class' => 'btn btn-primary', 'style' => 'margin-bottom:15px'))) 
     ->getForm(); 

    $form->handleRequest($request); 

    if ($form->isSubmitted() && $form->isValid()) { 
     //Get Data 
     $email = $form['email']->getData(); 
     $password = $form['password']->getData(); 
     $phone = $form['phone']->getData(); 
     $type = $form['type']->getData(); 
     $name = $form['name']->getData(); 
     $picture = $form['picture']->getData(); 
     $info = $form['info']->getData(); 

     $now = new\DateTime('now'); 
     $em = $this->getDoctrine()->getManager(); 
     $user = $em->getRepository('AppBundle:Users')->find($id); 


     $user->setEmail($email); 
     $user->setPassword($password); 
     $user->setPhone($phone); 
     $user->setType($type); 
     $user->setName($name); 
     $user->setFeedback($user->getFeedback()); 
     $user->setPicture($picture); 
     $user->setRating($user->getRating()); 
     $user->setInfo($info); 
     $user->setDatecreated($now); 
     $images = base64_encode(stream_get_contents($user->getPicture())); 

     $em->flush(); 
     $this->addFlash(
      'notice', 
      'User Updated' 
     ); 

     return $this->render('home/useredit.html.twig', array(
      'user' => $user, 
      'form' => $form->createView(), 
      'images' => $images, 

     )); 
    } 
} 

起初我收到此错误: 表单的视图数据有望成为一流的Symfony \组件的实例\ HttpFoundation \文件\文件,但一个(n)资源。您可以通过将“data_class”选项设置为null或通过添加将(n)资源转换为Symfony \ Component \ HttpFoundation \ File \ File实例的视图转换器来避免此错误。

然后我在这里阅读了一些帖子,并且我添加了'data_class' => null,,其中FileType::class被添加到表单中。

并从那时起我得到这个错误: 控制器必须返回一个响应(null给出)。你忘了在控制器的某个地方添加一个return语句吗?

这是我真的呈现形式的文件: useredit.html.twig

{% extends 'base.html.twig' %} 
{% block body %} 
<h2 class="page-header">EDIT USER {{ user.name }}</h2> 
{{ form_start(form) }} 
{{ form_widget(form) }} 
{{ form_end(form) }} 
{% endblock %} 

想法?

回答

1

如果表单未提交,该怎么办?您不会返回任何内容,就像错误状态一样。

您可以将return $this->render移动到下一个}以下,以便调用是否提交表单。

或者做一些定制:

if ($form->isSubmitted() && $form->isValid()) { 
    .... 
} else { 
    // Return something if the form is not submitted 
} 
+0

好的,但如果表格无效怎么办?我的意思是,如果它无效,我不想提交。我试图弄清楚的是为什么这个表格无效/没有提交。你的回答现在解决了我的问题。 –

+0

如果for被提交并且值,PHP将处理'if'语句中的内容。如果它没有提交(或无效),你什么都不做(没有'else'语句)。 – Egg

+0

有没有其他需要,只要返回的东西后,如果完成。 – abdiel

1

的问题是,这种情况if ($form->isSubmitted() && $form->isValid()) {是导致假,因为这个原因没有被返回。

希望这对你有所帮助。

0

你回到你的嫩枝模板只有当您的表单提交和有效的...

0

你把return语句里面if ($form->isSubmitted() && $form->isValid()) { }条件,所以该方法返回null。

0
return $helpers->json(array(
      "status" => "error", 
      "data" => "Send json with post !!" 
     )); 
相关问题