2012-05-07 24 views
15

Tôi muốn biết liệu tôi có đang sử dụng app_dev.php từ bên trong trình nghe (thiết lập dưới dạng dịch vụ trong config.yml) hay không. Nó thất bại tại getEnvironment() mặc dù đây là phương pháp tôi sử dụng trong bộ điều khiển.Symfony2 nhận môi trường hiện tại trong trình nghe phản hồi

public function onKernelResponse(FilterResponseEvent $event) { 
    $kernel = $event->getKernel(); 
    $this->isAppDev = ($kernel->getEnvironment() == "dev") ? true : false; 
} 

Sửa Giải pháp: Trong lớp người nghe tôi:

use Symfony\Component\HttpFoundation\Response; 
use Symfony\Component\HttpKernel\Event\FilterResponseEvent; 
use Symfony\Component\HttpKernel\Kernel; 
private $kernel; 
public function __construct(Kernel $kernel) { 
    $this->kernel = $kernel 
} 
public function onKernelResponse(FilterResponseEvent $event) { 
    $this->isAppDev = ($this->kernel->getEnvironment() == "dev") ? true : false; 
} 

Ở dưới cùng của config.yml:

services: 
    my.listener: 
     class: Path\To\Listener 
     tags: 
      - { name: kernel.event_listener, event: kernel.response } 
     arguments: [@kernel] 

Trả lời

19

$event->getKernel() trả về một đối tượng mà thực hiện HttpKernelInterface. Trong khi đó, Kernel hoặc AppKernel thực hiện KernelInterface có phương pháp getEnvironment. Bạn phải tiêm dịch vụ @kernel trong trình nghe của bạn.

+1

Cảm ơn, đã sửa đổi câu hỏi của tôi để hiển thị các bước đó. – ojreadmore

+0

@ojreadmore 1+ bờm! – mate64

Các vấn đề liên quan