Visualizzazione dei risultati da 1 a 10 su 10
  1. #1
    Utente di HTML.it
    Registrato dal
    Nov 2006
    Messaggi
    22

    routing e chiamata di metodi..stile framework

    Ciao a tutti,
    per motivi "didattici" dovrei creare un piccolo framework tipo
    codeigniter o cakephp. Vi rassicuro subito che non devo creare niente
    di particolarmente complesso e non devo soprattutto avvicinarmi
    neanche minimamente a quello che è un frameworl professionale.
    Sono riuscito a ricreare un po' quello che il modello MVC,
    caratteristico di questi framework. Vorrei riprodurre tutta via una
    funzionalità tanto interessante quanto utile, ovvero la possibilità di
    effettuare un parser delle request dell'url.
    Mi spiego meglio: in Codeigniter si possono eseguire azioni del
    tipo ../controller/azione(metodo)/parametro1(del metodo)/parametro2
    (del metodo)
    la cosa che non riesco a capire è come il framework capisce che i due
    parametri sono relativi al medoto. Quello che mi sembra magico è che a
    livello di programmazione nel metodo pippo, del controllo disney ad
    esempio io scrivo
    function pippo( $par1='', $par2=''){
    //codice
    }

    con questa scrittura si va a indicare che i due parametri passati
    tramite l'url vengono passati alla funzione. A livello di algoritmo
    come si può avere questo tipo di risultato?
    Non so se sono stato chiaro. Se avete domande fate pure.
    Vi ringrazio in anciticipo e vi auguro un buon 2010 a tutti.
    saluti
    Gabriele

  2. #2
    Utente di HTML.it L'avatar di bubi1
    Registrato dal
    Dec 2009
    Messaggi
    1,230
    mettiamo che hai l'url /disney/mostra/topolino/paperino
    Ovviamente avrai un .htaccess che stabilisce che tutto va passato all'index.php del framework.

    Poi, avrai' probabilmente la funzione routing globale che gestisce gli url, che fara' un explode del request_uri per "/", e sapra' che il primo elemento nell'array e' il controller, il secondo l'azione, e gli altri 2 i parametri da passare.

    Avrai anche il controller disney, e il metodo mostra()

    Quando l'utente chiamera quella url, questa funzione routing sapra' che dovra fare un $controller =new disney();$controller->mostra("topolino", "paperino");

  3. #3
    Utente di HTML.it
    Registrato dal
    Nov 2006
    Messaggi
    22
    si fino a qua ci sono ed ho implementato il tutto.. e funziona benissimo..
    l'ultima parte è l'incognita che nn riesco a sistemare.. perchè tu dai per scontato che il metodo abbia due argomenti.. in questo modo però si perde di dinamicità in quanto un'altro metodo, che magari ha un parametro in più o in meno, non potrà essere chiamato con l'istanza che mi hai messo tu..
    fare uno switch in base al numero di parametri mi sembra una cosa abbastanza brutta..
    come si potrebbe fare per rendere la chiamata alla funzione dinamica?

    grazie mille
    saluti

  4. #4
    Originariamente inviato da gismo
    si fino a qua ci sono ed ho implementato il tutto.. e funziona benissimo..
    l'ultima parte è l'incognita che nn riesco a sistemare.. perchè tu dai per scontato che il metodo abbia due argomenti.. in questo modo però si perde di dinamicità in quanto un'altro metodo, che magari ha un parametro in più o in meno, non potrà essere chiamato con l'istanza che mi hai messo tu..
    fare uno switch in base al numero di parametri mi sembra una cosa abbastanza brutta..
    come si potrebbe fare per rendere la chiamata alla funzione dinamica?

    grazie mille
    saluti
    http://us.php.net/func_get_args

  5. #5
    Utente di HTML.it
    Registrato dal
    Nov 2006
    Messaggi
    22
    ah grazie

    questa nn la sapevo..però non ho risolto il mio problema più grande..ovvero la chiamata...

    allora diciamo che io ho riconosciuto i miei parametri, gli ho divisi dal controller ecc..

    mi ritrovo un array di parametri
    Codice PHP:
    array("rocco","carlo","abete"); 
    io poi istanzio la classe controller richiamo il metodo, con n parametri...
    :master:

    ora però io dovrei passare 3 parametri, che potrebbero anche essere meno, alla funzione..
    dovrei far diventare ogni cella dell'array una variabile o quanto meno in un valore saperato..
    usando gli indici del vettore vorrebbe dire sapere a priori il numero dei parametri a livello di codice..

    qualche idea

    grazie mille a tutti..

  6. #6

  7. #7
    Utente di HTML.it
    Registrato dal
    Nov 2006
    Messaggi
    22
    grandissimo..
    ho capito come fare..grazie mille..

    a breve posterò la soluzione completa..
    saluti

    p.s. FORZA NAPOLI

  8. #8
    Originariamente inviato da gismo
    grandissimo..
    ho capito come fare..grazie mille..

    a breve posterò la soluzione completa..
    saluti

    p.s. FORZA NAPOLI
    Olè :-o

    :-p

  9. #9
    Utente di HTML.it L'avatar di bubi1
    Registrato dal
    Dec 2009
    Messaggi
    1,230
    Ci sono anche altri approcci. Ad esempio in cake a volte non e' il dispatcher a sapere quanti parametri accetta la funzione, ma e' la funzione a elaborare l'input. Per farti un esempio, cake puo' passare tutto il post in una variabile, $this->data. Poi nel metodo vai con if($this->data[param1] )
    Oppure tutti i parametri.. es /categoria/list/sort:asc/filter:blah.. in cake questi vengono chiamati named parameters, e li controlli con if($this->passedArgs['sort'] ...).
    Con questo approccio non ti importa quanti parametri ti passano, il tuo metodo prendera' solo quelli che gli servono.
    Ovviamente e' il router a trasformare la url in array da passare ai metodi.

  10. #10
    Utente di HTML.it
    Registrato dal
    Nov 2006
    Messaggi
    22
    scusate se mi ripropongo..

    ma non riesco a capire come posso fare per gestire gli errori della funzione call_user_func_array().
    nella documentazione ufficiale dice che in caso di errore restituisce FALSE. Io ho provato a fare un controllo e sbagliare di proposito ma niente.

    Avete qualche consiglio?
    Grazie mille ancora

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.