Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [zend framework] ajax
Forum PHP.pl > Forum > PHP > Frameworki
BartazZ
witam,
pisze aplikacje wykorzystujac zend framework i chcialbym wykorzystac ajaxa do kilku niewielkich spraw.

Przeszukalem internet ale niestety niewiele znalazlem. To co stworzylem do tej pory oparte jest w duzej mierze na artykule Ajax Chat Tutorial ze strony http://devzone.zend.com/article/1581-Ajax-Chat-Tutorial

Tak naprawde problem sprawilo mi odswierzanie zawartosci np. div'a zamieszczonego na stronie poprzez ajax.

Poczatkowo myslalem ze uda zrobic sie to poprzez stworzenie akcji np. w kontrolerze Index

  1. <?php
  2. function odswierzDivAction() {
  3.           $id = (int)$this->_request->getParam('id', 0);
  4.           $tab = new Tabela();
  5.           $zwroc = '...';
  6.           return $zwroc;
  7.   }
  8. ?>


Nastepnie w zapytaniu ajaxa podac url w postaci http://domena.pl/index/odswierzDiv oraz ew. dodatkowe parametry.

Nastepnie w javascript wstawic w div'a to co zwrocila nam nasza akcja np. tak jak ponizej

  1. <?php
  2. $('id_diva').innerHTML = reply.responseText;
  3. ?>


Niestety to nie zadziala gdyz akcja wymaga pliku widoku. Nawet jak stworzymy dla niej plik widoku to po prostu aplikacja "upycha" w diva caly plik widoku a nie tylko to co zwraca nam akcja odswierzDiv(w rzeczywistosci jest to troche tekstu).


Ostatecznie wymyslilem to tak ze w katalogu public utworzylem katalog w ktorym nie ma ustawionych przekierowan(takich jak zalecane przy uzywaniu zf) i w tym katalogu znajduje sie plik php, ktory wykonuje zapytanie do bazy i zwracam mi to co chcialem. Rozwiazanie dziala ale wydaje mi sie to dosc nie eleganckie i wystajace poza Zend Framework.


Czy ma ktos lepsze pomysly na rozwiazanie mojego problemu? Wszelkie materialy na temat ZF i Ajax(rowniez w jezyku ang) mile widziane.
tiraeth
Mogę polecić Ci dokumentację Zend Framework 1.6. Wykorzystaj zintegrowaną bibliotekę Dojo do zapytań AJAX. W sumie, to w dokumentacji masz wszystko pięknie opisane (tak, trzeba trochę pomyśleć, gotowca tam nie ma). Osobiście z Dojo w ZF jeszcze nie korzystałem, ale podobno jest tam nieźle zintegrowany (z helperami, filtrami itp. itd.).
chlebik
Oj przeciez to mozna zrobic o wiele latwiej. Ja uzywam zaproponowanego przez Ciebie rozwiazania, zas problem zwracania calej akcji (kodu HTML) rozwiazuje prosto:


Kod
$this->_helper->layout()->disableLayout();
$this->view->setNoRender();


