2017-02-28 2 views
2

I Ich möchte einen Parameter von parameter.yml lesen. die Lösung ist, den Controller zu verlängern, aber ich habe diesen Fehler:Symfony: Lesen von parameter.yml von außerhalb eines Controllers

Error: Call to a member function getParameter() on null 

Ich weiß, dass der Behälter leer ist, aber ich weiß nicht, wie die Behälter zu bekommen?

Irgendeine Lösung? Irgendeine Hilfe ?

+0

http://symfony.com/doc/current/service_container.html lesen Sie die Dokumentation, die Sie Ihre am – Shefali

Antwort

5

In Klassen, die sich erweitern Controller Aufruf $this->container->getParameter('a') ist möglich, weil Container in solche Klassen injiziert wird. Wenn Sie in einer anderen Klasse sind, müssen Sie den gewünschten Parameter durch defining your class as a service injizieren.

Ihre Service-Definition wird in etwa so aussehen:

services: 
    class: App\Your\FooClass 
    arguments: 
     - %a% 

Hinweis % - es ist Sonderzeichen Parameter zu injizieren

Dann wird die Klasse wie folgt aussehen:

class FooClass 
{ 
    protected $a; 

    public function __construct($a) 
    { 
     $this->a = $a; 
     //you have your "a" parameter value injected into constructor 
    } 
} 
+0

Dank für die schnelle Hilfe finden, aber ich habe eine statische mmethod in dieser Klasse, die diese Klasse instanziieren: öffentliche statische Funktion getDefaultConfiguration() { if (self :: $ defaultConfiguration === null) { self :: $ defaultConfiguration = new Konfiguration(); } return self :: $ defaultConfiguration; } –

+1

deshalb statische Methoden sind schlecht :) Ich würde empfehlen, mit statischen Methode beenden. Wenn nicht, müssen Sie Ihre 'parameter.yml' manuell parsen und versuchen, den Parameterwert zu extrahieren, aber diese sehr nicht elegante Lösung –

+0

Leider sollte ich dies tun, danke für die Hilfe! –

0

dies keine Best Practice, aber für mich das ist die einzige Lösung :(Weil ich in meinem Code eine statische Methode habe, die die Lochklasse instanziiert. so wird die Lösung sein.

public function __construct() 
{ 
    $this->tempFolderPath = sys_get_temp_dir(); 
    global $kernel; 
    $this->host = $kernel->getContainer()->getParameter('ws_host'); 
} 
Verwandte Themen