2017-06-23 14 views
1

私はJSONを返すようにしようとしているが、私はエラーsymfonyのSerializerInterfaceシリアライザ引数

これは私のコントローラであり得るのsymfony 3.3

の最後のバージョンを使用しています:

<?php 
namespace AppBundle\Controller; 
use Sensio\Bundle\FrameworkExtraBundle\Configuration\Route; 
use Symfony\Bundle\FrameworkBundle\Controller\Controller; 
use Symfony\Component\HttpFoundation\JsonResponse; 
use Symfony\Component\Serializer\SerializerInterface; 

class ApiController extends Controller{ 
    /** 
    * @Route("home", name="api_home") 
    */ 
    public function indexAction(SerializerInterface $serializer) 
    { 
     $entity = $this->getDoctrine() 
      ->getRepository('AppBundle:User') 
      ->findAll(); 
     $json = $serializer->serialize($entity,'json', ['groups' => ['User']]); 
     return new JsonResponse($json, 200, [], true); 
    } 
} 

をservices.yml:

services: 
    _defaults: 
     public: false 
     autowire: false 
     autoconfigure: true 

config.yml

serializer: 
    enabled: true 
    enable_annotations: true 

私はエラーを取得しています:

が、同じエラー

おかげ

答えて

1

アクションメソッドは、要求の属性を持つことができ、私が$ jsonの前に死ぬん試みる

Controller "AppBundle\Controller\ApiController::indexAction()" requires that you provide a value for the "$serializer" argument. Either the argument is nullable and no null value has been provided, no default value has been provided or because there is a non optional argument after this one. 

かparamsをリクエストから変換する必要があります(コンテナから取得する必要があるサービス)ので、次のコードを試してください:

/** 
* @Route("home", name="api_home") 
*/ 
public function indexAction() 
{ 
    $serializer = $this->get('serializer'); 
    $entity = $this->getDoctrine() 
     ->getRepository('AppBundle:User') 
     ->findAll(); 
    $json = $serializer->serialize($entity,'json', ['groups' => ['User']]); 
    return new JsonResponse($json, 200, []); 
} 

・ホープ、このヘルプ

+0

wroks上でこれを持っていなかったという理由だけで起こるのだが、それはSerializerInterfaceで作業していないのですか? – kalites

+0

はい。ちょうど私がservices.ymlの設定を欠場しているので – kalites

+0

こんにちは@キャタイトよ!私はあなたの答えをupvoted、解決としてマークすることを忘れないでください – Matteo

1

それは..私はservices.yml

AppBundle\Controller\: 
     resource: '../../src/AppBundle/Controller/*' 
     public: true 
     tags: ['controller.service_arguments'] 
関連する問題