La actualización del plugin ajax-crud específicamente en el archivo ModalRemote.js cambió el envío de datos a un formulario del tipo FormData. Esto ocasiona que los datos recibidos en los controladores no se puedan procesar con una simple función json_encode(). Esto afecta las funciones actionBulkDelete(), actionBulkDesactivar() y actionBulkActivar() en los controladores.
Es necesario procesar el string recibido para obtener el id y buscar el modelo que va a ser afectado por la función de la siguiente manera:
public function actionBulkDesactivar() {
$request = Yii::$app->request;
$pks = explode(',',$request->post('pks')); // arreglo o llave primaria
foreach ($pks as $pk)
{
$model = $this->findModel($pk); //se busca el modelo
$model->desactivar();
}
if ($request->isAjax) {
/*
* Process for ajax request
*/
Yii::$app->response->format = Response::FORMAT_JSON;
return ['forceClose' => true, 'forceReload' => 'true'];
} else {
/*
* Process for non-ajax request
*/
return $this->redirect(['index']);
}
}
En el caso de los modelos con llaves compuestas hay que procesar el string recibido con más profundidad. Ejemplo de actionBulkDesactivar() en PartidaPartidaController:
public function actionBulkDesactivar() {
$request = Yii::$app->request;
$arr = explode('},{',ltrim(rtrim($request->post('pks'),'}'), '{')); // arreglo o llave primaria
foreach ($arr as $key => $value) //por cada string
{
$tmp = json_decode('{'.$value.'}'); //json a objeto
$model = $this->findModel($tmp->cuenta, $tmp->partida); //se busca el modelo
$model->desactivar();
}
if ($request->isAjax) {
/*
* Process for ajax request
*/
Yii::$app->response->format = Response::FORMAT_JSON;
//return ['pks'=>$tmp->cuenta];
return ['forceClose' => true, 'forceReload' => 'true'];
} else {
/*
* Process for non-ajax request
*/
return $this->redirect(['index']);
}
}
Se procesa el string recibido de la solicitud haciendo ltrim() para eliminar el caracter "{" al principio y rtrim() para eliminar "}" al final. Se usa explode() con el parámetro "},{" para agrupar en un arreglo y se asigna a la variable $var. Luego se recorre el arreglo para transformar el string JSON de cada elemento del arreglo en un objeto y buscar el modelo.
La actualización del plugin ajax-crud específicamente en el archivo ModalRemote.js cambió el envío de datos a un formulario del tipo FormData. Esto ocasiona que los datos recibidos en los controladores no se puedan procesar con una simple función json_encode(). Esto afecta las funciones actionBulkDelete(), actionBulkDesactivar() y actionBulkActivar() en los controladores.
Es necesario procesar el string recibido para obtener el id y buscar el modelo que va a ser afectado por la función de la siguiente manera:
En el caso de los modelos con llaves compuestas hay que procesar el string recibido con más profundidad. Ejemplo de actionBulkDesactivar() en PartidaPartidaController:
Se procesa el string recibido de la solicitud haciendo ltrim() para eliminar el caracter "{" al principio y rtrim() para eliminar "}" al final. Se usa explode() con el parámetro "},{" para agrupar en un arreglo y se asigna a la variable
$var
. Luego se recorre el arreglo para transformar el string JSON de cada elemento del arreglo en un objeto y buscar el modelo.