Yii - Controladores
Los controladores son responsables de procesar las solicitudes y generar respuestas. Después de la solicitud del usuario, el controlador analizará los datos de la solicitud, los pasará al modelo, luego insertará el resultado del modelo en una vista y generará una respuesta.
Comprensión de acciones
Los controladores incluyen acciones. Son las unidades básicas que el usuario puede solicitar para su ejecución. Un controlador puede tener una o varias acciones.
Echemos un vistazo al SiteController de la plantilla de aplicación básica -
<?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 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();
}
return $this->render('login', [
'model' => $model,
]);
}
public function actionLogout() {
Yii::$app->user->logout();
return $this->goHome();
}
public function actionContact() {
//load ContactForm model
$model = new ContactForm();
//if there was a POST request, then try to load POST data into a model
if ($model->load(Yii::$app->request->post()) && $model>contact(Yii::$app->params
['adminEmail'])) {
Yii::$app->session->setFlash('contactFormSubmitted');
return $this->refresh();
}
return $this->render('contact', [
'model' => $model,
]);
}
public function actionAbout() {
return $this->render('about');
}
public function actionSpeak($message = "default message") {
return $this->render("speak",['message' => $message]);
}
}
?>
Ejecute la plantilla de la aplicación básica usando el servidor incorporado PHP y vaya al navegador web en http://localhost:8080/index.php?r=site/contact. Verá la siguiente página:
Cuando abre esta página, la acción de contacto del SiteControlleres ejecutado. El código primero carga elContactFormmodelo. Luego renderiza la vista de contacto y le pasa el modelo.
Si completa el formulario y hace clic en el botón enviar, verá lo siguiente:
Tenga en cuenta que esta vez se ejecuta el siguiente código:
if ($model->load(Yii::$app->request->post()) && $model->contact(Yii::$app>params ['adminEmail'])) {
Yii::$app->session->setFlash('contactFormSubmitted');
return $this->refresh();
}
Si hubo una solicitud POST, asignamos los datos POST al modelo e intentamos enviar un correo electrónico. Si tenemos éxito, establecemos un mensaje flash con el texto “Gracias por contactarnos. Nosotros responderemos a la mayor brevedad posible." y actualice la página.
Entender las rutas
En el ejemplo anterior, en la URL, http://localhost:8080/index.php?r=site/contact, la ruta es site/contact. La acción de contacto (actionContact) en el SiteController será ejecutado.
Una ruta consta de las siguientes partes:
moduleID - Si el controlador pertenece a un módulo, entonces existe esta parte de la ruta.
controllerID (sitio en el ejemplo anterior): una cadena única que identifica el controlador entre todos los controladores dentro del mismo módulo o aplicación.
actionID (contacto en el ejemplo anterior): una cadena única que identifica la acción entre todas las acciones dentro del mismo controlador.
El formato de la ruta es controllerID/actionID. Si el controlador pertenece a un módulo, entonces tiene el siguiente formato:moduleID/controllerID/actionID.