Update array model

Hola… renderizo en un ajax una tabla de varios registros de un modelo, cuando presiono el submit no realiza ninguna acción y tampoco tira un error. He probado con load multiple pero tampoco obtengo resultados, a continuación les dejo el código para ver si pueden ayudarme.


Hi … I render a table in a ajax several records of a model when I press the submit no action nor an error strip. I tried to load multiple but not get results, then I leave the code to see if they can help.

Código del formulario ajax





<?php

use yii\helpers\Html;

use kartik\widgets\ActiveForm;

use kartik\builder\Form;

?>


		<div id="crud-datatable" class="grid-view" data-krajee-grid="kvGridInit_372f9373">

			<div class="col-xs-12">

				<div class='row'>

					<div class='col-sm-12'>

						<?php $form = ActiveForm::begin(); ?>

						<div id="crud-datatable-container" class="table-responsive kv-grid-container">

							<table class="kv-grid-table table table-bordered table-striped table-condensed kv-table-wrap">

								

								<tr>

									<th width="15%">

										<?php echo "CODIGO"; ?>

									</th>

									<th width="15%">

										<?php echo "DESCRIPCION"; ?>

									</th>

									<th width="15%">

										<?php echo "SOLICITADAS"; ?>

									</th>

									<th width="5%">

										<?php echo "PARCIAL"; ?>

									</th>	

								</tr>

								<?php


								if (!is_null($model_p) and !empty($model_p)) {

									foreach ($model_p as $modelo) {

								?>

								<tr>

									<td>

										<?php

											echo $form->field($modelo, 'codigo')->textInput(['label'=>'','maxlength' => true, 'id'=>$modelo->id . '-codigo', 'name'=>$modelo->id . '-codigo'])->label(false); ?>

									</td>

									<td>

										<?php 

										echo $form->field($modelo, 'descripcion')->textInput(['maxlength' => true, 'id'=>$modelo->id . '-descripcion', 'class'=>'descripcion', 'name'=>$modelo->id . '-descripcion'])->label(false);?>

										<?php echo Html::hiddenInput('ids', $modelo->id); ?>

									</td>

									<td>

										<?php 

										echo $form->field($modelo, 'solicitadas')->textInput(['maxlength' => true, 'id'=>$modelo->id . '-solicitadas', 'class'=>'total_cases', 'name'=>$modelo->id . '-solicitadas'])->label(false); ?>

									</td>

									<td>

										<?php 

										echo $form->field($modelo, 'parcial')->textInput(['maxlength' => true, 'id'=>$modelo->id . '-parcial', 'class'=>'parcial', 'name'=>$modelo->id . '-parcial'])->label(false); ?>

									</td>

								</tr>

								<?php } } ?>

							</table>

						</div>

					</div>

					

					<div class="form-group pull-center">

                          <?=  Html::submitButton(Yii::t('app', 'ENVIAR'), ['class' =>'btn btn-primary', 'name'=>'btnaplicar']) ?>

					</div>

					<?php ActiveForm::end(); ?>

				</div>

			

			</div>	

		</div>






Ahora pondré el código de la acción


Now I will put the action code





public function actionDespacho() {

    $id = $_REQUEST['sol'];

    $model_p = \common\models\Solicitud::find(['solicitud_id' => $id])->all();


    if (Model::loadMultiple($model_p, Yii::$app->request->post())) {

        foreach ($model_p as $modelo) {

		print_r($modelo);

	}

    }


    }else{

	return $this->renderAjax('_parcializar', [

	     'model_p' => $model_p,

	]);

    }

}









Gracias


Thanks

Hola maurogabriel:

Prueba lo siguiente en el controlador y vista respectivamente:

Controlador:




    if (Model::loadMultiple($model_p, Yii::$app->request->post())) {

        foreach ($model_p as $modelo) {

                $modelo->save(false);

        }

    }




Vista:




if (!is_null($model_p) and !empty($model_p)) {

     foreach ($model_p as $index => $modelo) {

?>


//En los inputs, deberás agregar el $index


<?= $form->field($modelo, "[$index]codigo")->textInput(['label'=>'','maxlength' => true]) ?>



Espero que te sirva.

Saludos

No, lo que me sucede es que presiono el botón de submit y nada

Ahora probe con estas modificaciones

El el formulario le coloque lo siguiente




<?php $form = ActiveForm::begin(['enableAjaxValidation' => true]); ?>



y en la acción coloque esto







if (Yii::$app->request->isAjax && Model::loadMultiple($model_p, Yii::$app->request->post())) {

     foreach ($model_p as $modelo) {

	$modelo->save(false);

     }

}




y nada tampoco, es como que el botón no ejecuta ninguna acción, pero en el inspector veo lo siguiente




<form id="w0" class="form-vertical" action="/backend/solicitudes/despacho?sol=1" method="post">	



Lo cual está bien, es la acción de la cual vengo, es decir el action del formulario está bien

y el submit aparece así




<button type="submit" class="btn btn-primary" name="btnaplicar">PARCIALIZAR</button>



El tema sería como captar el submit de un formulario ajax pero con loadMultiple

Cualquier sugerencia serán bienvenida

GRACIAS !!!

También he probado con esto




if (Yii::$app->request->isAjax &&  Model::loadMultiple($model_p, Yii::$app->request->post()) && $submit == false) {

       Yii::$app->response->format = Response::FORMAT_JSON;

       return ActiveForm::validate($model_p);

}


if (Yii::$app->request->isAjax && Model::loadMultiple($model_p, Yii::$app->request->post())) {


foreach ($model_p as $modelo) {......}




Y tampoco sucede nada, también he probado al formulario que está en el ajax de colocarle el method tanto get como post y nada, presiono en el botón y no hace nada

Solucioné el problema, muchas gracias a todos por su aporte, a continuación coloco el código

Controller





if (Model::loadMultiple($model_p, Yii::$app->request->post())) {

     foreach ($model_p as $modelo) {

	....

     }

     return $this->redirect(['update', 'id'=>$model->id]);

}




Vista en Ajax




<?php $form = ActiveForm::begin(); ?>

...

if (!is_null($model_p) and !empty($model_p)) {

	foreach ($model_p as $index => $modelo) {

?>

	<tr>

	       <td>

		<?= $form->field($modelo, "[$index]internal_code")->textInput(['maxlength' => true])->label(false); ?>

	       </td>

.....

        }

}

 <?=  Html::submitButton(Yii::t('app', 'AGREGAR'), ['class' =>'btn btn-primary', 'name'=>'btnaplicar']) ?>




De esa forma andubo, en realidad no es mucho mas de lo que ya tenía, pero seguramente en algún error tenía que no estaba visualizando