2014-12-05 7 views
11

per il mio attuale (avanzato) progetto basato su yii2 ho solo bisogno di un controller (SiteController). Quindi non c'è bisogno di mostrarlo nell'URL. Ecco perché ho aggiunto questa regola alla configurazione frontend:

'urlManager' => [ 
    'rules' => array(
     '<alias:product|contact|about>' => 'site/<alias>', 
    ), 

Questo sta funzionando benissimo e localhost/prodotto punti a localhost/sito/prodotto.

Naturalmente, ho attivato prettyUrl e aggiunte questo regole predefinite per la configurazione comuni:

'rules' => array(
       '<controller:\w+>/<id:\w+>' => '<controller>', 
       '<controller:\w+>/<action:\w+>/<id:\w+>' => '<controller>/<action>', 
       '<controller:\w+>/<action:\w+>' => '<controller>/<action>', 
      ), 

Ora voglio accedere ad un parametro di GET come questo: localhost/prodotto/ProductName. Ma ottengo l'errore:

Unable to resolve the request "product"

ma localhost/sito/prodotto/productname funziona correttamente ... Il "productname" dovrebbe essere $ _GET [ 'id']. Cosa devo cambiare per farlo accadere?

Grazie!

risposta

11

Le regole dovrebbero essere prima di quelli di default, e avete bisogno di 2 regole, per esempio :

'rules' => array(
    '<alias:contact|about>' => 'site/<alias>', 
    '<alias:product>/<id:\w+>' => 'site/<alias>', 
    '<controller:\w+>/<id:\w+>' => '<controller>', 
    '<controller:\w+>/<action:\w+>/<id:\w+>' => '<controller>/<action>', 
    '<controller:\w+>/<action:\w+>' => '<controller>/<action>', 
), 
+0

Ecco cosa è w +? –

+1

@YasarArafath ** '\ w' corrisponde a qualsiasi carattere di parola (uguale a [a-zA-Z0-9 _]) ** –

-1

Basta definire var nella vostra azione, ad esempio public function actionProduct($id) e $id stato è $_GET['id']

+0

ho fatto, l'errore è ancora lì. – ESCOBAR