Url Path

Ciao a tutti,

ho aggiunto un nuovo model e relativo crud ad una applicazione con lo strumento gii.

se visito il controller con

nomecontroller/admin

funziona tutto bene.

Ma le azioni view:

nomecontroller/id

ed update:

nomecontroller/update/id

mi restituiscono: Error 400

Se scrivo l’url in questo modo:

nomecontroller/view?id=lineetot

configurazioni/update?id=lineetot

tutto funziona correttamente.

Per tutto il resto dell’applicazione a cui ho aggiunto questo nuovo controller continua a funzionare senza problemi l’url:

controller/azione/id

Qualcuno mi può aiutare a capire cosa succede?

grazie

Hai aggiunto .htaccess e configurato il file di configurazione affinché legga i path nel modo corretto ed indicato che index.php non venga incluso negli url generati?

intanto grazie per l’aiuto

avevo capito che questo che hai scritto dovevo farlo in generale per tutta l’applicazione una volta per tutte.

non capisco perchè fino ad oggi ha funzionato tutto bene, ora aggiungendo questa nuova tabella sul db e generando i relativi model e crud da gii non funziona l’url.

Per il resto continua a funzionare.

cosa dovrei modificare in .htaccess e nel file di configurazione?

con chiavi primarie che siano varchar devi scrivere apposite rules, con gli id numerici dovresti continuare a non avere problemi.

stavo iniziando a capire anche io che questo potesse essere il problema.

infatti ho aggiunto un’altra tabella con chiave varchar ed ho lo stesso problema.

qualcuno mi aiuta a capire quali sono le rules da aggiungere per chiavi primarie varchar?

grazie

ho provato a modificare le rules di urlManager in questo modo:


	'rules'=>array(

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

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

				'<controller:\w+>/<action:(create|view|update|delete|admin|index)>'=>'<controller>/<action>', //limited for this action(create|view|update|delete|admin|index)

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

				'<controller:(item)>/<id:\w+>'=>'item/view', //rules: do not insert primary key (create|view|update|delete|admin|index)



leggendo su questo post

ma non ho risolto nulla.

io nelle mie configurazioni ho risolto così:

main.php




'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>',

           //rules: fix rewrite url for varchar PK

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

           '<controller:(impostazioni)>/<id:\w+>'=>'impostazioni/view',

),



dove impostazioni è il tuo controller.

.htaccess invece è:




RewriteEngine On

#RewriteBase /

#Se l'applicazione gira in una sottocartella (appesempio) della root directory di apache

RewriteBase /appesempio

RewriteCond %{REQUEST_FILENAME} !-f

RewriteCond %{REQUEST_FILENAME} !-d

RewriteRule ^(.*)\?*$ index.php/$1 [L,QSA]



se non capisco male sono le stesse rules che ho indicato nel post precedente,

le ho ricontrollate e le mie sono identiche ma non funziona.

anche .htaccess è lo stesso

dovresti avere delle rules di questo tipo:




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

           '<controller:(configurazioni)>/<id:\w+>'=>'configurazioni/view',




allora,

ho inserito questo:




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

'<controller:(configurazioni)>/<id:\w+>'=>'configurazioni/view',

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

'<controller:(festivi)>/<id:\w+>'=>'festivi/view',



configurazioni è un controller con un model associato che ha come chiave primaria un varchar.

l’azione update ora funziona, ma la view:




index.php/configurazioni/parametro



no perchè considera il parametro come il nome di un’azione ed ho:

Error 404

Il sistema non ha potuto trovare l’azione “parametro” richiesta.

Mentre per il controller festivi che lavora su di un model con chiave primaria tipo DATE

non funziona nessuno dei due…

a me l’url standard per la view mi risulta essere




controller/view/id/chiave_int



e quindi per te sarà:




configurazioni/view/id/chiave_varchar



io invece vedo solo:

index.php/configurazioni/chiave_varchar

e per tutto il resto funziona correttamente:

index.php/controller/chiave_intera

dovrei aver risolto,

il problema era che nella url:

controller/qualcosa

qualcosa può essere sia una action (crate, view ecc…) sia una chiave varchar.

dunque in qualche modo bisogna distinguere i casi. Per questo ho prima inserito la rules che identifica controller/action con tutte le action possibili, se non c’è matching, posso essere sicuro che si tratta di controller/chiave_varchar.

Per questo è importante anche l’ordine:





'<controller:\w+>/<action:(create|view|update|delete|admin|index)>'=>'<controller>/<action>', 

'<controller:(configurazioni)>/<nome:\w+>'=>'configurazioni/view',

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

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

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

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

'<controller:(festivi)>/<data:\w+>'=>'festivi/view', 




inoltre mi sembra di aver capito che il nome dei parametri da indicare nella route deve essere lo stesso usato nel controller per questo nella seconda rule ho usato nome e nell’ultima data.

in questo modo funziona anche per la chiave di tipo data

spero di essere stato chiaro, magari a qualcuno (come me) può essere utile