2017-09-26 5 views
-1

Je me demande simplement pourquoi cela ne fonctionne pas.symfony 3 - le retour du contrôleur sur la fonction séparée génère une erreur

Je reçois l'erreur ci-dessous dans un contrôleur en plaçant le retour JSON dans une méthode distincte:

The controller must return a response (null given). Did you forget to add a return statement somewhere in your controller? (500 Internal Server Error) 

La configuration est comme ceci:

contrôleur

namespace UsedBundle\Controller; 

use Sensio\Bundle\FrameworkExtraBundle\Configuration\Route; 
use Symfony\Bundle\FrameworkBundle\Controller\Controller; 
use Symfony\Component\HttpFoundation\Request; 
... 
use Symfony\Component\HttpFoundation\JsonResponse; 


class AccountController extends Controller 
{ 
private $status; 
private $message; 
private $data; 

/** 
* @Route("/mon-compte", name="account_page") 
*/ 

public function showAccount(Request $request){ 
    $factory = $this->get('security.encoder_factory'); 
    if (!$this->get('security.authorization_checker')->isGranted('IS_AUTHENTICATED_REMEMBERED')) { 
     throw $this->createAccessDeniedException(); 
    } 
    $user = $this->getUser(); 
    $session = $request->getSession(); 
    $email = $session->get('email'); 

    $em = $this->getDoctrine('doctrine')->getManager('used'); 
    $this->user_info = $em->getRepository('UsedBundle:User') 
    ->UserAccountInfoAction($email); 

    $form = $this->createForm(UserType::class, $user); 
    if ($request->isMethod('POST')) { 
     if($_POST['action'] == 'update_user'){ 
      $this->updateProfile($request, $user, $form, $em); 
     }elseif($_POST['action'] == 'delete_user'){ 
      $this->deleteUser($user, $em); 
     }elseif($_POST['action'] == 'update_password'){ 
      $this->updatePassword($user, $em, $factory); 
     } 
       // \Doctrine\Common\Util\Debug::dump($this->data); 
     $this->returnJson();//***** this is generating the error***** 
    }else{ 
     // populate change profile form 
     return $this->render('account/account.html.twig', [ 
      'user_info' => $this->user_info, 
      'form' => $form->createView(), 
     ]); 
    } 
} 

puis , plus bas sur cette classe, j'ai la méthode returnJson():

public function returnJson(){ 
    return new JsonResponse(array(
     'status' => $this->status, 
     'message' => $this->message, 
     'data' => $this->data, 
     ) 
    );   
} 

Si je place ce code en remplaçant $ this-> returnJson() sur showAccount(), cela fonctionnera correctement.

Des idées pour lesquelles le retour ne peut pas être placé comme une méthode distincte? Ou est-ce que je manque quelque chose?

Merci

Répondre

3

Votre fonction returnJson retourne JsonResponse en showAccount fonction, non pas de celui-ci.

Cela devrait fonctionner:

return $this->returnJson(); 
+0

Merci @svgrafov, c'est tout! – BernardA