actionDelete que no funciona

Hola, este es mi problema.

Accedo a la página "manage" de cualquier lista de registros que tengo en mi base de datos (cualquiera, de cualquier tipo).

Cuando pulso en eliminar la actionDelete lanza la exception




throw new CHttpException(400,'Invalid request. Please do not repeat this request again.');



Porque la condición




if(Yii::app()->request->isPostRequest)



la resuelve a false ya que dicho form (el que genera el CGridView envía por get y obviamente isPostRequest es false)

He probado a habilitar y deshabilitar ajax. Esto no influye en absoluto.

Es la primera vez que me ocurre esto, la versión que tengo de Yii es la v1.1.10

Anteriormente, con todas las versiones anteriores, no me ocurría.

Obviamente, si elimino la condición




if(Yii::app()->request->isPostRequest)



me funciona bien, pero claro estoy perdiendo una buena práctica de seguridad.

¿Alguien ha tenido un error similar en alguna ocasión?

Gracias.

Que nivel de seguridad quieres lograr con el condicional?


if(Yii::app()->request->isPostRequest)

Mas alla de "ir y quitar la linea"…creo que hay algo mas grave detras que traerá problemas serios a futuro:

El atributo ‘type’ de jquery / ajax, indica si una llamada jquery via ajax es hecha en modo GET o POST, si tu no pones nada, y si no modificas nada, el CGridView enviará una llamada con type = POST al actionDelete, pero si has metido mano a alguna cosa interna de Yii, seguramente fue esto lo que ocurrio, entonces CGridView esta enviando la llamada ajax al actionDelete pero via GET…lo cual te causa el problema.

Quizá alguna metida de mano en alguna librería te haya causado el problema, quiza editaste un script… Pienso que, deberías instalar de nuevo tu Yii y probar, limpiar assets, porque si bien eso te esta provocando ese pequeño problema quiza te cause uno mayor despues.

referencia: http://api.jquery.com/jQuery.ajax/#options

[list=1][]Limpia el contenido de assets y prueba a ver si tu aplicacion se cura.[]Si no se cura crea una nueva aplicacion, con GII crea un CRUD, y en un CGridView creado por el CRUD dale click a algun boton delete, debe borrar sin fallas.[]Si la aplicacion de pruebas tambien falla, instala una nueva version de Yii Framework, quiza la que tienes ha sido mal modificada,[]Si la falla persiste, descarga de nuevo el framework y haz el paso 2.[/list]

Hola.

No toqué nada en el core de Yii.

Aunque genere una aplicación desde cero, ocurre siempre lo mismo.

He comprobado que con otras versiones no ocurre esto.

Gracias por la respuesta.

En realidad lo que ocurre es que el código es el que genera gii, en mi caso, este condicional no afectará a la seguridad del sitio.

Gracias.

podrías informar exactamente qué versión del core de Yii es ? (es yii 2.0 ?)

Es la versión v1.1.10

Gracias por interesarte ;)

Bueno, pues damos por cerrado también este asunto.

No sabemos porqué pero esto no va y yo ya he puesto mis medios para garantizar que no se borra si no es mediante envío por post con lo cual…

Gracias a todos

Buenas, soy nueva en esto del YII, aunque tengo algo de tiempo manejando otros lenguajes tal vez es cuestion de comparaciones, al igual que en C cuando se hace una comparacion con el strcmp(cadena1,cadena2) me parece que para esta linea en especifico del yii (mi version 1.1.9 ) tambien hay que "forzar" esa comparacion.

A lo que me refiero es que por lo menos yo tampoco modifique nada y todo se hizo desde el gii, y no me deja eliminar las tuplas(las filas) de cualquier tabla. Hace poco fue que lo hice por descartar errores, hasta se podria decir (coloquialmente) “lanzar una flecha” y le coloque un ‘==0’ y todo se resolvio, es decir en el Controlador PruebaClaseController la linea de:

if(Yii::app()->request->isPostRequest)

quedo

if(Yii::app()->request->isPostRequest==0)

y con esto ya me elimina las tuplas, no se que problema deje esto mas adelante, porque como digo soy nueva en esto y aunque estoy en la fase ensayo/error puede que a alguien le sirva esto : )

saludos