Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [ZendFramework] Helpery - konfiguracja i praktyczne zastosowanie. Co i jak?
Forum PHP.pl > Forum > PHP > Frameworki
Sajrox
Witam ponownie winksmiley.jpg

Kolejna nie przespana noc i kolejny problem sad.gif Helpery. Z dokumentacji za dużo nie wynika, Brak praktycznych przykladów z których można by było skorzystać.

Chciałbym prosić o opis jak można zaczać korzystać z helpera.

Powiedzmy że klasy Helperów umieszczam w katalogu:
/application/assistant/helpers/

Do załadowania helperów użyłem:
  1. Zend_Controller_Action_HelperBroker::addPath(APPLICATION_PATH.'/assistant/helpers', 'MyHelper');


Kod helpera:
  1. require_once 'Zend/Controller/Action/Helper/Abstract.php';
  2.  
  3. class MyHelper extends Zend_Controller_Action_Helper_Abstract
  4. {
  5. public function my_test()
  6. {
  7. echo 'TEST TEST TEST TEST TEST';
  8. exit();
  9. }
  10. }



teraz w IndexController.php chciałbym użyć tego helpera (metody my_test()) i niewiem jak, w ogóle niewiem czy dobrze skonfigurowałem Zenda do tego by używac helperów.

MOże macie koledzy jakieś strony z artukułami lub może ktoś sam będzie w stanie poprowadzić za raczkę ?


seth-kk
po pierwsze warto symulowac namespace w nazwie klasy - dzieki temu mozesz zrobic cos takiego
  1. Zend_Controller_Action_HelperBroker::addPrefix('My_Action_Helpers');

i dodac caly namespace a nie tylko pojedyncze helpery - szczegoly tutaj
poza tym warto zadbac o to zeby helper mial zaimplementowana metode direct() - dzieki temu bedziesz mogl sie do niego odwolac tak
  1. $this->_helper->myHelper();

o czym wiecej tutaj
Sajrox
Niestety kod:
  1. Zend_Controller_Action_HelperBroker::addPath('helpers', 'Helpers');

Nie chce działać :/ Nie odnajduje mi helpera mojego. Działa dopiero z:
  1. $layout = Zend_Layout::startMvc();
  2. $view_obj = $layout->getView();
  3.  
  4. $view_obj->addHelperPath('helpers', 'Helpers');


Czy po prostu podaje złą ścieżke questionmark.gif

Helper mam w
/application/assistant/helpers/My.php

# Include path
  1. '.'
  2. . PATH_SEPARATOR . BASE_PATH.'/library'
  3. . PATH_SEPARATOR . APPLICATION_PATH.'/assistant'
  4. . PATH_SEPARATOR . APPLICATION_PATH.'/assistant/helpers'
  5. . PATH_SEPARATOR . APPLICATION_PATH.'/models'
  6. . PATH_SEPARATOR . APPLICATION_PATH.'/models/DbClasses'
  7. . PATH_SEPARATOR . APPLICATION_PATH.'/models/DbClasses/generated'
  8. );


Jak daje
  1. $helper = new Helpers_My();

To nie widzi tego pliku chociaż że w set_include_path dodałem ściezkę do helperów. Klasa Helpera

  1. class Helpers_My extends Zend_Controller_Action_Helper_Abstract
  2. {
  3. public function test()
  4. {
  5. echo die('TEST HELPER');
  6. }
  7. }



Czy podaję złą ścieżke ? Przepraszam że tak się dopytuje, ale każdy kiedyś zaczynał
 
seth-kk
nie bardzo chce mi sie rozgryzac twoje podejscie (tez niedawno zaczynalem z zendem;) )
ale czy nie porsciej w include_path trzymac tylko sciezke do liba, w libie obok folderu Zend stworzyc wlasny w ktorym bedziesz trzymal wlasne klasy np
lib/
/Zend
/Seth
/Helpers
/MyHelper.php
/Validators
/etc...
a nastepnie gdzies w kodzie (np w bootstrapie)
  1. Zend_Controller_Action_HelperBrocker::addPrefix('Seth_Helpers');

MyHelper.php
  1. class Seth_Helper_MyHelper extends Zend_Controller_Action_Helper_Abstract
  2. {
  3. public function direct($val)
  4. {
  5. return 'Dancing ' . $val;
  6. }
  7. }

i w controllerach
  1. ...
  2. public function indexAction()
  3. {
  4. ...
  5. $whosDancing = $this->_helper->myHelper('me');
  6. ...
  7. }
  8. ...
Sajrox
Faktycznie działa smile.gif

Opisze dla potomnych. Może komuś się przyda.

Lokalizacja helperów:
| /library
| /MyApp
| /Helpers
| MyHelper.php


MyHelper.php
  1. class MyApp_Helpers_MyHelper extends Zend_Controller_Action_Helper_Abstract
  2. {
  3. public function direct()
  4. {
  5. return $this;
  6. }
  7.  
  8. public function mojaFukcja($val='')
  9. {
  10. die('TEST HELPER -> Ma na imię: '.$val);
  11. }
  12. }


W Initializer.php (coś jak Bootstrap.php, po kolei ładuje różne części aplikacji), można to wstawić w Bootstrapie.php
  1. ...
  2. /**
  3.   * Inicjacja helperów
  4.   * @return void
  5.   */
  6. public function initHelpers()
  7. {
  8. Zend_Controller_Action_HelperBroker::addPrefix('MyApp_Helpers');
  9. }
  10. ...


IndexController.php
  1. ...
  2. $this->_helper->MyHelper()->mojaFukcja('Slawek');
  3. ...


Include path: (index.php)
  1. '.'
  2. . PATH_SEPARATOR . BASE_PATH.'/library'
  3. . PATH_SEPARATOR . APPLICATION_PATH.'/configs'
  4. . PATH_SEPARATOR . APPLICATION_PATH.'/models'
  5. . PATH_SEPARATOR . APPLICATION_PATH.'/models/DbClasses'
  6. . PATH_SEPARATOR . APPLICATION_PATH.'/models/DbClasses/generated'
  7. );
seth-kk
mniejwiecej ale direct() na ogol lepiej wykozystywac jako metode niz zamiennik getInstance()
Sajrox
NO własnie nie mog e rozgryźc jak uzyć tego directa poprawnie. próbuje sprawdzać inne klasy Helperów w Zendzie ale za dużlo to nie mówi.




Może jakiś przykład jak Ty to rozwiązałeś ?

seth-kk
tak, ewentualnie jesli helper ma wiele metod to warto wzorowac sie np na Zend_Controller_Action_Helper_ViewRenderer
jesli to nadal zamalo to podaj konkretniejszy przyklad
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.