8 Stimmen

Symfony Container in einem EntityRepository abrufen

Ich habe eine Variable in parameters.ini gesetzt, aber jetzt möchte ich diese Variable aus einem EntityRepository abrufen und $this->container ist nicht gesetzt, also kann ich es nicht tun

Wie komme ich zu dem Container?

Danke :)

10voto

Felipe Buccioni Punkte 18085

Bro, Symfony manchmal oder viele Male ist ein Kopfschmerz, hier ist ein hacky Weg, ist nicht die richtige wie die @Tuong Le Antwort, sondern ist ein Horror tun eine Menge für nur eine Variable wie war sagt @keyboardSmasher.

Am Anfang der Funktion/Methode:

global $kernel;
if($kernel instanceOf \AppCache) $kernel = $kernel->getKernel();

Sie können also auf einen Container mit

$kernel->getContainer();

Ich hoffe, das gibt Ihnen Zeit für einen Spaziergang im Park =),

9voto

Tuong Le Punkte 17454

Sie sollten $container nicht im EntityRepository verwenden. Erstellen Sie stattdessen einen Model Manager-Dienst und injizieren Sie den Container über DI.

5voto

aTTozk Punkte 127

Wenn Sie versuchen, von der EntityRepository-Klasse aus auf DBAL zuzugreifen, können Sie $this->getEntityManager()->getConnection() verwenden, um es zu erhalten.

Ex:

class CustomRepository extends EntityRepository
{
    public function myCustomFunction()
    {
        $conn = $this->getEntityManager()->getConnection();
        $stmt = $conn->query($sql);
        if ($stmt)
        {
            while ($row = $stmt->fetch())
                var_dump($row);
        }             
    }
}

1voto

Juan Sosa Punkte 5252

Sie können Ihre Variable wie gewohnt vom Controller abrufen und sie an das EntityRepository übergeben, wenn Sie eine benutzerdefinierte Repository-Methode definieren. Zum Beispiel:

public function findAllOrderedByFoo($your_variable)
{
    //use $your_variable here

    return $this->getEntityManager()
        ->createQuery(  your SQL here   )
        ->getResult();
}

1voto

nnscr Punkte 11

Wenn Sie wirklich nur ein Argument an den Dienst übergeben müssen, können Sie es einfach übergeben, ohne einen Manager zu benötigen, wie:

services:
    your_service:
        class: YourServiceClass
        arguments: [%some.parameter%]

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X