2012-10-15 19 views
5

Symfony2'yi kullanma.'Üye olmayan bir işlevin çağrısını get() nesnesine' 'çağırın.

 $authenticate = new AuthenticationController(); 
     $authenticate->isTokenValid($token); 

Ve kontrolör isTokenValid yöntemi:

public function isTokenValid($token) { 

    $conn = $this->get('database_connection'); 

hata

atma mı bir dinleyici öylesine gibi farklı bir sınıfın (bir denetleyici) bir yöntemi çağırmak çalışıyor sınıf var
Fatal error: Call to a member function get() on a non-object in /home/content/24/9254124/html/newsite/vendor/symfony/symfony/src/Symfony/Bundle/FrameworkBundle/Controller/Controller.php on line 246 

Denetleyici yöntemini doğru şekilde yüklerseniz (URL'de yönlendirmeyi kullanarak) düzgün çalışır.

+0

testcase afedersiniz @LightnessRacesinOrbit –

+0

gerekli? –

+0

Bunun bir sorunu var mı? –

cevap

7

Symfony2'nin sen (veritabanı bağlantısı gibi) tüm hizmetleri tutan kabı enjekte etmek zorunda, Bağımlılık Enjeksiyon kalıbı kullanır:

Tabii
$authenticate = new AuthenticationController(); 
$authenticate->setContainer($this->container); 
$authenticate->isTokenValid($token); 

Ben senin dinleyici sınıf ContainerAware

[+] olduğunu burada varsayalım (örnek formu services.yml) sizin dinleyici ContainerAware, kendisine @service_container geçmesi yapmak için

my.listener: 
    class: ACME\MyBundle\ListenerController 
    arguments: [ @service_container ] 
    tags: 
     - { name: kernel.event_listener, event: kernel.controller, method: onKernelController } 
    kernel.event_listener: 
     event: kernel.controller 

ve sonra dinleyici sınıfının yapıcısı içinde: daha iyi sadece ihtiyacınız olanları enjekte etmek hemen hemen her durumda:

public function __construct($container = null){ 
    $this->container = $container; 
} 
+0

Aslında, onun muhafazakarlıklarını düşünmüyorum, error 'undefined property: $ container' .. –

+0

editörümün cevabını görmek –

+0

Nice. Ne demek istediğini şimdi anlıyorum. [@service_container] 'literal mı, yoksa bunu bir şeyle mi değiştirmeliyim? Bir konteyner ne anlama geldiğini anlamıyorum .. –

3

Çünkü neyi dev null-sakini @ başka bir yanıt ekliyorum anlaşılacağı kötü bir uygulamadır - tamamı değil konteyner:

use Doctrine\DBAL\Connection; 

public function __construct(Connection $connection) 
{ 
    $this->connection = $connection; 
} 
my_listener: 
    arguments: [ @database_connection ] 
İlgili konular