Yii2 validar campos traidos por ajax

Hola, este es el segundo proyecto que estoy afrontando con yii2 y quisiera que me aclaren un poco el panorama sobre una duda.

Tengo en mi bbdd una relación uno-muchos. He creado el CRUD del "uno", pero con un botón, a través ajax, quisiera ir agregando "muchos" en el formulario de "uno" y que el todo sea validad por el cliente y por el servidor, osea:

formulario "uno"

-input dato "uno"

-input otro dato "uno"

–agregar "muchos" (al dar click)


formulario "uno"

-input dato "uno"

-input otro dato "uno"

—input dato "muchos"

—input otro dato "muchos"

–agregar "muchos"

puedo crear un modelo para muchos con las respectivas reglas, y que con estas valide sea cliente que servidor? Lo he intentado, pero con Html::activeTextInput no coge ni estilos ni reglas de validación, si uso ActiveForm si coge los estilos y carga el js de validaciones, pero no funcionan (pongo letras en un campo que debería ser integer y no bota error), sin contar que me crea otro formulario en el DOM (cosa que, si posible, preferiría evitar).

mi controlador es algo así

(el modelo ServicioAjax corresponde a "muchos", y $id corresponde solo al id que tomará el div)




public function actionAgregarAjax()

    {

    	if (Yii::$app->request->isAjax) {

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

    		$post = Yii::$app->request->post();

    		$id = (int)$post['numeroId'];

    		if ($id == 0) {

    			return ['estado' => 0, 'mensaje' => 'problemas al agregar servicio'];

    		}

    		$model = new ServicioAjax();

	        $view = $this->renderAjax('agregar-ajax', [

        		'idServicio' => $id,

        		'model' => $model,

        		'tipos' => ArrayHelper::map(TipoServicio::activos(),'id','nombre')

        	]);

	        return ['estado' => 1, 'view' => $view];

	    }

    }



ojala me puedan dar una mano para encontrar la solución o consejos de la mejor manera de hacer lo que busco.

Saludos

Buenas.

No he trabajado con Yii2 pero será lo mismo.

Si te he entendido bien, lo que quieres hacer es (suponiendo un proyecto de videoclub por ejemplo) que a una persona le puedas ir añadiendo películas alquiladas mediante AJAX.

Puedes hacerlo por ejemplo de estas 2 formas:

1- En la acción actionAgregarAjax guardar directamente en la base de datos. La acción devolvería si la operación fué bien o hubo errores y si todo fué bien actualizas tu lista (por ejemplo un CGridView o como se llame en Yii2).

2- En la acción actionAgregarAjax ir llenando un state y al final cuando se pulse por ejemplo en un botón Guardar, guardarlos todos a la vez. Se hace de igual forma que en la primera parte, pero en la función search con la que llenes la lista (CGridView o como se llame en Yii2), utilizas los datos del state en lugar de los datos de la base de datos, por ejemplo devolviendo un CSqlDataProvider o como se llame en Yii2 (o si estás editando, combinando los datos ya existentes y los de tu state).

Un saludo.

Gracias lagogz, la acción 1 no la puedo usar al agregar, pero voy a ver de utilizar la opción dos.