[Yii2] Route vs route yii1 - urlFormat path


(St4nny) #1

Ciao Ragazzi,

sono da poco migrato a yii2 per un nuovo progetto.

Mi sono imbattuto in una gestione differente delle rotte rispetto a yii 1.

Su Yii2 le rotte del tipo:




controller/action/id/7



mi restituiscono un page not found, mentre funziona correttamente questa:




controller/action?id=7



in configurazione c’ho messo:




'urlManager' => [

            'enablePrettyUrl' => true,

            'showScriptName' => false,

            'enableStrictParsing' => false,

            'rules' => [

                '<controller:\w+>/<id:\d+>' => '<controller>/view',

                '<controller:\w+>/<action:\w+>/<id:\d+>' => '<controller>/<action>',

                '<controller:\w+>/<action:\w+>' => '<controller>/<action>',

                'login' => 'user/login',

            ],

        ],



mentre in yii1 avevo:




'urlManager' => array(

            'urlFormat' => 'path',

            'showScriptName' => false,

            'caseSensitive' => false,

            'rules' => array(

                '<controller:\w+>/<id:\d+>' => '<controller>/view',

                '<controller:\w+>/<action:\w+>/<id:\d+>' => '<controller>/<action>',

                '<controller:\w+>/<action:\w+>' => '<controller>/<action>',

            ),

        ),



non ho trovato molto sul formato url "path".

Qualcuno di voi ha già risolto questa problematica?

Grazie e buon lavoro a tutti.


(Fabrizio Caldarelli) #2

Vista la configurazione, hai provato a richiamare:




controller/action/7



?

Così il campo id dovrebbe essere valorizzato con 7 nell’action.


(St4nny) #3

Ciao Fabrizio,

grazie per la pronta risposta.

Si così funziona ma volevo funzionasse

anche in questa maniera




controller/action/id/7



specificando id o un altro parametro sulla get

per non rompere idealmente la compatibilità con il vecchio modello.


(Fabrizio Caldarelli) #4

Potresti provare con queste 2 soluzioni.

  1. Aggiungere una rules di questo tipo:



'<controller:\w+>/<action:\w+>/id/<id:\d+>' => '<controller>/<action>',



  1. Gestire un rewrite nell’.htaccess

(St4nny) #5

Ciao Fabrizio

.htaccess lo scarterei, cercavo una soluzione yii compliant.

Il suggerimento datomi:




'<controller:\w+>/<action:\w+>/id/<id:\d+>' => '<controller>/<action>',



è una soluzione manuale.

Mettiamo il caso di avere più parametri sulla get:




controller/action/id/7/codice/asd



nel controller ho:




public function actionNomeaction($id, $codice=null)

{


}



per non avere nell’url Manager un proliferare di situazioni simili a:




'<controller:\w+>/<action:\w+>/id/<id:\d+>/codice/<codice:\w+>' => '<controller>/<action>',



Qual’è la soluzione?


(Fabrizio Caldarelli) #6

Sinceramente non vedo tante altre soluzioni


(St4nny) #7

Grazie Fabrizio per la risolutezza! :lol:

Buon lavoro.