trasforma la rotta dell'URL in funciton argomenti php mvc

Sto scrivendo un framework MVC personalizzato per un progetto PHP e tutto è perfetto fino a get argomenti dalla route URL. Sono bloccato su parti di passaggio della rotta URL in un argomento di function in modo dinamico. Ho già un metodo che è solo per implodere il path e utilizzare l'arrays per gli argomenti della function, ma mi piacerebbe davvero sapere come farlo in CodeIgnitor o CakePHP.

Ecco cosa voglio aver fatto. L'url del sito sarebbe …

url: http://yoursite.com/profile/view/35/foo 

e nel mio controller avrei …

 <?php Class profileController Extends baseController { public function view($ID, $blah) { echo $ID; //would show 35 echo $blah; //would show foo } } ?> 

Mi piacerebbe davvero sapere come è fatto. Molte grazie!

Il modo più semplice per gestirlo è utilizzare la function call_user_func_arrays (). Lo useresti come segue:

 call_user_func_arrays(arrays($controller, $method), $params); 

$ controller sarebbe l'object controller che hai già creato e $ method sarebbe il metodo del controller. Quindi $ param è una matrix dei parametri raccolti dall'URI. Dovresti solo rimuovere la parte controller / metodo dell'URI.

È anche ansible farlo utilizzando Reflection , ma in genere è più lento rispetto all'utilizzo del metodo precedente.

Per chiunque voglia sapere cosa ho fatto, il codice finale è sotto … (questo è dal mio router.class.php)

 <?php $route = (empty($_GET['rt'])) ? '' : $_GET['rt']; $this->route = explode('/', $route); /*** a new controller class instance ***/ $class = $this->controller . 'Controller'; $controller = new $class($this->registry); /*** load arguments for action ***/ $arguments = arrays(); foreach ($this->route as $key => $val) { if ($key == 0 || $key == 1) { } else { $arguments[$key] = $val; } } /*** execute controller action w/ parameters ***/ call_user_func_arrays(arrays($controller, $action), $arguments); ?> 

se il mio URL era

 http://mysite.com/documentation/article/3 

il mio controller sembra così …

 <?php Class documentationController Extends baseController { public function article($article_ID = '') { echo $article_ID; //shows 3 } } ?> 

Grazie per l'aiuto.

In poche parole, RewriteRules gestisce questo. Tuttavia all'interno di ciascun framework è presente un codice di routing più complesso che indirizza richieste e dati al controller specifico.

Il mio suggerimento sarebbe quello di guardare il codice all'interno di questi altri frameworks e ricercare come risolvono questi problemi. Quelli che hai menzionato sono open source.