2016-08-03 28 views
-1

Ich habe 5 Klasse Categoria, Produto, Subcategoria, Subproduto und Comanda und für i-Suche in allen Klassen auszuführen versuchen, einen Dienst wie machen:Anruf auf eine Elementfunktion hat() auf null Symfony2

 
namespace AppBundle\Controller; 


use Symfony\Bundle\FrameworkBundle\Controller\Controller; 

class AccessClassController extends Controller{ 

    /** 
    * Retorna todas as categorias ativas 
    */ 
    public function CategoriasAtivasAction() 
    { 
     $em = $this->getDoctrine()->getManager(); 

     $categorias = $em->getRepository('AppBundle:Categoria')->findByAtivo(1); 

     return $categorias; 
    } 
} 

Und i versuchen, Zugriff auf den Dienst auf ComandaController

 
class ComandaController extends Controller 
{ 
... 
public function newAction(Request $request, $id) 
    { 
     $comanda = new Comanda(); 

     $categorias = $this->get('categorias.ativas')->CategoriasAtivasAction(); 
... 

Dann symfony Rückkehr Fehler

Call to a member function has() on null 500 Internal Server Error - FatalThrowableError

Mein services.yml hat

 

services: 
    categorias.ativas: 
    class: AppBundle\Controller\AccessClassController 

Was ist falsch?

+0

Sie können einen Controller (Verlängerung Controller) als Service nutzen. – Alsatian

+0

Eigentlich kann man solange den Behälter injizieren. Es ergibt keinen Sinn, das zu tun. Und in diesem Fall wird der ComandaController irgendwo ohne den Container erstellt. Daher hat der Fehler. – Cerad

Antwort

2

Laut Symfony-Dokumentation wird die Definition von Controllern als Dienste von Symfony nicht offiziell empfohlen. Obwohl, wenn Sie brauchen, können Sie das tun. Gemäß Ihrem Code haben Sie das Service-Container-Objekt im Service nicht übergeben. Bitte führen Sie die folgenden Änderungen durch und versuchen Sie es.

In Ihrem services.yml Datei

services: 
    categorias.ativas: 
     class: AppBundle\Controller\AccessClassController 
     arguments: ["@service_container"] 

Und in Ihrer AccessClassController Datei

namespace AppBundle\Controller; 
use Symfony\Bundle\FrameworkBundle\Controller\Controller; 

class AccessClassController extends Controller{ 

    /** 
    * Retorna todas as categorias ativas 
    */ 
    public function CategoriasAtivasAction() 
    { 
    $em = $this->container->get('doctrine')->getManager(); 

    $categorias = $em->getRepository('AppBundle:Categoria')->findByAtivo(1); 

    return $categorias; 
    } 
}