I w tym momencie ani layout ani akcja nie sa renderowane zas zwracac mozesz sobie co tylko chcesz. Jest to super rozwiazanie jesli np. nie zalezy ci na szybkosci tej operacji (np. jesli tworzysz cos a la backend czy aplikacja intranetowa). Jednakze ladowanie za kazdym razem calej maszynerii Zenda jest zasobo- i czasozerne zatem dobrze jest wlasnie zrobic sobie katalog z plikami PHP, ktore obsluguje AJAXowe zadania. U mnie w fimie nazwano go 'Raw' i tam lezy czysty kod PHP. W ten sposob dzialajacy kod jest o niebo szybszy niz ten oparty na ZF.
pejotr
a można wiedzieć jak to robisz że tego odwołania do pliku jakisplik.php nie interpretuje Ci jako kontrolera?
chlebik
Ustawienia w .htaccessie.
BartazZ
chlebik rozwiazalem to dokladnie tak jak piszesz ze robisz to u siebie w firmie ale niestety wada tego jest to ze w tym jedenym katalogu nie ma ustawionego routingu i nie mozna tam skorzystac chociazby z Zend_Db
sokzzuka
ja do ajaxu korzystam z Zend_Server_Json, nasluch mam ustawiony na jeden z akcji kontrolera, podpinam do niego tylko odpowiednie klasy i wszystko smiga smile.gif, po stronie klienta korzystam z dojo.json.rpc, bardzo czyste i eleganckie rozwiazanie smile.gif
BartazZ
Cytat(sokzzuka @ 24.09.2008, 10:01:00 ) *
ja do ajaxu korzystam z Zend_Server_Json, nasluch mam ustawiony na jeden z akcji kontrolera, podpinam do niego tylko odpowiednie klasy i wszystko smiga smile.gif, po stronie klienta korzystam z dojo.json.rpc, bardzo czyste i eleganckie rozwiazanie smile.gif

mozesz polecic do tego jakies artykuly/tutoriale? czy sam wszystko zrobiles na podstawie dokumentacji?
sokzzuka
siema, sorka ze dopiero co odpisuje, nie zagladalem cos na forum, dam ci samplowy kod:

klasa:

  1. <?php
  2. class JakasKlasa {
  3.  
  4. /* opis funkcji czy kto tam co tam chce
  5. * @param arg1 integer
  6. *@param arg2 integer
  7. *@return string
  8. */
  9.  
  10.  
  11.     public function JakasFunkcja(arg1,arg2){
  12.       return 'aaaa';
  13.  }
  14.  
  15. }
  16. ?>


kontroler:

  1. <?php
  2. class IndexController extends Zend_Controller_Action {
  3.    
  4.    function indexAction (){
  5.        header('Content-type: text/html; charset=utf-8');    
  6.    }
  7.    
  8.    function jsonrpcAction(){
  9.        $server = new Zend_Json_Server();
  10.        $server->setClass('JakasKlasa');
  11.        
  12.        if ('GET' == $_SERVER['REQUEST_METHOD']) {
  13.            $server->setEnvelope(Zend_Json_Server_Smd::ENV_JSONRPC_1);
  14.            
  15.            $smd = $server->getServiceMap();
  16.            $smd->setDojoCompatible(true);
  17.            $smd->setTransport('POST');
  18.            
  19.            $smd->setTarget('adres do tej akcji kontrolera');
  20.            
  21.            $this->view->response = $smd;
  22.        } else {
  23.            $this->view->response = $server->handle();
  24.        }
  25.    }
  26. }
  27. ?>


widok do akcji jsonrpc

  1. <?php
  2. echo $this->response;
  3. ?>


javascript przy uzyciu bibliotek dojo:

  1. <?php
  2. dojo.require('dojo.rpc.JsonService');
  3.  
  4. function getService (){
  5.        var url = location.href+'/index/jsonrpc';
  6.        return new dojo.rpc.JsonService(url);
  7.    }
  8.  
  9. var api = getService();
  10.  
  11. //uzycie
  12.  
  13. var result = api.JakasFunkcja(arg1,arg2);
  14. result.addCallback(
  15.       function(msg){
  16.          alert(msg)
  17.       }
  18. );
  19. ?>



zwroc uwage ze przy kazdej funkcji ktora chcesz udostepniac z klasy 'JakasKlasa' musisz napisac phpDoc tak jak w przykladzie inaczej server nie bedzie w stanie odpowiednio przetworzyc argumentow i dac oczekiwanej odpowiedzi

enjoi winksmiley.jpg


a i tutorial tez jest

http://dustint.com/archives/20

btw. zeby skorzystac z Zendowego jsonrpc musisz miec co najmniej wersje 1.6 frameworku, albo skopiowac z niej katalog JSON
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.