2012-03-02 20 views
7

Khi gọi một hàm trong quan điểm của tôi/người giúp đỡ/ tập tin, từ kịch bản của tôi bên views/scripts/, tôi nhận được lỗi này:Zend Framework - plugin bằng tên không được tìm thấy trong registry

Message: Plugin by name 'SetBlnCompany' was not found in the registry; used paths: My_View_Helper_: /www/zendserver/htdocs/development/application/views/helpers/ Zend_View_Helper_: Zend/View/Helper/:/www/zendserver/htdocs/development/application/views/helpers/

bootstrap.php

protected function _initConfig() 
{  
    Zend_Registry::set('config', new Zend_Config($this->getOptions())); 
    date_default_timezone_set('America/Chicago'); 
} 

protected function _initAutoload() {  
    $autoloader = new Zend_Application_Module_Autoloader(array(    
     'namespace' => 'My',    
     'basePath' => dirname(__FILE__),  
    )); 
    return $autoloader; 
} 

application.ini

resources.view.helperPath.My_View_Helper = APPLICATION_PATH "/views/helpers" 

application/views/giúp đỡ/DropdownHelper.php

class Zend_View_Helper_Dropdownhelper extends Zend_View_Helper_Abstract 
{ 
    public $blnCompany = false; 

    public function getBlnCompany() { 
     return $this->blnCompany; 
    } 

    public function setBlnCompany($blnCompany) { 
     $this->blnCompany = $blnCompany; 
    } 
} 

kịch bản gây ra lỗi

<?php 
    $this->setBlnCompany(true); 
    //...etc... 
?> 

EDI T để thêm thông tin cơ bản về bài đăng của tôi. Lý tưởng nhất là tôi sẽ sử dụng lớp "helper dropper" này, để có chức năng "get html" một hàm cho "get javascript", và nhiều hàm setter để thiết lập các tùy chọn trước khi getHtml và getJavascript được gọi.

+0

Chỉ cần thông tin, bất kỳ lớp nào bạn tạo không thuộc ZF đều không được bắt đầu bằng 'Zend_'. Nó sẽ làm cho ai đó nghĩ rằng trợ giúp xem của bạn thực sự được xây dựng thành ZF và thêm một tra cứu thêm cho trình nạp tự động. 'Lưu ý: Quan trọng: Mã phải được triển khai cùng với thư viện Zend Framework nhưng không phải là một phần của thư viện chuẩn hoặc bổ sung (ví dụ: mã ứng dụng hoặc thư viện không được phân phối bởi Zend) không được bắt đầu bằng" Zend_ "hoặc" ZendX _ ". Xem [Zend Framework - Quy ước đặt tên] (http://framework.zend.com/manual/en/coding-standard.naming-conventions.html) – drew010

Trả lời

8

Người trợ giúp của bạn phải có cùng tên so với phương pháp của bạn. Thay đổi Zend_View_Helper_Dropdownhelper thành Zend_View_Helper_GetBlnCompany và nó sẽ hoạt động. Đừng quên để thay đổi tên tập tin của bạn quá: GetBlnCompany.php

Để sử dụng một phương pháp proxy, bạn chỉ cần return $this;:

// /application/views/helpers/helpers/GetBlnCompany.php 
class Zend_View_Helper_GetBlnCompany extends Zend_View_Helper_Abstract 
{  
    public function getBlnCompany() 
    { 
     return $this; 
    } 

    public function fooBar($blnCompany) 
    { 
     return ucfirst($blnCompany); 
    } 
} 

Sau đó, bạn cần phải gọi xem helper của bạn như theo dõi:

$this->getBlnCompany()->fooBar('google'); 
//return "Google" 
+0

để người trợ giúp chỉ có thể có một chức năng có thể sử dụng công khai? – adam

+0

Không, bạn cũng có thể sử dụng chức năng proxy, hãy để tôi chỉnh sửa câu trả lời của mình. – Liyali

+0

cảm ơn. Lý tưởng nhất là tôi sẽ sử dụng lớp "helper dropdown" này, để có một hàm cho "get html" một hàm cho "get javascript", và nhiều hàm setter để thiết lập các tùy chọn trước khi getHtml và getJavascript được gọi. – adam