2017-11-27 8 views
0

ich in einem Projekt mit mehreren Diensten innerhalb Controller auf diese Weise aufgerufen arbeite:

$service = $this->get('myservice'); 

aber ich bemerkte, dass ich ‚myservice‘ in dieser anderen Art und Weise nennen könnte:

$service = $this->container->get('myservice'); 

Dienstleistungen natürlich nutzen DI Beispiel für Service-Deklaration:

myservice: 
     public: true 
     class: path/to/service 
     arguments: 
      - '@someEntityRepository' 

someEntityRepository: 
     class: Doctrine\ORM\EntityRepository 
     factory: ['@doctrine.orm.entity_manager', getRepository] 
     arguments: [path\to\Entity\someEntity] 

gibt es einen Unterschied zwischen diesen nennt? Wenn ja, welche sollte ich verwenden? Warum?

+0

Da es so aussieht, als ob Sie gerade erst angefangen haben, sollten Sie [action injection] verwenden (https://symfony.com/doc/current/controller.html#fetching-services-as-controller-arguments). Brauchen Sie S3.3 +. Macht die ganze Frage irrelevant. – Cerad

+0

Leider arbeite ich in einem Projekt, das in symfony 2.8 ist und ich kann es nicht upgraden (obwohl ich es will) – MatiRC

Antwort

2

Kein Unterschied. Verwenden Sie $this->get(), wenn Sie die Controller-Klasse von Symfony erweitern. Es ist kürzer zu tippen.

$this->get('myservice'); ist eine Abkürzung für $this->container->get('myservice');. Und ist in der Controller-Basisklasse verfügbar (Symfony\Bundle\FrameworkBundle\Controller).

0

Petter hatte Recht über den Unterschied zwischen $ this-get und $ this-> container-> get(), es ist kein Unterschied. Aber Sie werden einen guten Code erstellen, wenn Sie Controller als Dienst definieren und Ihre Dienste über Dependency-Injektionen injizieren. Es fügt mehr Flexibilität und Leistung hinzu.

+0

Ich arbeite derzeit in einem Projekt in symfony 2.8 und als [docs] (https: // symfony .com/doc/2.8/controller/service.html) sagt, es ist nicht zu empfehlen. Aber du bist richtig für neuere Versionen – MatiRC

Verwandte Themen