2009-11-29 28 views
8

Tôi đang cố gắng triển khai các tuyến đường vào tệp bootstrap của mình bằng mã này;Zend Framework - lấy bộ điều khiển phía trước từ bootstrap?

protected function _initRoutes() 
{ 
    $router = $this->getResource('frontController')->getRouter(); 

    $router->addRoute(
     'profil', 
     new Zend_Controller_Router_Route 
     (
      'profil/:username', 
      array 
      (
       'controller' => 'users', 
       'action' => 'profil' 
      ) 
     ) 
    ); 
} 

nhưng nó không hoạt động kể từ khi tôi nhận được lệnh 'Gọi đến thành viên getRouter() trên đối tượng không phải ...'.

Làm cách nào để lấy bộ điều khiển từ trình khởi động?

Trả lời

7

Tôi tin rằng vấn đề của bạn là nơi mà bạn đang gọi

$this->getResource('frontController')->getRouter() 

tài nguyên FrontController vẫn chưa được khởi tạo.

tôi gọi cùng một phương pháp theo cách này (mà sẽ không làm việc trong Zend Framework 2.0 nhưng làm việc cho bây giờ):

Zend_Controller_Front::getInstance()->getRouter(); 

Hoặc bạn có thể chắc chắn rằng front controller của bạn được khởi tạo như thế này:

$this->bootstrap('FrontController'); 

$front = $this->getResource('FrontController'); 
5

bạn có thể thử:

$front = Zend_Controller_Front::getInstance(); 
$router = $front->getRouter(); 

Và nếu bạn chạy vào bất kỳ vấn đề này chủ yếu là l ikely culprits của bạn:

require_once 'Zend/Controller/Front.php';  
require_once 'Zend/Controller/Router/Route.php'; 
+0

Bạn không phải tự bao gồm các lớp đó do khả năng tự động tải lớp của Zend? Tôi thường tránh điều đó bằng mọi giá. – jackyalcine

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