2010-01-19 5 views
9

In bootstrap.php, dove si impostano percorsi, ho difficoltà a farli funzionare. Ho letto alcuni documenti qualche tempo fa che non riesco a trovare di nuovo che li spieghi. Ecco uno dei miei esempiQualcuno può spiegare il sistema di routing di Kohana 3?

Route::set('products', 'products/(type)', array('type' => '.+')) 
    ->defaults(array(
    'controller' => 'articles', 
    'action' => 'view_product', 
    'page' => 'shock-absorbers', 
    )); 

ho pensato che significherebbe una richiesta come products/something sarebbe caricare il controller articles, e il metodo action_view_product(). Ma non riesco a farlo funzionare.

Qualcuno può spiegarmi esattamente come funzionano e quali sono i parametri del metodo?

risposta

5

ho pensato che significherebbe una richiesta come i prodotti/qualcosa sarebbe caricare il controller articoli, e il controller action_view_product. Ma io non riesco a farlo funzionare.

Hai sbagliato la parte in grassetto. Sarà effettivamente caricare action_view_product metodo del controller articoli:

class Controller_Articles extends Controller { 
    public function action_view_product() { 
     $params = $this->request->param(); 
     // if the uri is `products/something' then $params['type'] == 'something' 
    } 
} 

EDIT:

Oh mio Dio, oh Dio tuoi perché non ho notato !!!

Il problema reale si trova all'interno del modello di percorso! Dovrebbe essere products/(<type>), con le parentesi angolari. Quelli indurranno a Kohana che intendi che il 'tipo' sia un nome di parametro, invece di un letterale.

+0

Siamo spiacenti, che era un errore di battitura! Non riesco ancora a farlo funzionare per me. – alex

+0

hai inserito il file php del controller nella cartella corretta? – Lukman

+0

Sì, ho una route predefinita che sta acquisendo tutto (e funziona bene) – alex

3

uff, scusa, abbassare quindi e maggiore di segni non mostra correttamente

'products/(type)' should be 'products/(<type>)' 
+0

o anche meglio: ''prodotto (/ )'', perché altrimenti 'prodotto' (senza barra) non verrebbe eguagliato (anche se potresti volerlo in quel modo) – giorgio

3

Le parentesi indicano parti opzionali (l'espressione regolare corrisponderà se mancano). Questi possono essere statici e/o contenere variabili denominate. Le parentesi angolari indicano una variabile denominata nel percorso che è accessibile nel controller tramite:

$this->request->param('type'); 

ho scritto la guida di instradamento ufficiale che potete leggere here, dovrebbe rispondere a tutte le vostre domande.

0

Per la cronaca:

La directory, controller e l'azione si può accedere dal Request come proprietà pubbliche in questo modo:

// From within a controller: 
$this->request->action; 
$this->request->controller; 
$this->request->directory; 

// Can be used anywhere: 
Request::instance()->action; 
Request::instance()->controller; 
Request::instance()->directory; 

fonte: http://kohanaframework.org/3.0/guide/kohana/routing#request-parameters