Ajax request bez definiranja skripte.php

Jucer, nakon tisucitog puta da ajax request sa php skripte preusmjerujem na neku php metodu, mi dopizd*** vise isti pattern non stop raditi.

Pa sam zakljucio da pisanjem ajax requsta se mora moći odmah zadati koju klasu i metodu će trigirati na serveru i s kojim parametrima…s nebitnošću u kojoj skripti se ta klasa nalazi. I rješio sam to “uspjesno”, pitanje koliko uspješno… Jer ovakav pristup otvara neka sigurnosna pitanja.

Ovim putem bih pitao kako su to riješili popularni frameworci? Recimo ako želite trigirati metodu someclass::method($p1,$p2), koja se nalazi u skripti someclass.php, sto ćete sve morati zadati da dobijete željeni response?

Naravno moras poslati parametre: klasu (mozda i nemaespace), metodu i parametere metode.

Napraviti da autoload funkcija po zadanaim parametrima moze razrjesiti u kojem fajlu se nelazi pozvana klasa.

Kako preko ajaxa ne bi mogle biti pozvane sve metode neke klase mozes dodati nekakv prefix, recimo “ajax”, metodama koje zelis da budu dostupne :

//query string ....?c=ClassName&m=MethodName&params[]=....

   $method = 'ajax' . $MethodName;
   if (method_exists($ClassName, $method))
   {
       return call_user_func_array([$ClassName, $method], $params);
   }
1 Like

Heh, skoro točno tako sam i napravio. Ali me baš zanimalo da li i drugi idu tim smjerom.

Jedino se na prvu nisam sjetio elegantnog načina kako ograničiti koje metode će moći biti trigirane clinet-inputom, i jutros se baš sjetio da mogu dodati neki prefiks u imena metoda koje ajax smije trigirati. :slight_smile:

Jedino što sam drugačije napravio, pošto nisam znao za “call_user_func_array”, pa sam trigirao metode pomoću eval() funkcije…

Pa i ne bas. Drugi idu smjerom razvoja APIa koji i je za tu namjenu.

Da, i drugi idu u tom smjeru.
To je takodjer API.

Ne želiš raditi to što radiš jer ne želiš da netko proizvoljno može poslati request u kojem će odrediti ime klase i ime metode koja će se pozvati.

Ako koristiš neki framework, definiraj rutu/endpoint i kontroler koji će vraćati response.

Korisnik API-ja ne moze pozvati sto hoce, moze pozvati samo metodu kojoj je dodan prefix.
I to je takodjer rutanje.

Ruta u vecini slucajeva radi upravo to, mapira klasu i metodu na request, a u ovisnosti na tip i url requesta.

Što znači da možeš pozvati bilo koju metodu kojoj ime počinje s tim prefiksom.

Tako je.

Kada imas ruter radis nesto kao:

addRoute('get', '/product', 'ProductController@index');
addRoute('delete', '/product', 'ProductController@delete');

U ovom slucaju se koristila konfiguracija, konfigurirano je mapiranje, a sto znaci da moze pozvati bilo koju metodu koja je navedena u konfiguraciji.
Znaci isto kao i u slucaju sa prefiksom, samo sto je prefiks nekakva konvencija a ovaj ruter je konfiguracija.

1 Like

Da, prefix određuje što se može pozvati.
Ovo sa rutanjem me vraća na ono od čega sam pobjegao. Svaki puta dodavati novu rutu za novu metodu, naporno…