Créer l'action
Une fois qu'on a créé le modèle, on peut commencer à écrire la logique nécessaire à la manipulation du modèle. Cette logique est placée au sein d'une action d'un contrôleur. Dans l'exemple du formulaire de connection, on utilise le code suivant:
Ci dessus, on crée tout d'abord une instance du modèle LoginForm
; si c'est une requète
POST (signifiant que le formulaire de connection à été soumis par l'utilisateur), on
fourni au $model
les données soumises $_POST['LoginForm']
; puis l'on valide ces données
et si la validation réussie, on redirige le navigateur de l'utilisateur vers la page
qui nécessitait l'authentification. Si la validation échoue, ou si l'action est accédée
pour la premier fois, on affiche la vue login
avec le contenu qui va être décrit dans
la section qui suit.
Tip: Dans l'action
login
, on utiliseYii::app()->user->returnUrl
pour récupérer l'URL de la page qui nécessitait l'authentification. Le componentYii::app()->user
est de type CWebUser (ou une de ses classes héritées) représentant l'information sur la session utilisateur (par exemple username, status). Pour plus de détails, voir Authentication and Authorization.
Regardons plus attentivement l'opération PHP suivante qui apparait dans l'action login
:
Comme décrit dans Sécuriser l'assignation des attributs,
cette ligne de code rempli le modèle avec les données soumises par l'utilisateur.
La propriété attributes
est défini par CModel qui attend un tableau de paires de noms-valeurs
et assigne chaque valeur à l'attribut correspondant dans le modèle. Ainsi si $_POST['LoginForm']
renvoie
un tableau, le code ci dessus serait équivalent au code beaucoup plus long ci dessous (chaque attribut doit
être présent dans le tableau):
Note: Afin que
$_POST['LoginForm']
puisse retourner un tableau au lieu d'une chaine de caractères, on devra respecter une convention lors du nommage des noms des champs dans la vue. En particulier, pour un champ correspondant à l'attributa
du modèle de classeC
, on nomera celui ciC[a]
. Par example, on utiliseraitLoginForm[username]
comme nom pour le champ correspondant à l'attributusername
.
Il reste maintenant à créer la vue login
qui contiendra un formulaire HTML avec les champs nécessaires.