Yii - Controladores
Os controladores são responsáveis por processar solicitações e gerar respostas. Após a solicitação do usuário, o controlador analisará os dados da solicitação, os passará ao modelo e, em seguida, inserirá o resultado do modelo em uma visualização e gerará uma resposta.
Compreendendo as ações
Os controladores incluem ações. Eles são as unidades básicas que o usuário pode solicitar para execução. Um controlador pode ter uma ou várias ações.
Vamos dar uma olhada no SiteController do modelo básico de aplicativo -
<?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]);
}
}
?>
Execute o modelo de aplicativo básico usando o servidor embutido em PHP e vá para o navegador da web em http://localhost:8080/index.php?r=site/contact. Você verá a seguinte página -
Quando você abre esta página, a ação de contato do SiteControllerÉ executado. O código carrega primeiro oContactFormmodelo. Em seguida, ele renderiza a visualização de contato e passa o modelo para ela.
Se você preencher o formulário e clicar no botão enviar, verá o seguinte -
Observe que, desta vez, o seguinte código é executado -
if ($model->load(Yii::$app->request->post()) && $model->contact(Yii::$app>params ['adminEmail'])) { Yii::$app->session->setFlash('contactFormSubmitted');
return $this->refresh();
}
Se houver uma solicitação POST, atribuímos os dados POST ao modelo e tentamos enviar um e-mail. Se formos bem-sucedidos, definiremos uma mensagem flash com o texto “Obrigado por nos contactar. Responderemos a você o mais rápido possível. ” e atualize a página.
Compreendendo as rotas
No exemplo acima, no URL, http://localhost:8080/index.php?r=site/contact, a rota é site/contact. A ação de contato (actionContact) no SiteController será executado.
Uma rota consiste nas seguintes partes−
moduleID - Se o controlador pertence a um módulo, então esta parte da rota existe.
controllerID (local no exemplo acima) - Uma string exclusiva que identifica o controlador entre todos os controladores no mesmo módulo ou aplicação.
actionID (contato no exemplo acima) - Uma string única que identifica a ação entre todas as ações dentro do mesmo controlador.
O formato da rota é controllerID/actionID. Se o controlador pertencer a um módulo, ele terá o seguinte formato:moduleID/controllerID/actionID.