Yii - Contrôleurs
Les contrôleurs sont responsables du traitement des demandes et de la génération des réponses. Après la demande de l'utilisateur, le contrôleur analysera les données de la demande, les transmettra au modèle, puis insérera le résultat du modèle dans une vue et générera une réponse.
Comprendre les actions
Les contrôleurs incluent des actions. Ce sont les unités de base que l'utilisateur peut demander pour l'exécution. Un contrôleur peut avoir une ou plusieurs actions.
Jetons un œil à la SiteController du modèle d'application de base -
<?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]);
}
}
?>
Exécutez le modèle d'application de base à l'aide du serveur intégré PHP et accédez au navigateur Web à l'adresse http://localhost:8080/index.php?r=site/contact. Vous verrez la page suivante -
Lorsque vous ouvrez cette page, l'action de contact du SiteControllerest exécuté. Le code charge d'abord leContactFormmodèle. Ensuite, il restitue la vue de contact et y passe le modèle.
Si vous remplissez le formulaire et cliquez sur le bouton Soumettre, vous verrez ce qui suit -
Notez que cette fois, le code suivant est exécuté -
if ($model->load(Yii::$app->request->post()) && $model->contact(Yii::$app>params ['adminEmail'])) { Yii::$app->session->setFlash('contactFormSubmitted');
return $this->refresh();
}
S'il y a eu une demande POST, nous attribuons les données POST au modèle et essayons d'envoyer un e-mail. Si nous réussissons, nous définissons un message flash avec le texte «Merci de nous avoir contactés. Nous vous répondrons dans les plus brefs délais. » et actualisez la page.
Comprendre les itinéraires
Dans l'exemple ci-dessus, dans l'URL, http://localhost:8080/index.php?r=site/contact, la route est site/contact. L'action de contact (actionContact) dans le SiteController sera exécuté.
Un itinéraire comprend les parties suivantes:
moduleID - Si le contrôleur appartient à un module, alors cette partie de la route existe.
controllerID (site dans l'exemple ci-dessus) - Une chaîne unique qui identifie le contrôleur parmi tous les contrôleurs du même module ou application.
actionID (contact dans l'exemple ci-dessus) - Une chaîne unique qui identifie l'action parmi toutes les actions du même contrôleur.
Le format de l'itinéraire est controllerID/actionID. Si le contrôleur appartient à un module, il a le format suivant:moduleID/controllerID/actionID.