Duda enviar variable a modelo desde una vista metodo post

Buenas tardes, estoy enviando una variable desde una vista al controlador para que haga la inserción la bbdd y solo puedo pasarsela si realizo $_POST[‘contenido’], de otra forma no la detecta y tengo que utilizar la variable global $_post, los demás campos si los detecta de forma automática.

La función del controlador es:

  public function actionCreate()
        {

        $model = new Comentarios();
        $model->usuario_id = Yii::$app->user->id;
        $model->created_at = date('Y-m-d H:i:s');
        // $model->comentarios_id=$_POST['comentarios_id'];
        // var_dump($_POST);
        // die;

        if ($model->load(Yii::$app->request->post()) &&  && $model->validate()) {
            $model->save();
            return $this->redirect(['site/index', 'id' => $model->id]);
        }
        return $this->render('create', [
            'model' => $model,
        ]);
    }

Y en la vista tengo el siguiente código:

 $form = ActiveForm::begin([
                                        'action' => ['comentarios/create'],
                                        'method' => 'post',
                                        'options' =>   ['enctype' => 'multipart/form-data'],
                                    ]); ?>
                                    <?= HelpersHtml::submitButton('Comentar', ['class' => 'btn btn-outline-primary btn-sm float-right', 'name' => 'contact-button']) ?>
                                    <?php $model = new Comentarios() ?>
                                    <?= $form->field($model, 'contenido')->textarea(['rows' => 2])->label('Escribe tu comentario') ?>

                                    <?= Html::hiddenInput('comentarios_id', $feeds['id']); ?>
                                    <?php ActiveForm::end(); ?>

Gracias

1 Like

Añado a aclaración:

Quiero enviar paramétros mediante un formulario desde una vista a una acción/controlador distinta.

$Post si me funciona, pero si compruebo los errores no le llegan los campos citados.

Gracias.

Estimado, creo que tienes un poco mal algunos conceptos deberías revisar la documentación de formularios https://www.yiiframework.com/doc/guide/2.0/en/input-forms , en tu controlador para empezar tienes mal esta parte:

es una sola vez el operador lógico &&, lo tienes puesto dos veces si te fijas. Luego

En esta parte no deberías poner el $_POST porque realmente esto debería estar dentro de la condición que menciono anteriormente, que es cuando se hace el Yii::$app->request->post().

Por otro lado en tu vista hay algunas cosas de más y equivocadas, primero a mi entender aplicas el botón submit por encima, de manera semántica sería mejor que esté al final, pero bueno tu elijes, mira:

También tienes configurado el action, el method y el enctype, el action siempre es por defecto desde la ruta en que es llamado o creado el form, en este caso si la url es create, no deberias ponerlo, es redundante, el método por defecto de los forms es POST, por lo cual está demás, y por último si no vas a enviar archivos enctype no va, de hecho en las últimas versiones del framework si incluyes un inputField(), lo agrega de manera automática, al menos eso dice la documentación.

Y algo fundamental, estas instanciando Comentarios() en la vista, no solo es una mala práctica sino que ya lo estás retornando en el controlador cuando lo pasas en $model…

Prueba corregir un poco el código y verás que funciona.

Espero puedas elaborar mejor tu código y cualquier inquietud sigue el hilo.

Sinceramente no tiene mucha actividad el foro en español, hace unos días me vi obligado a publicar en el General Discussion en Inglés porque allí si hay más monitoreo de los temas o se involucran más en responder.

Saludos!