Construire des applications Web à partir de zéro avec Laravel filtres, validations et fichiers

Dans cette mini-série Nettuts +, nous allons créer une application Web à partir de zéro, tout en plongeant dans un nouveau cadre génial pour PHP qui prend rapidement de l'ampleur, appelé Laravel..

Dans cette leçon, nous allons apprendre quelques fonctionnalités très utiles de Laravel: les filtres et les bibliothèques de validation et de fichiers..


La revue

Bienvenue dans nos applications Web de Scratch avec la série Laravel! Dans le deuxième tutoriel de notre mini-série, nous avons beaucoup appris sur la mise en œuvre de Laravel:

  • Quelques informations sur les «modèles»
  • Qu'est-ce que l'ORM Eloquent?
  • Comment configurer la configuration de la base de données de Laravel
  • Comment créer votre premier modèle Laravel
  • Les fonctions de base des bibliothèques Auth et Input
  • Utilisation de l'ORM Eloquent dans une vue

Si vous ne l'avez pas encore vu, je vous exhorte à consulter les première et deuxième parties de la mini-série. Cela facilitera grandement la tâche, car nous développons notre application de test., Instapics, à travers chaque partie.

Alors, commençons!


1 - Filtres Laravel

En résumé, les filtres sont des fonctions que nous pouvons exécuter sur des routes avant ou après le cycle de demande. C'est particulièrement utile pour des choses comme l'authentification et la journalisation. Pour enregistrer un filtre, nous devons ajouter quelque chose comme ceci à la application / routes.php fichier:

