控制器必须返回一个响应(给定 null)。您是不是忘记在控制器的某处添加 return 语句?请

Posted

技术标签:

【中文标题】控制器必须返回一个响应(给定 null)。您是不是忘记在控制器的某处添加 return 语句?请【英文标题】:The controller must return a response (null given). Did you forget to add a return statement somewhere in your controller? please控制器必须返回一个响应(给定 null)。您是否忘记在控制器的某处添加 return 语句?请 【发布时间】:2018-02-05 12:53:42 【问题描述】:
**DefaultController.php**

这是我的 DefaultController.php 文件,我将进入 symfony 中的简单登录页面 我想用我在控制器中提到的名字显示你好,请指导我,我是 symfony 的新手。

<?php

namespace AppBundle\Controller;
use AppBundle\Entity\users;
use Sensio\Bundle\FrameworkExtraBundle\Configuration\Route;
use Symfony\Bundle\FrameworkBundle\Controller\Controller;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\RedirectResponse;
use Symfony\Component\HttpFoundation\Response;


class DefaultController extends Controller

  /**
   * @Route("/login", name="login")
   */
  public function loginAction(Request $request)
    
    
    if($request->getMethod()=='POST')
      $username=$request->get('username');
      $password=$request->get('password');
      $em=$this->getDoctrine()->getEntityManager();
      $repository=$em->getRepository('AppBundle:users');
      $user=$repository->findOneBy(array('userName'=>$username, 'password'=>$password)); 
    
      if($user)
      
          return $this->render('default/login.html.twig', array('name' =>$user->getFirstName()));
      
    
    else
      return $this->render('default/login.html.twig');
    
  

login.html.twig

这是我在 symfony 中的登录页面,想显示我在 Hello name 这一行中提到的名字的你好,如果需要请做一些更正。

<html>
  <head>
    % block stylesheets %
      <link rel="stylesheet" href=" asset('templates/css/1.css') ">
    % endblock %
  </head>
  <body>  
    
    % block container %
    
      <div class="wrapper">
        <h2>Login User</h2>                    
        <form class="form-sigin" method="POST" action="path('login')">
          <div><input type="text" name="user_name" class="txtbox" placeholder="User Name"></div>
          <div><input type="password" name="password" class="txtbox" placeholder="Password"></div>
          <div><input type="checkbox"><span>Remember</span></div>
          <div><input type="submit" value="Log In" class="loginBtn"></div>
          <div><span><a href="">Forgot Password</a></span></div>
        </form>
      </div>
      % if name is defined  %
        <div class="alert-info fade in">
          <strong>Hello name</strong>
        </div>
      % endif  %

    % endblock %  
  </body>
</html>

users.php

<?php
    
namespace AppBundle\Entity;
    
use Doctrine\ORM\Mapping as ORM;
    
/**
 * users
 *
 * @ORM\Table(name="users")
 * @ORM\Entity(repositoryClass="AppBundle\Repository\usersRepository")
 */
class users

    /**
     * @var int
     *
     * @ORM\Column(name="id", type="integer")
     * @ORM\Id
     * @ORM\GeneratedValue(strategy="AUTO")
     */
    private $id;

    /**
     * @var string
     *
     * @ORM\Column(name="user_name", type="string", length=255)
     */
    private $userName;
   
    /**
     * @var string
     *
     * @ORM\Column(name="first_name", type="string", length=255)
     */
    private $firstName;
    
    /**
     * @var string
     *
     * @ORM\Column(name="password", type="string", length=255)
     */
    private $password;
    
    /**
     * Get id
     *
     * @return int
     */
    public function getId()
    
        return $this->id;
    
    
    /**
     * Set userName
     *
     * @param string $userName
     *
     * @return users
     */
    public function setUserName($userName)
    
        $this->userName = $userName;
  
        return $this;
    
    
    /**
     * Get userName
     *
     * @return string
     */
    public function getUserName()
    
        return $this->userName;
    
    
    /**
     * Set firstName
     *
     * @param string $firstName
     *
     * @return users
     */
    public function setFirstName($firstName)
    
        $this->firstName = $firstName;

        return $this;
    
    
    /**
     * Get firstName
     *
     * @return string
     */
    public function getFirstName()
    
        return $this->firstName;
    
  
    /**
     * Set password
     *
     * @param string $password
     *
     * @return users
     */
    public function setPassword($password)
    
        $this->password = $password;
    
        return $this;
    
    
    /**
     * Get password
     *
     * @return string
     */
    public function getPassword()
    
        return $this->password;
    

【问题讨论】:

【参考方案1】:

你看到问题的缩进很糟糕..试试这个:

     if($request->getMethod()=='POST')
     
        $username=$request->get('username');
        $password=$request->get('password');

        $em=$this->getDoctrine()->getEntityManager();
        $repository=$em->getRepository('AppBundle:users');
        $user=$repository->findOneBy(array('userName'=>$username, 'password'=>$password)); 

        if($user)
        
            return $this->render('default/login.html.twig', array('name' =>$user->getFirstName()));
         else 
            return $this->render('default/login.html.twig');
        
     else
        return $this->render('default/login.html.twig');
    

问题是你在 POST 请求中但没有用户,所以它没有进入任何返回。

我添加了一个新的条件else 在这种情况下返回。

我不知道你的逻辑是否正确,但问题是

【讨论】:

谢谢先生,我的问题已经解决了,但是我的任务还没有完成,你能帮我进一步完成我的任务吗? 这取决于什么。例如,对于新任务,您可以打开一个新问题 :) 如果此答案解决了您的问题,请在可以帮助其他人解决相同问题时接受它,请@KumarPal 先生喜欢使用会话和提交按钮后我的页面将被重定向到仪表板页面。 提交按钮后如何重定向到仪表板页面。 嗯,请尝试用您的代码打开一个新问题,我会尝试回答 @KumarPal

以上是关于控制器必须返回一个响应(给定 null)。您是不是忘记在控制器的某处添加 return 语句?请的主要内容,如果未能解决你的问题,请参考以下文章

CakePHP 3.4.2 测试 POST 的响应总是返回 NULL

WCF 响应不是映射总是返回 null

由于cors,Angular 1.5响应状态返回NULL(-1)而不是503

Postman:如何在 Postman 自动化中检查字段是不是返回 null

如何从get请求获取json响应而不是html响应?

如何控制响应流