簡體   English   中英

Symfony3控制器必須返回響應(給定null)

[英]Symfony3 The controller must return a response (null given)

我在這里有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添加到了表單中。

從那時起,我得到了這個錯誤: 控制器必須返回一個響應(給定為空)。 您是否忘記在控制器的某處添加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 %}

有想法嗎?

如果未提交表格怎么辦? 正如錯誤指出的那樣,您什么也不返回。

您可以將return $this->render移到下一個}的末尾,這樣無論是否提交表單都可以調用它。

或執行一些自定義操作:

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

問題是if ($form->isSubmitted() && $form->isValid()) {會導致錯誤,並且因此沒有返回任何結果。

希望這對您有所幫助。

僅當您的表單已提交且有效時,您才返回樹枝模板。

您將返回語句放在if ($form->isSubmitted() && $form->isValid()) { }條件下,因此方法返回null。

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM