2010-02-25 35 views
19

Tôi bắt đầu với ZF (1.9.7) và tôi muốn sử dụng Trình xem trợ giúp từ thư viện được chia sẻ giữa tất cả các dự án của tôi. Nhưng tôi không thể tìm cách thêm thư mục vào đường dẫn người trợ giúp. My herpers làm việc phạt tiền khi tôi đặt chúng trong con đường giúp đỡ của ứng dụng.Cách thêm thư mục trình trợ giúp xem (khung công tác zend)

Đây là lỗi, nơi tôi tìm đường dẫn đến người trợ giúp ZF và đường dẫn đến ứng dụng.

object(ArrayObject)#71 (3) { 
    ["exception"]=> 
    object(Zend_Loader_PluginLoader_Exception)#70 (6) { 
    ["message:protected"]=> 
    string(151) "Plugin by name 'Voo' was not found in the registry; used paths: 
Zend_View_Helper_: Zend/View/Helper/;C:/ZendStd/www/applis/VOO4_PROJECTX/views\helpers/" 
    ["string:private"]=> 
    string(0) "" 
    ["code:protected"]=> 
    int(0) 
    ["file:protected"]=> 
    string(89) "C:\Program Files\Zend\ZendServer\share\ZendFramework\library\Zend\Loader\PluginLoader.php" 
    ["line:protected"]=> 
    int(401) 

Trân trọng
Cédric

Trả lời

38

Nó có thể được thực hiện rất dễ dàng với được xây dựng trong tài nguyên Zend_Application cho khung nhìn. Nếu bạn đang sử dụng cấu hình ini, hãy thêm một dòng như sau:

resources.view.helperPath.My_View_Helper = "My/View/Helper" 

Phần cuối của khóa là tiền tố tên lớp và giá trị đường dẫn nơi chúng cư trú.

+0

Cảm ơn bạn rất nhiều bạn đã cứu tôi 5 giờ –

11

đường Helper được bổ sung thông qua Zend_View_Abstract::addHelperPath(). Bạn có thể gọi phương thức này trực tiếp trên một cá thể View hiện có.

Đường dẫn trình trợ giúp cũng có thể được định cấu hình theo nhiều cách khác nhau trong quá trình khởi động. Kiểm tra hướng dẫn chương ZF trên Zend_Application để xem làm thế nào để sử dụng các lớp học và các nguồn lực Bootstrap:

+1

Mặc dù tất cả các tùy chọn này là chính xác, và sẽ làm việc, tôi cảm thấy 'cái application.ini' giải pháp được đề xuất bởi David là "thực hành tốt nhất" . Ngoài ra, trong "_initView()" của bạn, bạn có thể sử dụng '$ this-> bootstrap ('view'); $ view = $ this-> getResource ('view'); 'để sử dụng khung nhìn application.ini thay vì bạn tạo ngẫu nhiên ... – gnarf

+0

@gnarf với ngoại lệ' addHelperPath() ', ví dụ bootstrap được sao chép 1 : 1 từ hướng dẫn tham khảo ZF. Nó không nên được thực hiện như bất cứ điều gì khác, nhưng một ví dụ. Tôi biết rõ có nhiều cách khác nhau để thực hiện điều đó (ví dụ: sử dụng Ini). Hãy làm điều đó khác đi. – Gordon

1

EDIT: Kiểm tra view helper in zend framework cho một mất chi tiết hơn về vấn đề này bằng view helper Loggedinas cướp allen của.

Bạn không chỉ có thể làm theo quy định của David Caunt, nhưng bạn cũng có thể làm điều đó như thế này trong bootstrap của bạn. Chú ý luôn luôn có nhiều hơn một cách để làm bất cứ điều gì trong Zend Framework

Check-out http://devzone.zend.com/article/3412

Nếu bạn có quyền truy cập vào các đối tượng xem, làm như sau.

<?php  
$view->addHelperPath('My/View/Helper/', 'My_View_Helper'); 
?> 

bạn có thể cần để có được những đối tượng xem nếu bạn ở một plugin front controller

Cũng Kiểm tra bộ này thực sự tuyệt vời của bài viết bắt đầu từ đây:

http://zend-framework-community.634137.n4.nabble.com/Getting-view-from-Bootstrap-ZF1-8-tp659447p659460.html

5

Có một vấn đề khi sử dụng

resources.view.helperPath.App_View_Helper = APPLICATION_PATH "/../library/App/views/helpers" 

Tôi có thể truy cập không xem elper trong bố trí ngay cả những người trợ giúp địa phương trong mô-đun.(Plugin theo tên 'LoggedInAs' không được tìm thấy trong sổ đăng ký) nhưng vẫn hoạt động trong các tệp mẫu lượt xem.

Tôi đặt mã này "echo Zend_Debug :: dump ($ this)" ở cuối tệp bố cục và có một phần của đầu ra.

 ["_prefixToPaths:protected"] => array(3) { 
      ["Zend_View_Helper_"] => array(2) { 
      [0] => string(17) "Zend/View/Helper/" 
      [1] => string(16) "./views\helpers/" 
      } 
      ["ZendX_JQuery_View_Helper_"] => array(1) { 
      [0] => string(25) "ZendX/JQuery/View/Helper/" 
      } 
      ["Zend_View_Helper_Navigation_"] => array(1) { 
      [0] => string(28) "Zend/View/Helper/Navigation/" 
      } 
     } 

nhưng khi sử dụng các mã này trong tệp bootstrap thì không có vấn đề gì.

//Initialize and/or retrieve a ViewRenderer object on demand via the helper broker 
    $viewRenderer = Zend_Controller_Action_HelperBroker::getStaticHelper('viewRenderer'); 
    $viewRenderer->initView(); 
    //add the global helper directory path 
    $viewRenderer->view->addHelperPath(APPLICATION_PATH.'/../library/App/views/helpers', 'App_View_Helper'); 

đầu ra là như dưới đây:

  ["_prefixToPaths:protected"] => array(4) { 
       ["Zend_View_Helper_"] => array(3) { 
       [0] => string(17) "Zend/View/Helper/" 
       [1] => string(16) "./views\helpers/" 
       [2] => string(86) "D:/zf/application/modules/default/views\helpers/" 
       } 
       ["App_View_Helper_"] => array(1) { 
       [0] => string(85) "D:\zf\application/../library/App/views/helpers/" 
       } 
       ["ZendX_JQuery_View_Helper_"] => array(1) { 
       [0] => string(25) "ZendX/JQuery/View/Helper/" 
       } 
       ["Zend_View_Helper_Navigation_"] => array(1) { 
       [0] => string(28) "Zend/View/Helper/Navigation/" 
       } 
      } 
+0

Giải pháp của bạn hoạt động như một sự quyến rũ! Tôi đã sử dụng người trợ giúp cho toàn bộ ứng dụng và người trợ giúp cho từng mô-đun! Đây là những gì tôi đang tìm kiếm! ;) –

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