【问题标题】:Symfony3 The controller must return a response (null given)Symfony3 控制器必须返回响应(给定 null)
【发布时间】:2016-03-23 14:07:28
【问题描述】:

我在这里遇到了 Symfony3 的这个问题。我对此很陌生,所以我不知道在哪里调试。

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\Component\HttpFoundation\File\File 类的实例,但它是一个 (n) 资源。您可以通过将“data_class”选项设置为 null 或添加将 a(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 %}

想法?

【问题讨论】:

    标签: php symfony


    【解决方案1】:

    如果表单没有提交怎么办?正如错误所述,您不会返回任何内容。

    您可以将您的return $this-&gt;render 移动到下一个} 下方,这样无论是否提交表单都会调用它。

    或者做一些自定义的事情:

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

    【讨论】:

    • 好的,但是如果表单无效怎么办?我的意思是,如果它无效,我不想提交它。我只是想弄清楚为什么此表格无效/未提交。你的回答暂时解决了我的问题。
    • 如果提交了 for 并赋值,PHP 将处理 if 语句中的内容。如果它没有提交(或无效),你什么都不做(没有else 声明)。
    • 不需要else,只要在if完成后返回一些东西。
    • 我明白了,现在我添加了具有相同返回的 else 语句后,它工作正常。我只是想知道为什么表单无效或未提交。
    • 可能是因为您将函数调用为 GET 以检索空表单,或者可能是因为您提交了错误的数据并且存在一些验证错误。
    【解决方案2】:

    问题是 if ($form-&gt;isSubmitted() &amp;&amp; $form-&gt;isValid()) { 这个条件导致 false 并且因此没有返回任何内容。

    希望对您有所帮助。

    【讨论】:

      【解决方案3】:

      仅当您的表单已提交且有效时,您才返回您的树枝模板...

      【讨论】:

        【解决方案4】:

        您将 return 语句放在 if ($form-&gt;isSubmitted() &amp;&amp; $form-&gt;isValid()) { } 条件中,因此方法返回 null。

        【讨论】:

          【解决方案5】:
              return $helpers->json(array(
                      "status" => "error",
                      "data" => "Send json with post !!"
                  ));
          

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2014-02-15
            • 2014-01-08
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2016-01-04
            • 2015-07-30
            相关资源
            最近更新 更多