Route :: filter ('monfiltre', function () // Ce que vous voulez que le filtre fasse);

Après avoir enregistré le filtre, nous devons l'associer à un itinéraire, comme suit:

Route :: any ('/', array ('before' => 'filter', function () // Ce que vous voulez que la route fasse));

Dans l'exemple ci-dessus, le mon filtre déclenchera sur toute demande à la page d’index (i.e. /). Disons que nous voulions mettre en place un filtre d’authentification pour le tableau de bord route:

Route :: filter ('auth', function () if (Auth :: guest ()) return Redirect :: to ('home');); Route :: any ('dashboard', array ('before' => 'auth, function () return View :: make (' dashboard '););

Le code ci-dessus redirigera toutes les demandes non authentifiées vers le tableau de bord route vers le maison route.

Filtres globaux

Par défaut, Laravel inclut deux filtres, avant et après, qui s'exécutent avant et après chaque requête sur une application. Ce sont généralement les endroits où vous placez des éléments, tels que l'enregistrement des demandes, l'ajout d'actifs globaux ou le déclenchement d'événements globaux. Par exemple:

Route :: filter ('after', fonction ($ response) Log :: write ('request', 'Requête terminée le'. Date ('d M, Y - h: i: sA'). '. \ N \ nInformations sur la demande: \ n '. var_export (Input :: get (), true)););

Cela écrit un demande tape log message dans le journal de l'application et répertorie toutes les entrées de la requête.

Groupes de routes

Si vous appliquez le même filtre à plusieurs itinéraires, vous pouvez utiliser Groupes de routes pour les regrouper tous ensemble et réduire la répétition de code:

Route :: filter ('admin_auth', function () if (Auth :: guest () ||! Auth :: user () -> isAdmin ()) return Redirect :: to ('home'); ) Route :: group (array ('before' => 'admin_auth'), function () Route :: get ('admin', function () return View :: make ('admin');); Route: : get ('useradmin', function () return View :: make ('useradmin');););

Filtres de contrôleur

Pour les applications (comme notre propre Instapics) qui utilisent des contrôleurs, nous pouvons appliquer des filtres en utilisant le $ this-> filter () fonction dans le constructeur du contrôleur:

fonction publique __construct () $ this-> filter ('before', 'auth'); 

Ces filtres, comme les itinéraires, peuvent également être personnalisés pour s’appliquer uniquement à certains verbes HTTP et actions spécifiques du contrôleur:

public function __construct () // appelle le filtre 'log_download' pour toutes les requêtes de téléchargement / fichier GET $ this-> filter ('après', 'log_download') -> uniquement (array ('fichier')) -> on (' obtenir'); // appelle le filtre 'auth_download' pour toutes les demandes de téléchargement / *, à l'exception de l'action 'file d'attente' $ this-> filter ('before', 'auth_download') -> except (array ('file d'attente')); 

2 - Validation de Laravel

La validation intégrée de Laravel facilite l'application de la validation à n'importe quel tableau de valeurs, plus spécifiquement à la saisie de formulaire. Pour ce faire, vous devez simplement construire deux tableaux:

  • $ input - c'est un tableau associatif des valeurs que vous voulez valider.
  • $ règles - c'est un tableau associatif (avec des clés identiques au tableau $ input) qui liste les règles de validation.
// Obtenir notre entrée de la bibliothèque d'entrée $ input = Input :: all (); // Créer nos règles de validation $ rules = array ('email' => 'required | email | unique: users', 'password' => 'required'); // Obtention d'une instance de $ validation pour notre vérification d'erreur $ validation = Validator :: make ($ input, $ rules); // Vérifie si la validation a réussi si ($ validation-> échoue ()) // utilise les messages d'erreur de l'instance de validation $ validation $ - 

Règles de validation

Vous trouverez ci-dessous une liste de règles de validation pouvant être utilisées avec la bibliothèque de validation Laravel. Comme dans l'exemple ci-dessus, vous êtes libre de les mélanger et de les assortir en les séparant avec un tuyau ("|"):

  • Champs obligatoires - la valeur doit être présente dans le tableau d'entrée
     'email' => 'required'
  • alpha - la valeur ne doit contenir que des caractères alphabétiques
     'full_name' => 'alpha'
  • alpha_num - la valeur ne doit contenir que des caractères alphanumériques
     'username' => 'alpha_num'
  • alpha_dash - la valeur ne doit comporter que des caractères alphanumériques, des tirets et / ou des traits de soulignement
     'user_name' => 'alpha_dash'
  • Taille - la valeur ne devrait être que d'une longueur donnée, ou devrait être égale à si numérique
     'api_key' => 'taille: 10'
     'order_count' => 'taille: 10'
  • entre - la valeur est comprise entre une plage spécifiée
     'order_count' => 'entre: 1 100'
  • min - la valeur est au moins donnée
     'order_count' => 'min: 1'
  • max - la valeur est égale ou inférieure à la donnée
     'order_count' => 'max: 100'
  • numérique - la valeur est numérique
     'order_count' => 'numérique'
  • entier - la valeur est un entier
     'order_count' => 'entier'
  • dans - la valeur est contenue dans le donné
     'tshirt_size' => 'in: xsmall, petit, moyen, grand, xlarge'
  • pas dedans - la valeur n'est pas dans le donné
     'tshirt_size' => 'not_in: xsmall, xlarge'
  • confirmé - vérifiera si le clé_confirmation existe et est égal à la valeur
     'mot de passe' => 'confirmé'

    Cela vérifiera si le Confirmation mot de passe la valeur existe et est égale à mot de passe

  • accepté - cela vérifiera si la valeur est 'yes' ou 1. Utile pour les cases à cocher
     'terms_of_service' => 'accepté'
  • même - la valeur est la même que la valeur de l'attribut donné
     'password' => 'same: confirm_password'
  • différent - la valeur doit être différente de la valeur de l'attribut donné
     'password' => 'different: old_password'
  • rencontre - la valeur doit correspondre à l'expression régulière donnée
     'user_name' => 'correspond: / [a-zA-Z0-9] * /'
  • unique - vérifie l'unicité de la valeur dans le tableau donné.
     'user_name' => 'unique: users'

    Une colonne donnée est également acceptée si le nom de la colonne n’est pas le même que le nom de l’attribut.

     // si la colonne dans la table users est nom d'utilisateur, // nous pouvons le fournir comme suit: 'nom_utilisateur' => 'unique: utilisateurs, nom d'utilisateur'

    Parfois, nous souhaitons vérifier l'unicité, mais ignorer un certain enregistrement (généralement l'enregistrement associé à l'utilisateur actuel). Nous pouvons le faire en ajoutant une troisième donnée, qui devrait être l'ID de cet enregistrement dans la table.

     // ID 10 est l'ID d'enregistrement de l'utilisateur actuel 'nom_utilisateur' => 'unique: utilisateurs, nom_utilisateur, 10'
  • existe - la valeur devrait exister dans une table
     'category' => 'existe: categories'

    Cela accepte également une deuxième donnée si nous voulons changer le nom de la colonne à vérifier.

     'category' => 'existe: categories, nom_catégorie'
  • avant - la valeur doit être une date antérieure à la date donnée
     'publish_date' => 'avant: le 2012-07-14'
  • après - la valeur doit être une date après la date donnée
     'publish_date' => 'après: 2012-07-14'
  • email - la valeur doit être dans un format de courrier électronique valide
     'subscriber_email' => 'email'
  • url - la valeur est dans un format valide
     'github_profile' => 'url'
  • actif_url - la valeur est dans un format d'URL valide ET est actif
     'github_profile' => 'actif_url'
  • mimes - vérifie le type mime d'un fichier téléchargé. Vous pouvez utiliser n'importe quelle valeur de type mime à partir du config / mimes.php fichier
     'avatar' => 'mimes: jpg, gif, png, bmp'
  • image - le fichier doit être une image
     'avatar' => 'image'

    Vous pouvez également utiliser le max validateur ici pour vérifier la taille d'un fichier en kilo-octets

     'avatar' => 'image | max: 100'

La gestion des erreurs

Une fois que vous appelez le Validateur-> échoue () ou Validateur-> passes () méthode, la bibliothèque collecte toutes les erreurs dans une classe accessible via Validateur-> erreurs. Vous pourrez alors récupérer ces erreurs avec certaines fonctions du répertoire. les erreurs classe. Laravel fournit une fonctionnalité intéressante pour automatiser la gestion des erreurs qui convient à la plupart des scénarios POST / REDIRECT / GET:

class Register_Controller étend Base_Controller public $ restful = true; fonction publique get_index () return View :: make ('register.index');  public function post_index () $ rules = array ('email' => 'obligatoire | email | unique: utilisateurs', 'mot de passe' => 'confirmé'); $ validation = Validator :: make (Input :: get (), $ rules); if ($ validation-> échoue ()) // Envoie l'objet $ validation à la page redirigée retour Redirect :: to ('register') -> with_errors ($ validation); 

Ici, nous utilisons le avec_erreurs méthode pour la Réorienter bibliothèque. Cela lie automatiquement le $ erreurs variable dans la vue pour chaque fois que nous redirigeons - dans ce cas, le registre / index page:

$ variable variable transmise via with_errors @if ($ errors-> a ('email')) @foreach ($ errors-> get ('email', '

:message

') en tant que $ email_error) $ email_error @endforeach @endif @if ($ errors-> a ('mot de passe')) @foreach ($ erreurs-> get ('mot de passe', '

:message

') en tant que $ password_error) $ password_error @endif

Sur le fichier de vue, nous utilisons le $ errors-> a () méthode pour vérifier si une erreur existe pour ce champ spécifique. Si tel est le cas, nous utilisons ensuite le $ errors-> get () méthode pour afficher les messages d'erreur. Le deuxième paramètre de cette méthode peut être utilisé pour fournir un modèle sur la façon dont nous affichons le message d'erreur..

Messages d'erreur personnalisés

Étant donné que la plupart des utilisateurs souhaitent modifier les messages d'erreur de Laravel afin de les adapter à la marque ou à la langue de leur application, la bibliothèque de validation permet également de personnaliser les messages d'erreur générés en ajoutant simplement un $ messages tableau à la Valider :: make appel de fonction:

$ rules = array ('email' => 'required | email | unique: users', 'password' => 'confirmés'); $ messages = array ('email_required' => 'Veuillez fournir une adresse électronique', 'email_email' => 'Veuillez fournir une adresse électronique valide', 'email_unique' => 'L’adresse électronique que vous avez fournie est déjà utilisée', ' password_confirmed '=>' Votre confirmation de mot de passe ne correspond pas à votre mot de passe. '); $ validation = Validator :: make (Input :: get (), $ rules, $ messages);

Il y a deux façons de créer un $ messages tableau:

  • À base de règles - vous pouvez fournir un message personnalisé pour tous les champs validés par une certaine règle. Par exemple:
     $ messages = array ('required' => 'Le champ: attribut est obligatoire.', 'same' => 'Les attribut: et doivent être identiques.', 'size' => 'L’attribut: doit être exactement: size. ',' between '=>' L'attribut: doit être compris entre: min -: max. ',' in '=>' L'attribut: doit être de l'un des types suivants:: values ​​',);

    Cela modifiera les messages d'erreur par défaut pour tous les champs qui ont le nécessaire, même taille, entre et dans règles. Ici, nous voyons aussi que Laravel utilise des espaces réservés pour remplacer certaines valeurs dans le message d'erreur. :attribut va changer dans l'attribut du champ (sans underscores) c'est pour. :autre est utilisé pour le même règle, qui se réfère à l'autre attribut, il devrait correspondre. :Taille fait référence à la taille définie dans les paramètres de la règle. : min et : max est les valeurs minimale et maximale, et :valeurs est la liste des valeurs que nous avons spécifiées que la valeur du champ doit être.

  • Basé sur les attributs - D'autre part, vous pouvez également fournir un message personnalisé pour un attribut spécifique dans une règle spécifique. Prenons notre exemple d'en haut:
     $ messages = array ('email_required' => 'Veuillez fournir une adresse électronique', 'email_email' => 'Veuillez fournir une adresse électronique valide', 'email_unique' => 'L’adresse électronique que vous avez fournie est déjà utilisée', ' password_confirmed '=>' Votre confirmation de mot de passe ne correspond pas à votre mot de passe. ');

    Email (requis est le message d'erreur qui est utilisé lorsque le email attribut échoue le Champs obligatoires règle, email_email est le message d'erreur qui est utilisé lorsque le email échoue le email règle, et ainsi de suite.

Si vous vous retrouvez toutefois à recréer consciemment les mêmes messages personnalisés, il serait plus simple de spécifier simplement les messages d'erreur personnalisés. Vous pouvez le faire en modifiant le application / langauge / en / validation.php fichier et éditer le Douane tableau trouvé là:

… 'Custom' => array ('email_required' => 'Veuillez fournir une adresse email', 'email_email' => 'Merci de fournir une adresse email valide', 'email_unique' => 'L'adresse email que vous avez fournie est déjà utilisée ',' password_confirmed '=>' Votre confirmation de mot de passe ne correspond pas à votre mot de passe. ');… 

3 - Fichiers Laravel

Gestion des téléchargements de fichiers

De Laravel Des dossiers bibliothèque facilite le traitement des téléchargements de fichiers à l'aide du Entrée :: upload méthode, qui est un simple wrapper à la PHP move_uploaded_file une fonction:

Input :: upload ('nom_entrée', 'répertoire / dans / sauvegarde / fichier', 'nomfichier.extension');

Pour valider les téléchargements de fichiers, vous pouvez utiliser le Validateur Nous avons discuté de la bibliothèque ci-dessus comme suit:

$ input = array ('upload' => Input :: file ('upload')); $ rules = array ('upload' => 'mimes: zip, rar | max: 500'); $ validator = Validator :: make ($ input, $ rules);

Manipulation de fichier

le Des dossiers La bibliothèque dispose également de méthodes de manipulation de fichiers, telles que:

// Récupère un fichier $ data = File :: get ('path / file.extension'); // Écrire un fichier File :: put ('path / file.extension', $ data); // Ajout à un fichier File :: append ('path / file.extension', $ data);

Fonctions liées aux fichiers

Laravel fournit également des fonctionnalités générales liées aux fichiers qui peuvent être utilisées dans tout votre code. Par exemple, le Extension de fichier La méthode retourne l'extension d'une chaîne nom_fichier:

// Ceci retournera 'zip' File :: extension ('data.zip');

le Fichier :: est fonction vérifie si un fichier est d'un certain type. Notez que ceci ne vérifie pas simplement l’extension du fichier, mais utilise le Fileinfo Extension PHP pour lire le contenu réel du fichier. Ceci est utile pour déterminer qu'un fichier est en fait d'un type de fichier correct:

// Renvoie true si le fichier est un fichier zip, false si sinon File :: is ('zip', 'path / file.zip');

Une liste des extensions compatibles est visible dans application / config / mimes.php.

En parlant de types mime, vous pouvez aussi utiliser le Fichier :: mime fonction pour obtenir les types mime d'une extension. Le type mime renvoyé est basé sur le même mimes.php fichier:

// Ceci retournera image / png File :: mime ('png')

le Fichier :: cpdir et le Fichier :: rmdir les méthodes peuvent copier et supprimer un répertoire, respectivement.

File :: cpdir ('répertoire / vers / copier', 'destination / répertoire'); // File :: rmdir est une suppression récursive, elle supprimera donc tous les fichiers et dossiers du répertoire. File :: rmdir ('répertoire / to / delete');

Maintenant que nous avons tout appris sur Les filtres, la Validation bibliothèque et le Des dossiers bibliothèque, implémentons-les dans notre application, Instapics.


Étape 1 Créer un auth Filtre

Ajouter des filtres à Base_Controller

Commençons par s’assurer que nos utilisateurs ne peuvent voir que les pages authentifiées en créant un auth filtre qui s'exécute avant toutes les demandes. Puisque nous utilisons un routage basé sur le contrôleur, nous devrons configurer nos filtres dans notre contrôleur. Mettons les filtres dans le __construction méthode du Base_Controller pour s'assurer que le auth Le filtre fonctionne sur tous les contrôleurs, ce qui l'étend. Pendant que nous y sommes, ajoutons un nonauth Filtrez également pour vous assurer que les internautes ne peuvent visiter certaines pages que lorsqu'elles ne sont pas authentifiées:

class Base_Controller étend Controller public function __construct () // Assets Asset :: add ('jquery', 'js / jquery-1.7.2.min.js'); Asset :: add ('bootstrap-js', 'js / bootstrap.min.js'); Asset :: add ('bootstrap-css', 'css / bootstrap.min.css'); Asset :: add ('bootstrap-css-responsive', 'css / bootstrap-responsive.min.css', 'bootstrap-css'); Asset :: add ('style', 'css / style.css'); parent :: __ construct (); // Filtres $ class = get_called_class (); switch ($ class) case 'Home_Controller': $ this-> filter ('before', 'nonauth'); Pause; case 'User_Controller': $ this-> filter ('before', 'nonauth') -> seulement (array ('authenticate')); $ this-> filter ('before', 'auth') -> seulement (array ('logout'))); Pause; défaut: $ this-> filter ('before', 'auth'); Pause; 

Nous définissons ici que toute demande adressée au maison route nécessitera un utilisateur non authentifié, ce qui est bien car c'est là que se trouve l'écran de connexion. Toute autre demande nécessitera par défaut un utilisateur authentifié. Pour le User_Controller, nous avons en fait deux méthodes distinctes qui requièrent à la fois des utilisateurs non authentifiés (authentifier) ​​et des utilisateurs authentifiés (déconnexion), nous utilisons donc seulement méthode permettant de spécifier les actions de contrôleur auxquelles les filtres s'appliquent.

Créer des définitions de filtres dans routes.php

Ouvert application / routes.php, qui est où nous définirons la auth et nonauth filtres. Prenez note que vous avez peut-être déjà un existant auth la définition du filtre, il suffit donc de la remplacer par celle ci-dessous:

Route :: filter ('auth', function () if (Auth :: guest ()) renvoie Redirect :: to ('home');); Route :: filter ('nonauth', function () if (Auth :: guest () == false) renvoie Redirect :: to ('tableau de bord'););

dans le auth filtrer, nous vérifions si un utilisateur est authentifié avec le Auth bibliothèque. Si l'utilisateur n'est pas authentifié, nous le redirigeons vers le maison route où se trouve l'écran de connexion, sinon, ils sont autorisés à continuer. La même chose avec le nonauth filter - vérifie si l'utilisateur est authentifié, s'il l'est, puis le redirige vers le tableau de bord.


Étape 2: implémentation des téléchargements utilisateur

Créer un formulaire de téléchargement de photo

Maintenant que nous en savons un peu plus sur la gestion des téléchargements de fichiers dans Laravel, commençons à mettre en œuvre l’un des Instapics'caractéristiques principales - télécharger des photos. Commencez par créer un dossier appelé application / vues / plugins créer un fichier d’affichage de lame nommé upload_modal.blade.php. Collez le code HTML suivant:

Télécharger un nouvel Instapic

Annuler

Créer le bouton déclencheur

Déclenchez cette forme modale avec un bouton - ajoutez ceci dans application / views / layouts / main.blade.php, après le .nav-collapse div:

    @section ('navigation')
  • Accueil
  • @yield_section
@section ('post_navigation') @if (Auth :: check ()) @include ('plugins.loggedin_postnav') @endif @yield_section

Ici, nous incluons un fichier de vue appelé logué_postnav si l'utilisateur est connecté. C'est ici que nous ajouterons le bouton pour le formulaire de téléchargement modal. Dans le même fichier, ajoutez-le après le .récipient div:

@yield ('content')

© Instapics 2012

@section ('modals') @if (Auth :: check ()) @include ('plugins.upload_modal') @endif @yield_section

C’est là que nous incluons le upload_modal HTML. Nous nous assurons cependant que l'utilisateur n'est pas connecté avant d'inclure ce fichier HTML, car comme le déclencheur de bouton, cela ne serait pas vraiment nécessaire si l'utilisateur n'était pas authentifié..

Maintenant, créez application / views / plugins / login_postnav.blade.php

Actualisez la page et vous devriez voir le nouveau bouton de téléchargement - cliquez dessus pour voir que ça fonctionne!

Connecter le formulaire au contrôleur approprié

Maintenant que nos éléments front-office fonctionnent, commençons par travailler sur la partie dorsale du formulaire. Créer application / contrôleurs / photo.php, et insérez le code suivant pour le contrôleur:

class Photo_Controller étend Base_Controller fonction publique action_upload () $ input = Input :: all (); $ extension = File :: extension ($ input ['photo'] ['name']); $ directory = path ('public'). 'uploads /'. sha1 (Auth :: user () -> id); $ filename = sha1 (Auth :: user () -> id.time ()). ". $ extension"; $ upload_success = Input :: upload ('photo', $ répertoire, $ nom du fichier); if ($ upload_success) Session :: flash ('status_success', 'Nouvel Instapic téléchargé avec succès');  else Session :: flash ('status_error', 'Une erreur s'est produite lors du téléchargement du nouvel Instapic - veuillez réessayer.');  if ($ upload_success) $ photo = new Photo (array ('location' => URL :: to ('uploads /'. sha1 (Auth :: user () -> id),. '.'. '. $ nomfichier) , 'description' => $ input ['description'])); Auth :: user () -> photos () -> insert ($ photo);  return Redirect :: to ('tableau de bord'); 

Essayez-le - vous devriez pouvoir commencer à télécharger de nouveaux Instapics.

Ajouter une validation au formulaire de téléchargement

Ajoutons quelques règles de validation à cela pour nous assurer que l'utilisateur ne soumet que les éléments corrects. Mettez à jour le contrôleur avec les éléments suivants:

class Photo_Controller étend Base_Controller fonction publique action_upload () $ input = Input :: all (); if (isset ($ input ['description'])) $ input ['description'] = filtre_var ($ input ['description'], FILTER_SANITIZE_STRING, FILTER_FLAG_NO_ENCODE_QUOTES);  $ rules = array ('photo' => 'requis | image | max: 500', // le téléchargement de photos doit être une image et ne doit pas dépasser 500 Ko 'description' => 'obligatoire' // une description est requise); $ validation = Validator :: make ($ input, $ rules); if ($ validation-> fail ()) return Redirect :: to ('tableau de bord') -> with_errors ($ validation);  $ extension = File :: extension ($ input ['photo'] ['name']); $ directory = path ('public'). 'uploads /'. sha1 (Auth :: user () -> id); $ filename = sha1 (Auth :: user () -> id.time ()). ". $ extension"; $ upload_success = Input :: upload ('photo', $ répertoire, $ nom du fichier); if ($ upload_success) $ photo = new Photo (array ('location' => URL :: to ('uploads /'. sha1 (Auth :: user () -> id)...). '/'. $ nomfichier), 'description' => $ input ['description'])); Auth :: user () -> photos () -> insert ($ photo); Session :: flash ('status_success', 'Téléchargé avec succès votre nouvel Instapic');  else Session :: flash ('status_error', 'Une erreur s'est produite lors du téléchargement de votre nouvel Instapic - veuillez réessayer.');  return Redirect :: to ('tableau de bord'); 

Voyez comment nous validons l'entrée? Nous nous assurons que la photo est présente, une image et moins de 500kb. Nous nous assurons également que la description est présente après l'assainissement. Cependant, nous ne pourrons pas encore voir nos messages d'erreur. Corrigeons-le en ajoutant du code HTML pour afficher nos messages d'erreur. Ouvrir application / views / layouts / main.blade.php et ajoutez ce qui suit à l'intérieur du .récipient div:

@include ('plugins.status') @yield ('content')

© Instapics 2012

Maintenant, créez application / views / plugins / status.blade.php. C'est ici que nous allons rendre les messages d'erreur réels. Nous ajouterons également un support pour les messages d’état basés sur les sessions (comme celui que nous utilisons dans $ upload_success vérifier sur le Photos code du contrôleur):

@if (isset ($ errors) && count ($ errors-> all ())> 0) 
×

Oh Snap!

    @foreach ($ errors-> all ('
  • :message
  • ') en tant que $ message) $ message @endforeach
@elseif (! is_null (Session :: get ('status_error'))))
×

Oh Snap!

@if (is_array (Session :: get ('status_error')))
    @foreach (Session :: get ('status_error') en tant que $ error)
  • $ error
  • @endforeach
@else Session :: get ('status_error') @endif
@endif @if (! is_null (Session :: get ('status_success'))))
×

Succès!

@if (is_array (Session :: get ('status_success'))))
    @foreach (Session :: get ('status_success') en tant que $ success)
  • $ succès
  • @endforeach
@else Session :: get ('status_success') @endif
@fin si

Essayez de provoquer maintenant des erreurs sur le formulaire de téléchargement en soumettant sans aucun fichier sélectionné ou sans description (car les deux sont obligatoires). Vous devriez voir les messages d'erreur en cours de rendu en haut:


Étape 3 Ajouter la validation au formulaire d'inscription et de connexion

Maintenant que nous savons utiliser Laravel Validation bibliothèque, revoyons notre premier formulaire - le formulaire de connexion et d’inscription. Pour le moment, nous utilisons simplement un écho pour voir que la connexion ou l'enregistrement a échoué - remplaçons cela par une validation appropriée. Ouvrir application / controllers / user.php et le mettre à jour comme suit:

class User_Controller étend Base_Controller fonction publique action_authenticate () $ email = Input :: get ('email'); $ password = Input :: get ('mot de passe'); $ new_user = Input :: get ('new_user', 'off'); $ input = array ('email' => $ email, 'password' => $ mot_de_passe); if ($ new_user == 'on') $ rules = array ('email' => 'required | email | unique: users', 'password' => 'required'); $ validation = Validator :: make ($ input, $ rules); if ($ validation-> failed ()) return Redirect :: to ('home') -> with_errors ($ validation);  essayer $ utilisateur = nouvel utilisateur (); $ utilisateur-> email = $ email; $ utilisateur-> mot de passe = Hash :: make ($ mot de passe); $ user-> save (); Auth :: login ($ user