2010-02-25 13 views
19

Zaczynam od ZF (1.9.7) i chcę używać View Helpers z biblioteki współużytkowanej pomiędzy wszystkimi moimi projektami. Ale nie mogę znaleźć sposobu dodania katalogu do ścieżki pomocy. Moje herpery działają z karami, kiedy umieszczam je na ścieżce pomocników aplikacji.Jak dodać katalog pomocnika widoku (zend framework)?

Oto błąd, w którym znajduję ścieżkę do pomocników ZF i ścieżkę do aplikacji.

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) 

poważaniem
Cédric

Odpowiedz

38

można to zrobić bardzo łatwo wbudowany zasób Zend_Application dla widoku. Jeśli używasz ini configs, dodać linię tak:

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

Koniec kluczem jest nazwa klasy przedrostek i wartości ścieżki od miejsca zamieszkania.

+0

Dziękuję bardzo, uratowałeś mnie 5 godzin –

11

ścieżki pomocnicze są dodawane przez Zend_View_Abstract::addHelperPath(). Możesz wywołać tę metodę bezpośrednio w istniejącej instancji View.

Ścieżki pomocnicze można również konfigurować na różne sposoby podczas ładowania początkowego. Sprawdź instrukcja rozdział ZF na Zend_Application, aby zobaczyć, jak używać klas i zasobów bootstrap:

+1

Chociaż wszystkie te opcje są poprawne, i będzie działać, czuję 'application.ini' rozwiązanie sugerowane przez Dawida za„najlepszych praktyk” . Ponadto w twoim "_initView()" możesz użyć '$ this-> bootstrap ('view'); $ view = $ this-> getResource ('view'); 'aby użyć widoku application.ini zamiast jednego, który tworzysz losowo ... – gnarf

+0

@gnarf z wyjątkiem' addHelperPath() ', przykład bootstrap jest kopiowany 1 : 1 z przewodnika referencyjnego ZF. Nie powinno być traktowane jako coś innego niż przykład. Doskonale zdaję sobie sprawę, że istnieją różne sposoby, aby to zrobić (np. Używając Ini). Możesz to zrobić inaczej. – Gordon

1

EDIT: Sprawdź view helper in zend framework do bardziej szczegółowego spojrzenia na ten problem stosując rob Allena Loggedinas widok pomocnika.

Nie tylko można zrobić tak, jak zostało to określone przez Davida Caunta, ale można to również zrobić w swoim bootstrapie. Uwaga zawsze jest więcej niż jeden sposób, aby zrobić coś w Zend Framework

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

Jeśli masz dostęp do obiektu widoku, wykonaj następujące czynności.

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

może trzeba uzyskać obiekt podgląd Jeśli w przedniej wtyczce sterownika

Sprawdź też się to naprawdę wielki zestaw stanowisk począwszy tutaj:

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

5

Jest problem podczas korzystania z

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

Mogę uzyskać dostęp bez widoku h elper w układzie nawet lokalnych pomocników w module.(Wtyczka o nazwie "LoggedInAs" nie została znaleziona w rejestrze), ale nadal działa w plikach szablonów widoków.

Umieszczam ten kod "echo Zend_Debug :: dump ($ this)" na końcu pliku układu i jest część wyjścia.

 ["_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/" 
      } 
     } 

ale podczas korzystania z tych kodu w pliku bootstrap nie ma problemu.

//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'); 

wyjście było jak poniżej:

  ["_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

Twoje rozwiązanie działało jak czar! Używałem pomocników dla całej aplikacji i pomocników dla każdego modułu! Tego właśnie szukałem! ;) –