Newsgroup: it.comp.www.php
Titolo: richiamare controller tramite url

ho creato questo controller
 
class test_controller{
function prova(){
echo $_GET['parametro'];
}
}
 
C'� un modo per richiamarlo digitando un url di questo tipo:
http://www.sito.it/test/prova/generale
 
 
dove:
'test' � il nome del controller
'prova' � l'azione (il metodo)
'generale' � il parametro
 
Naturalmente leggendo qua � la ho visto che si tratta del sistema di 
routing usato da molti framework, e volevo realizzarne uno costruito da me.
 
Ho visto molti esempi.
In alcuni bisogna impostare opportunamente il file .htaccess...
Altri invece fanno uso di alcune classi "router"...
 
Insomma sono un po' disorientato, � vorrei qualche consiglio da dove 
partire.


Dovresti impostare l'URL rewrite nel file htaccess in modo che venga 
invocata una tua pagina (ad esempio una index.php) e riportare i 
parametri sulla URL digitata nella GET.
 
Quindi parti da una URL digitata del tipo
 
http://www.sito.it/test/prova/generale
 
 
per ottenere quello che viene passato ad apache (la URL "sporca"):
 
http://www.sito.it/index.php?controller=test&metodo=prova&parametro=generale
 
 
quindi apache chiamer� index.php con i parametri richiesti
 
 
all'interno di index.php poi istanzi la tua classe controller con
 
$nomeController=$_GET['controller'] . "_controller";
$mioController=new $nomeController();
 
e poi invochi il metodo con
 
$nomeMetodo=$_GET['metodo'];
$mioController->{$nomeMetodo}();
 


 
� proprio questo il punto.
Dove mettere l'htaccess?
Dome trasformare i segnaposto in parametri (forse bisogna usare una regex)?
 
Insomma... esempio chiaro, semplice,pratico, e naturalmente testato e 
funzionante?


Puoi dare un'occhiata ad un framework per quello, per esempio io mi sono 
ispirato a codeigniter.
 

 ispirato a codeigniter.
 
ma questi fw sono gratuiti o a pagamento?
Ne ho scaricati alcuni: sono archivi compressi di qualche MB, 
all'interno c'� poca roba...
Controller, viste, modelli, ma dove stanno?
 

 Controller, viste, modelli, ma dove stanno?
 
Se sono qualche MB compresso non sono affatto piccoli.
 
Zend Framework sono 3-4 MB compressi, che diventano 32 MB decompressi, e 
contiene tutto: dall'MVC a client/server http, pdf, feed rss/atom, 
lucene, form con validazione, api per diversi servizi online, 
manipolazione del dom, json, adapter per diversi DB, acl, ecc. ecc.
 
Cosa ti aspetti da un framework?
 
Bye.
 

 Zend Framework sono 3-4 MB compressi, che diventano 32 MB decompressi, e
 
 
http://framework.zend.com/releases/ZendFramework-1.11.12/ZendFramework-1.11.12.zip
 
Sono ben 25 MB!!!
Ma è questo il file giusto?
 
Poi ho scaricato CD: 
http://codeigniter.com/downloads/
 
Appena 2 MB, ma cosa contiene?
Solo qualche esempio: welcome_message.php, ecc...

 Solo qualche esempio: welcome_message.php, ecc...
 
Non mi pare proprio... guarda meglio.
 
Bye.


Tutti (o quasi) i progetti Open Source hanno la caratteristica di non 
dare troppe "pappe pronte", sia in termini di soluzioni già implementate 
che in termini di documentazione. Ci sono alcune eccezioni (tipo 
Symfony), ma
Per rientrare dai costi, molti sviluppatori sono usi scrivere libri o 
fornire consulenze a pagamento.
Chi non vuole contribuire con denaro, si prende i sorgenti e se li 
studia..., oppure cerca on line se ci sono documenti od how-to.
Per quanto riguarda Zend, sul sito trovi molta documentazione, potresti 
partire da 
http://akrabat.com/zend-framework-tutorial/
 
oppure da 
http://www.phpnews.it/corsi/corso-zend-framework/
 
oppure da 
http://framework.zend.com/manual/en/learning.quickstart.intro.html
 
 
 

 Non mi pare proprio... guarda meglio.
 
ad es. andiamo in application/controllers e ci sono i file: index.html e 
welcome.php
 
tutto qui?


Quella e` l'applicazione (di esempio, quindi vuota).
Il framework lo trovi sotto system.
 
L'applicazione devi scriverla tu.
 
Bye.

 Il framework lo trovi sotto system.
 
ok, cmq a me interessa cercare di studiare un po' il sistema di routing...
Come ho già detto, sto cercando un esempio pratico per convertire un url 
di questo tipo:
 
www.sito.it/index.php/a/b/c
 
 
in
 
www.sito.it/router.php?controller=a&metodo=b&par=c
 
 

 
www.sito.it/router.php?controller=a&metodo=b&par=c
 
 
Per questo devi guardarti il rewrite di Apache, non tanto i framework, 
che di loro non offrono, normalmente, questa cosa.
 
Tra l'altro ogni framework consiglia di riscrivere l'URL a modo suo.
Per esempio ZF usa un rewrite che non mette i pezzi della request in 
variabili GET, ma li lascia in $_SERVER['REQUEST_URI'], dove poi il 
framework li parsa e li usa come preferisce.
 
Il problema del tuo sistema e` che rischi di trovarti i parametri vuoti 
(se l'utente scrive 
www.sito.it/index.php/a
 per esempio) o peggio (se 
scrive 
www.sito.it/a
 per esempio)
 
Io inizierei usando un framework, prima di cercare di crearne uno (o 
anche solo un sistema di routing), cosi` almeno ti fai un'idea di come 
funziona.
 
Bye.