Yii - Controller
I responsabili del trattamento sono responsabili dell'elaborazione delle richieste e della generazione delle risposte. Dopo la richiesta dell'utente, il controller analizzerà i dati della richiesta, li passerà al modello, quindi inserirà il risultato del modello in una vista e genererà una risposta.
Capire le azioni
I controller includono azioni. Sono le unità di base che l'utente può richiedere per l'esecuzione. Un controller può avere una o più azioni.
Diamo uno sguardo al file SiteController del modello di applicazione di 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]);
}
}
?>
Esegui il modello di applicazione di base utilizzando il server integrato PHP e vai al browser web all'indirizzo http://localhost:8080/index.php?r=site/contact. Vedrai la pagina seguente -
Quando apri questa pagina, l'azione di contatto del file SiteControllerviene eseguito. Il codice carica prima il fileContactFormmodello. Quindi esegue il rendering della vista del contatto e vi passa il modello.
Se compili il modulo e fai clic sul pulsante di invio, vedrai quanto segue:
Si noti che questa volta viene eseguito il codice seguente:
if ($model->load(Yii::$app->request->post()) && $model->contact(Yii::$app>params ['adminEmail'])) { Yii::$app->session->setFlash('contactFormSubmitted');
return $this->refresh();
}
Se c'era una richiesta POST, assegniamo i dati POST al modello e proviamo a inviare un'e-mail. Se abbiamo successo, impostiamo un messaggio flash con il testo "Grazie per averci contattato. Ti risponderemo il prima possibile. " e aggiorna la pagina.
Capire le rotte
Nell'esempio sopra, nell'URL, http://localhost:8080/index.php?r=site/contact, il percorso è site/contact. L'azione di contatto (actionContact) nel SiteController sarà eseguito.
Una rotta consiste delle seguenti parti:
moduleID - Se il controller appartiene a un modulo, questa parte del percorso esiste.
controllerID (sito nell'esempio precedente) - Una stringa univoca che identifica il controller tra tutti i controller all'interno dello stesso modulo o applicazione.
actionID (contatto nell'esempio precedente) - Una stringa univoca che identifica l'azione tra tutte le azioni all'interno dello stesso controller.
Il formato del percorso è controllerID/actionID. Se il controller appartiene a un modulo, ha il seguente formato:moduleID/controllerID/actionID.