Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [zend framework] ajax
BartazZ
post
Post #1





Grupa: Zarejestrowani
Postów: 23
Pomógł: 0
Dołączył: 16.10.2004

Ostrzeżenie: (10%)
X----


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.
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 8)
tiraeth
post
Post #2





Grupa: Przyjaciele php.pl
Postów: 1 789
Pomógł: 41
Dołączył: 30.10.2003
Skąd: Wrocław

Ostrzeżenie: (0%)
-----


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.).
Go to the top of the page
+Quote Post
chlebik
post
Post #3





Grupa: Zarejestrowani
Postów: 113
Pomógł: 5
Dołączył: 12.09.2006
Skąd: Pruszków/Warszawa

Ostrzeżenie: (0%)
-----


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.
Go to the top of the page
+Quote Post
pejotr
post
Post #4





Grupa: Zarejestrowani
Postów: 16
Pomógł: 0
Dołączył: 21.08.2007

Ostrzeżenie: (0%)
-----


a można wiedzieć jak to robisz że tego odwołania do pliku jakisplik.php nie interpretuje Ci jako kontrolera?
Go to the top of the page
+Quote Post
chlebik
post
Post #5





Grupa: Zarejestrowani
Postów: 113
Pomógł: 5
Dołączył: 12.09.2006
Skąd: Pruszków/Warszawa

Ostrzeżenie: (0%)
-----


Ustawienia w .htaccessie.
Go to the top of the page
+Quote Post
BartazZ
post
Post #6





Grupa: Zarejestrowani
Postów: 23
Pomógł: 0
Dołączył: 16.10.2004

Ostrzeżenie: (10%)
X----


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
Go to the top of the page
+Quote Post
sokzzuka
post
Post #7





Grupa: Zarejestrowani
Postów: 22
Pomógł: 0
Dołączył: 9.12.2005

Ostrzeżenie: (0%)
-----


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 (IMG:http://forum.php.pl/style_emoticons/default/smile.gif) , po stronie klienta korzystam z dojo.json.rpc, bardzo czyste i eleganckie rozwiazanie (IMG:http://forum.php.pl/style_emoticons/default/smile.gif)
Go to the top of the page
+Quote Post
BartazZ
post
Post #8





Grupa: Zarejestrowani
Postów: 23
Pomógł: 0
Dołączył: 16.10.2004

Ostrzeżenie: (10%)
X----


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 (IMG:http://forum.php.pl/style_emoticons/default/smile.gif) , po stronie klienta korzystam z dojo.json.rpc, bardzo czyste i eleganckie rozwiazanie (IMG:http://forum.php.pl/style_emoticons/default/smile.gif)

mozesz polecic do tego jakies artykuly/tutoriale? czy sam wszystko zrobiles na podstawie dokumentacji?
Go to the top of the page
+Quote Post
sokzzuka
post
Post #9





Grupa: Zarejestrowani
Postów: 22
Pomógł: 0
Dołączył: 9.12.2005

Ostrzeżenie: (0%)
-----


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 (IMG:http://forum.php.pl/style_emoticons/default/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

Ten post edytował sokzzuka 3.10.2008, 01:02:04
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
2 Użytkowników czyta ten temat (2 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 24.08.2025 - 10:45