jueves, 29 de enero de 2015

Yii Framework 2 - Conectar vista-acción (formularios y redirecciones)




En este capítulo del vídeo tutorial nos centraremos en como realizar peticiones desde una vista a una determinada acción, para ello utilizaremos los métodos get y post de los formularios, también es posible enviar parámetros get al servidor a través de links, esto se supone que ya lo sabemos jejejeje.

La acción obtendrá y procesará la petición y veremos un ejemplo de como redireccionar nuevamente a la página desde la cual se realizó la petición.

Como el código se va a ir haciendo más extenso a lo largo del tutorial aquí os dejo el código entero del controlador SiteController.php, para que podáis obtener el código del capítulo ...

<?php

namespace app\controllers;

use Yii;
use yii\filters\AccessControl;
use yii\web\Controller;
use yii\filters\VerbFilter;
use app\models\LoginForm;
use app\models\ContactForm;

class SiteController extends Controller
{
    
    public function actionSaluda($get = "Tutorial Yii")
    {
        $mensaje = "Hola Mundo";  
        $numeros = [0, 1, 2, 3, 4, 5];
        return $this->render("saluda", 
                [
                    "saluda" => $mensaje,
                    "numeros" => $numeros,
                    "get" => $get,
                ]);
    }
    
    public function actionFormulario($mensaje = null)
    {
        return $this->render("formulario", ["mensaje" => $mensaje]);
    }
    
    public function actionRequest()
    {
        $mensaje = null;
        if (isset($_REQUEST["nombre"]))
        {
            $mensaje = "Bien, has enviando tu nombre correctamente: " . $_REQUEST["nombre"];
        }
        $this->redirect(["site/formulario", "mensaje" => $mensaje]);
    }
    
    public function behaviors()
    {
        return [
            'access' => [
                'class' => AccessControl::className(),
                'only' => ['logout'],
                'rules' => [
                    [
                        'actions' => ['logout'],
                        'allow' => true,
                        'roles' => ['@'],
                    ],
                ],
            ],
            'verbs' => [
                'class' => VerbFilter::className(),
                'actions' => [
                    'logout' => ['post'],
                ],
            ],
        ];
    }

    public function actions()
    {
        return [
            'error' => [
                'class' => 'yii\web\ErrorAction',
            ],
            'captcha' => [
                'class' => 'yii\captcha\CaptchaAction',
                'fixedVerifyCode' => YII_ENV_TEST ? 'testme' : null,
            ],
        ];
    }

    public function actionIndex()
    {
        return $this->render('index');
    }

    public function actionLogin()
    {
        if (!\Yii::$app->user->isGuest) {
            return $this->goHome();
        }

        $model = new LoginForm();
        if ($model->load(Yii::$app->request->post()) && $model->login()) {
            return $this->goBack();
        } else {
            return $this->render('login', [
                'model' => $model,
            ]);
        }
    }

    public function actionLogout()
    {
        Yii::$app->user->logout();

        return $this->goHome();
    }

    public function actionContact()
    {
        $model = new ContactForm();
        if ($model->load(Yii::$app->request->post()) && $model->contact(Yii::$app->params['adminEmail'])) {
            Yii::$app->session->setFlash('contactFormSubmitted');

            return $this->refresh();
        } else {
            return $this->render('contact', [
                'model' => $model,
            ]);
        }
    }

    public function actionAbout()
    {
        return $this->render('about');
    }
}


Y a continuación podéis ver el código de la vista formulario.php

<?php
use yii\helpers\Url;
use yii\helpers\Html;
?>

<h1>Formulario</h1>
<h3><?= $mensaje ?></h3>
<?= Html::beginForm(
        Url::toRoute("site/request"),//action
        "get",//method
        ['class' => 'form-inline']//options
        );
?>

<div class="form-group">
    <?= Html::label("Introduce tu nombre", "nombre") ?>
    <?= Html::textInput("nombre", null, ["class" => "form-control"]) ?>
</div>

<?= Html::submitInput("Enviar nombre", ["class" => "btn btn-primary"]) ?>

<?= Html::endForm() ?>

Si has visto el capítulo anterior ya sabes como acceder a las acciones, en el caso de este capítulo: http://yii.local/index.php?r=site/formulario


 Ver el vídeo tutorial de Yii Framework 2 en Youtube





5 comentarios:

Guillermo Cuervo dijo...

Gracias Manuel J. Davila. Me han ayudado tus tutoriales sobre yii2. De nuevo gracias
gcuervo2001h@yahoo.com.mx

Equipo1PNF-I dijo...

Gracias Manuel J. Davila exelente explicación, tengo una duda hay hay forma de enviar los parametros del metodo redirect()por post. de forma q no se muestren en la url?? muchas gracias

Equipo1PNF-I dijo...

Gracias Manuel J. Davila exelente explicación, tengo una duda hay hay forma de enviar los parametros del metodo redirect()por post. de forma q no se muestren en la url?? muchas gracias

Equipo1PNF-I dijo...

Gracias Manuel J. Davila exelente explicación, tengo una duda hay hay forma de enviar los parametros del metodo redirect()por post. de forma q no se muestren en la url?? muchas gracias

José Enrique Barreiro dijo...

Agradeciendote tu gran aportación didáctica por tus videos Manuel J.

En el campo nombre lo haría algo más flexible al objeto de poder añadir tildes y nuestra famosa ñ, además de los espacios en blanco.
Por ejemplo mi nombre José Enrique.

['nombre', 'match', 'pattern' => "/^[0-9a-z ñáéíóú ÑÁÉÍÓú \s]+$/i", 'message' => 'Sólo se aceptan letras con o sin tilde y números'],

Aprovecho para enviarte un cordial saludo.