In deze Nettuts + miniserie bouwen we een geheel nieuwe webtoepassing, terwijl we duiken in een geweldig nieuw PHP-framework dat snel stoom oppikt, genaamd Laravel.
In deze les leren we enkele zeer nuttige Laravel-functies: filters, en zowel de validatie- als de bestandenbibliotheken.
Welkom terug bij onze webapplicaties van Scratch met Laravel-serie! In de tweede zelfstudie van onze miniserie hebben we veel geleerd over de implementatie van ORM door Laravel:
Als je het nog niet hebt gezien, raad ik je aan het eerste en tweede deel van de minireeks te bekijken - het zal het aanzienlijk gemakkelijker maken om mee te volgen, terwijl we onze testtoepassing bouwen, Instapics, door elk deel.
Dus laten we beginnen!
Samengevat zijn filters functies die we op routes kunnen uitvoeren voor
of na
de aanvraagcyclus. Het is vooral handig voor zaken als authenticatie en logging. Om een filter te registreren, moeten we iets als het volgende toevoegen aan de application / routes.php het dossier:
Route :: filter ('myfilter', function () // Wat u wilt dat het filter doet);
Nadat we het filter hebben geregistreerd, moeten we het aan een route koppelen, zoals:
Route :: any ('/', array ('before' => 'filter', functie () // Wat wilt u dat de route doet));
In het bovenstaande voorbeeld, de myfilter
activeert op alle verzoeken naar de indexpagina (d.w.z.. /). Laten we zeggen dat we een authenticatiefilter wilden implementeren voor de dashboard
route:
Route :: filter ('auth', function () if (Auth :: guest ()) return Redirect :: to ('home');); Route :: any ('dashboard', array ('before' => 'auth, function () return View :: make (' dashboard '););
De bovenstaande code leidt alle niet-geverifieerde verzoeken om naar de dashboard route naar de huis route.
Laravel bevat standaard twee filters, voor
en na
, die voor en na elke aanvraag voor een toepassing worden uitgevoerd. Dit zijn meestal waar u dingen plaatst, zoals aanvraag logging, het toevoegen van globale activa of het vuren van wereldwijde evenementen. Bijvoorbeeld:
Route :: filter ('na', functie ($ antwoord) Log :: write ('request', 'Request finished on'. Date ('d M, Y - h: i: sA'). '. \ N \ nReisinformatie: \ n '. var_export (Input :: get (), true)););
Dit schrijft een verzoek
typ het logbericht in het log van de toepassing en vermeldt elke invoer van het verzoek.
Als u merkt dat u hetzelfde filter op meerdere routes toepast, kunt u er gebruik van maken Routegroepen om ze allemaal samen te groeperen en de codeherhaling te verminderen:
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');););
Voor applicaties (zoals onze eigen Instapics) die gebruik maken van controllers, kunnen we filters toepassen met behulp van de $ This-> filter ()
functie in de constructor van de controller:
openbare functie __construct () $ this-> filter ('before', 'auth');
Deze filters, zoals routes, kunnen ook worden aangepast zodat ze alleen van toepassing zijn op bepaalde HTTP-werkwoorden en specifieke acties van de controller:
openbare functie __construct () // roep 'log_download' filter voor alle download / bestand GET verzoekt $ this-> filter ('after', 'log_download') -> only (array ('file')) -> on (' krijgen'); // roep het 'auth_download'-filter voor alle download / * -verzoeken, met uitzondering van de actie' wachtrij '$ this-> filter (' before ',' auth_download ') -> except (array (' queue '));
Laravel's ingebouwde validatie maakt het eenvoudig om validatie toe te passen op elke reeks waarden, meer specifiek, formulierinvoer. Hiervoor moet u gewoon twee arrays maken:
// Ontvang onze input van de Input-bibliotheek $ input = Input :: all (); // Maak onze validatieregels $ rules = array ('email' => 'verplicht | email | unique: users', 'password' => 'verplicht'); // Een $ validatie-exemplaar krijgen voor onze foutcontrole $ validation = Validator :: make ($ input, $ rules); // Controleer of de validatie is gelukt als ($ validatie-> mislukt ()) // iets doet met de foutmeldingen van de $ validatie instantie $ validatie-> fouten;
Hieronder vindt u een lijst met validatieregels die kunnen worden gebruikt met de Laravel-validatiebibliotheek. Net als in het bovenstaande voorbeeld, bent u vrij om deze te combineren door ze te scheiden met een pijp ("|"):
verplicht
- de waarde moet aanwezig zijn in de invoerarray 'email' => 'verplicht'
alpha
- de waarde mag alleen uit alfabetische tekens bestaan 'volledige naam' => 'alpha'
alpha_num
- de waarde moet alleen uit alfanumerieke tekens bestaan 'gebruikersnaam' => 'alpha_num'
alpha_dash
- de waarde moet alleen bestaan uit alfanumerieke tekens, streepjes en / of onderstrepingstekens 'gebruikersnaam' => 'alpha_dash'
grootte
- de waarde zou alleen van een gegeven lengte moeten zijn, of zou gelijk moeten zijn aan als numeriek 'api_key' => 'grootte: 10'
'order_count' => 'grootte: 10'
tussen
- de waarde is inclusief een bepaald bereik 'order_count' => 'tussen: 1,100'
min
- de waarde is op zijn minst de gegeven 'order_count' => 'min: 1'
max
- de waarde is gelijk aan of kleiner dan de gegeven waarde 'order_count' => 'max: 100'
numerieke
- de waarde is numeriek 'order_count' => 'numeriek'
geheel getal
- de waarde is een geheel getal 'order_count' => 'integer'
in
- de waarde is vervat in het gegeven 'tshirt_size' => 'in: xsmall, small, medium, large, xlarge'
niet in
- de waarde staat niet in de gegeven 'tshirt_size' => 'not_in: xsmall, xlarge'
bevestigd
- zal controleren of de sleutel_bevestiging
bestaat en is gelijk aan de waarde 'wachtwoord' => 'bevestigd'
Dit zal controleren of het wachtwoordbevestiging
waarde bestaat en is gelijk aan wachtwoord
aanvaard
- dit zal controleren of de waarde is ingesteld op 'Ja' of 1. Handig voor selectievakjes 'terms_of_service' => 'geaccepteerd'
dezelfde
- de waarde is hetzelfde als de waarde van het gegeven attribuut 'wachtwoord' => 'zelfde: confirm_password'
verschillend
- de waarde moet verschillen van de waarde van het gegeven attribuut 'wachtwoord' => 'anders: old_password'
wedstrijd
- de waarde moet overeenkomen met de gegeven reguliere expressie 'user_name' => 'match: / [a-zA-Z0-9] * /'
uniek
- controleert op uniciteit van de waarde in de gegeven tabel. 'user_name' => 'uniek: gebruikers'
Een gegeven kolom wordt ook geaccepteerd als de kolomnaam niet hetzelfde is als de kenmerknaam.
// als de kolom in de tabel gebruikers de gebruikersnaam is, // kunnen we deze in de gegeven geven zoals: 'gebruikersnaam' => 'uniek: gebruikers, gebruikersnaam'
Er zijn tijden dat we willen controleren op uniciteit, maar een bepaald record negeren (meestal het record dat is gekoppeld aan de huidige gebruiker). We kunnen dit doen door een derde gegeven toe te voegen, wat de ID van dat record in de tabel zou moeten zijn.
// ID 10 is de record-ID van de huidige gebruiker 'user_name' => 'unique: users, user_name, 10'
bestaat
- de waarde zou in een tabel moeten bestaan 'categorie' => 'bestaat: categorieën'
Dit accepteert ook een tweede gegeven als we de kolomnaam willen wijzigen om te controleren.
'categorie' => 'bestaat: categorieën, categorie_naam'
voor
- de waarde moet een datum vóór de opgegeven datum zijn 'publish_date' => 'before: 2012-07-14'
na
- de waarde moet een datum na de opgegeven datum zijn 'publish_date' => 'after: 2012-07-14'
e-mail
- de waarde moet in een geldig e-mailformaat zijn 'subscriber_email' => 'email'
url
- de waarde is in een geldige URL-indeling 'github_profile' => 'url'
active_url
- de waarde is in een geldig URL-formaat EN is actief 'github_profile' => 'active_url'
mimespelers
- controleert op het mime-type van een geüpload bestand. U kunt elke mime-achtige waarde van de gebruiken config / mimes.php het dossier 'avatar' => 'mimespel: jpg, gif, png, bmp'
beeld
- het bestand zou een afbeelding moeten zijn 'avatar' => 'afbeelding'
U kunt ook de max
validator hier om te controleren op de bestandsgrootte in kilobytes
'avatar' => 'afbeelding | max: 100'
Als je eenmaal de Validator-> mislukt ()
of Validator-> passeert ()
methode verzamelt de bibliotheek alle fouten in een klasse die toegankelijk is via Validator-> fouten
. U kunt deze fouten vervolgens ophalen met enkele functies in de fouten
klasse. Laravel biedt een aantal coole functies om foutafhandeling te automatiseren die past in de meeste POST / REDIRECT / GET-scenario's:
class Register_Controller breidt Base_Controller uit public $ restful = true; openbare functie get_index () return View :: make ('register.index'); public function post_index () $ rules = array ('email' => 'verplicht | email | unique: users', 'password' => 'confirmed'); $ validation = Validator :: make (Input :: get (), $ rules); if ($ validation-> failed ()) // Verzend het $ -validatie-object naar de omgeleide pagina return Redirect :: to ('register') -> with_errors ($ validation);
Hier gebruiken we de with_errors
methode voor de redirect
bibliotheek. Dit bindt automatisch de $ fouten
variabele in de weergave voor waar we ook omleiden - in dit geval de register / index
pagina:
In het weergavebestand gebruiken we de $ Errors-> heeft ()
methode om te controleren of er een fout bestaat voor dat specifieke veld. Als dat het geval is, gebruiken we de $ Errors-> get ()
methode om de foutmeldingen weer te geven. De tweede parameter in deze methode kan worden gebruikt om een sjabloon te bieden voor de manier waarop we het foutbericht weergeven.
Aangezien de meeste mensen de foutmeldingen voor Laravel zouden willen aanpassen aan de merknaam of taal van hun applicatie, biedt de validatiebibliotheek ook de mogelijkheid om de foutmeldingen aan te passen die worden gegenereerd door simpelweg een $ messages
array naar de Valideren :: maken
functieaanroep:
$ rules = array ('email' => 'verplicht | email | unique: gebruikers', 'wachtwoord' => 'bevestigd'); $ messages = array ('email_required' => 'Geef een e-mailadres op', 'email_email' => 'Geef een geldig e-mailadres op', 'email_unique' => 'Het e-mailadres dat je hebt opgegeven is al in gebruik', ' password_confirmed '=>' Uw wachtwoordbevestiging kwam niet overeen met uw wachtwoord. '); $ validation = Validator :: make (Input :: get (), $ rules, $ messages);
Er zijn twee manieren om een te maken $ messages
array:
$ messages = array ('verplicht' => 'Het: attribuut veld is verplicht.', 'same' => 'Het: attribuut en: ander moet overeenkomen.', 'size' => 'Het: attribuut moet exact zijn: size. ',' between '=>' Het: attribuut moet liggen tussen: min -: max. ',' in '=>' Het: attribuut moet een van de volgende types zijn:: values ',);
Hierdoor worden de standaard foutmeldingen voor alle velden met de vereist, zelfde, grootte, tussen en in
reglement. Hier zien we ook dat Laravel placeholders gebruikt om bepaalde waarden in het foutbericht te vervangen. :attribuut
zal veranderen in het veld attribuut (zonder onderlijnen) waar het voor is. : andere
wordt gebruikt voor de dezelfde
regel, die verwijst naar het andere kenmerk dat moet overeenkomen. :grootte
verwijst naar de gedefinieerde grootte in de regelparameters. : min
en : max
is de minimum en maximum waarden, en : waarden
is de lijst met waarden die we hebben opgegeven en die de waarde van het veld moet bevatten.
$ messages = array ('email_required' => 'Geef een e-mailadres op', 'email_email' => 'Geef een geldig e-mailadres op', 'email_unique' => 'Het e-mailadres dat je hebt opgegeven is al in gebruik', ' password_confirmed '=>' Uw wachtwoordbevestiging kwam niet overeen met uw wachtwoord. ');
Email (verplicht
is de foutmelding die wordt gebruikt wanneer de e-mail
attribuut mislukt de verplicht
regel, email_email
is de foutmelding die wordt gebruikt wanneer de e-mail
mislukt het e-mail
regel, enzovoort.
Als u echter merkt dat u dezelfde aangepaste berichten opnieuw maakt, is het eenvoudiger om alleen de aangepaste foutberichten globaal op te geven. U kunt dat doen door de application / langauge / nl / validation.php bestand, en bewerken van de gewoonte
array daar gevonden:
... 'custom' => array ('email_required' => 'Geef een e-mailadres op', 'email_email' => 'Geef een geldig e-mailadres op', 'email_unique' => 'Het e-mailadres dat u heeft opgegeven, wordt al gebruikt ',' password_confirmed '=>' Uw wachtwoordbevestiging kwam niet overeen met uw wachtwoord. '); ...
Laravel's bestanden bibliotheek maakt het gemakkelijk om bestandsuploads af te handelen met behulp van de Input :: upload
methode, die een eenvoudige omslag is naar de PHP's move_uploaded_file
functie:
Input :: upload ('input_name', 'directory / to / save / file', 'filename.extension');
Om de bestandsuploads te valideren, kunt u de Validator
bibliotheek die we hierboven bespraken als volgt:
$ input = array ('upload' => Input :: bestand ('upload')); $ rules = array ('upload' => 'mimespel: zip, rar | max: 500'); $ validator = Validator :: make ($ invoer, $ regels);
De bestanden bibliotheek heeft ook enkele methoden voor bestandsmanipulatie, zoals:
// Krijg een bestand $ data = Bestand :: get ('path / file.extension'); // Schrijf een bestand Bestand :: put ('path / file.extension', $ data); // Aan een bestand toevoegen Bestand :: toevoegen ('path / file.extension', $ data);
Laravel biedt ook enkele algemene bestandsgerelateerde functionaliteiten die overal in uw code kunnen worden gebruikt. Bijvoorbeeld de Bestandsextensie
methode retourneert de extensie van een tekenreeksbestandsnaam:
// Dit zal 'zip' retourneren Bestand :: extension ('data.zip');
De File :: is
functie controleert of een bestand van een bepaald type is. Merk op dat dit niet alleen de extensie van het bestand controleert, maar de Bestandsinformatie
PHP-extensie om de daadwerkelijke inhoud van het bestand te lezen. Dit is handig om te bepalen of een bestand daadwerkelijk van het juiste bestandstype is:
// Geeft true als het bestand een zipbestand is, false als anders Bestand :: is ('zip', 'path / file.zip');
Een lijst met compatibele uitbreidingen is te vinden in application / config / mimes.php.
Over mime typen gesproken, je kunt ook de File :: mime
functie om de mime-typen van een extensie te krijgen. Het geretourneerde mime-type is op dezelfde gebaseerd mimes.php het dossier:
// Dit zal image / png teruggeven Bestand :: mime ('png')
De File :: cpdir
en de File :: rmdir
methoden kunnen respectievelijk een map kopiëren en verwijderen.
Bestand :: cpdir ('directory / to / copy', 'destination / directory'); // Bestand :: rmdir is een recursieve verwijdering, dus het zal alle bestanden en mappen binnen de map verwijderen. File :: rmdir ( 'directory / aan / verwijderen');
Nu hebben we alles geleerd over filters, de bevestiging bibliotheek en de bestanden bibliotheek, laten we ze implementeren in onze applicatie, Instapics.
auth
FilterBase_Controller
Laten we beginnen door ervoor te zorgen dat onze gebruikers alleen geverifieerde pagina's kunnen zien door een te maken auth
filter dat voor alle aanvragen wordt uitgevoerd. Omdat we controller-based routing gebruiken, moeten we onze filters configureren in onze controller. Laten we de filters in de plaatsen __construct
methode van de Base_Controller
om ervoor te zorgen dat auth
filter werkt op alle controllers die het uitbreiden. Terwijl we bezig zijn, laten we er een toevoegen nonauth
filter ook om ervoor te zorgen dat mensen alleen bepaalde pagina's kunnen bezoeken als ze niet zijn geverifieerd:
class Base_Controller breidt Controller uit public function __construct () // Assets Asset :: add ('jquery', 'js / jquery-1.7.2.min.js'); Activa :: add ('bootstrap-js', 'js / bootstrap.min.js'); Activa :: add ('bootstrap-css', 'css / bootstrap.min.css'); Activa :: add ('bootstrap-css-responsive', 'css / bootstrap-responsive.min.css', 'bootstrap-css'); Activa :: add ('style', 'css / style.css'); bovenliggende :: __ construct (); // Filters $ class = get_called_class (); switch ($ class) case 'Home_Controller': $ this-> filter ('before', 'nonauth'); breken; case 'User_Controller': $ this-> filter ('before', 'nonauth') -> only (array ('authenticate')); $ this-> filter ('before', 'auth') -> only (array ('logout')); breken; standaard: $ this-> filter ('before', 'auth'); breken;
Hier definiëren we dat alle verzoeken aan de huis
route vereist een niet-geauthenticeerde gebruiker, wat goed is omdat dit het beginscherm is. Bij elk ander verzoek is standaard een geverifieerde gebruiker vereist. Voor de User_Controller
, we hebben eigenlijk twee afzonderlijke methoden die zowel niet-geverifieerde gebruikers (authenticeren) als geverifieerde gebruikers vereisen (uitloggen), dus we maken gebruik van de enkel en alleen
methode om aan te geven op welke controlleracties de filters van toepassing zijn.
routes.php
Nu open application / routes.php, dat is waar we de auth
en nonauth
filters. Houd er rekening mee dat je misschien al een bestaande hebt auth
filterdefinitie dus vervang deze gewoon door degene die we hieronder hebben:
Route :: filter ('auth', function () if (Auth :: guest ()) return Redirect :: to ('home');); Route :: filter ('nonauth', function () if (Auth :: guest () == false) return Redirect :: to ('dashboard'););
In de auth
filter, we controleren of een gebruiker is geverifieerd met de Auth
bibliotheek. Als de gebruiker niet is geverifieerd, leiden we ze terug naar de huis
route waar het inlogscherm zich bevindt, anders mogen ze doorgaan. Hetzelfde met de nonauth
filter - controleer of de gebruiker is geverifieerd, zo ja, leid hem dan om naar het dashboard.
Nu we iets meer weten over het omgaan met bestandsuploads in Laravel, laten we beginnen met de implementatie van een van Instapics'belangrijkste functies - foto's uploaden. Begin met het creëren van een map genaamd application / views / plugins map, en daarbinnen een Blade view-bestand met de naam upload_modal.blade.php. Plak de volgende HTML:
Upload een nieuwe Instapic
annuleren
Laten we deze modale vorm activeren met een knop - voeg dit toe application / views / layouts / main.blade.php, na de .nav-collapse
div:
@section ('post_navigation') @if (Auth :: check ()) @include ('plugins.loggedin_postnav') @endif @yield_section@section ( 'vaart')
- Huis
@yield_section
Hier nemen we een weergavebestand met de naam loggedin_postnav
als de gebruiker is ingelogd. Dit is waar we de knop voor het modale uploadformulier zullen toevoegen. Voeg in hetzelfde bestand dit toe na de .houder
div:
@yield ( 'content')@section ('modals') @if (Auth :: check ()) @include ('plugins.upload_modal') @endif @yield_section
Dit is waar we de upload_modal
HTML. We zorgen er echter voor dat de gebruiker niet is ingelogd voordat dit HTML-bestand wordt opgenomen, omdat dit, net als de knoptrigger, niet echt nodig is als de gebruiker niet is geverifieerd.
Nu, creëer application / views / plugins / loggedin_postnav.blade.php
Ververs de pagina en je zou de nieuwe uploadknop moeten zien - klik erop om te zien dat het werkt!
Nu we onze front-end dingen hebben laten werken, laten we gaan werken aan het back-end gedeelte van het formulier. creëren application / controllers / photo.php, en plaats de volgende code voor de controller:
class Photo_Controller breidt Base_Controller uit public function action_upload () $ input = Input :: all (); $ extension = Bestand :: extensie ($ input ['photo'] ['name']); $ directory = pad ('public'). 'uploads /'. sha1 (Auth :: user () -> id); $ filename = sha1 (Auth :: user () -> id.time ()). ". $ extension"; $ upload_success = Input :: upload ('photo', $ directory, $ filename); if ($ upload_success) Session :: flash ('status_success', 'succesvol geüpload nieuw instapic'); else Session :: flash ('status_error', 'Er is een fout opgetreden bij het uploaden van een nieuw Instapic - probeer het opnieuw.'); if ($ upload_success) $ photo = new Photo (array) ('location' => URL :: to ('uploads /'. sha1 (Auth :: user () -> id). '/'. $ bestandsnaam) , 'description' => $ input ['description'])); Auth :: gebruiker () -> foto's () -> invoegen ($ foto); retourneer Omleiding :: naar ('dashboard');
Probeer het maar eens - u zou moeten kunnen beginnen met het uploaden van nieuwe Instapics.
Laten we hier een aantal validatieregels toevoegen om ervoor te zorgen dat de gebruiker alleen de juiste dingen verzendt. Werk de controller bij met het volgende:
class Photo_Controller breidt Base_Controller uit public function action_upload () $ input = Input :: all (); if (isset ($ input ['description'])) $ input ['description'] = filter_var ($ input ['description'], FILTER_SANITIZE_STRING, FILTER_FLAG_NO_ENCODE_QUOTES); $ rules = array ('photo' => 'required | image | max: 500', // foto upload moet een afbeelding zijn en mag niet groter zijn dan 500kb 'description' => 'required' // beschrijving is verplicht); $ validation = Validator :: make ($ input, $ rules); if ($ validation-> failed ()) return Redirect :: to ('dashboard') -> with_errors ($ validation); $ extension = Bestand :: extensie ($ input ['photo'] ['name']); $ directory = pad ('public'). 'uploads /'. sha1 (Auth :: user () -> id); $ filename = sha1 (Auth :: user () -> id.time ()). ". $ extension"; $ upload_success = Input :: upload ('photo', $ directory, $ filename); if ($ upload_success) $ photo = new Photo (array ('location' => URL :: to ('uploads /'. sha1 (Auth :: user () -> id). '/'. $ bestandsnaam), 'description' => $ input ['description'])); Auth :: gebruiker () -> foto's () -> invoegen ($ foto); Sessie :: flash ('status_success', 'Uw nieuwe Instapic succesvol geüpload'); else Sessie :: flash ('status_error', 'Er is een fout opgetreden bij het uploaden van uw nieuwe Instapic - probeer het opnieuw.'); retourneer Omleiding :: naar ('dashboard');
Zie je hoe we de invoer valideren? We zorgen ervoor dat de foto aanwezig is, een afbeelding en minder dan 500 kb. We zorgen er ook voor dat de beschrijving aanwezig is na sanering. We zullen onze foutmeldingen echter nog niet kunnen zien, dus laten we dit oplossen door wat HTML toe te voegen om onze foutmeldingen weer te geven. Open application / views / layouts / main.blade.php en voeg het volgende toe in de .houder
div:
@include ('plugins.status') @yield ('content')
Nu, creëer application / views / plugins / status.blade.php. Dit is waar we de feitelijke foutmeldingen zullen weergeven. We zullen ook ondersteuning toevoegen voor op sessies gebaseerde statusberichten (zoals degene die we gebruiken in de $ upload_success
controleer de foto's
controller code):
@if (isset ($ errors) && count ($ errors-> all ())> 0)×@elseif (! is_null (Session :: get ('status_error')))Oh nee!
@foreach ($ errors-> all ('
- :bericht
') als $ bericht) $ message @endforeach×@endif @if (! is_null (Session :: get ('status_success')))Oh nee!
@if (is_array (Session :: get ('status_error')))@foreach (Session :: get ('status_error') als $ fout)
@else Session :: get ('status_error') @endif- $ fout
@endforeach×@stop alsSucces!
@if (is_array (Session :: get ('status_success')))@foreach (Session :: get ('status_success') als $ succes)
@else Session :: get ('status_success') @endif- $ succes
@endforeach
Probeer nu fouten te veroorzaken op het uploadformulier door deze in te dienen zonder dat een bestand is geselecteerd of zonder een beschrijving (omdat beide verplicht zijn). Je zou de foutmeldingen bovenaan moeten zien verschijnen:
Nu we weten hoe we Laravel's moeten gebruiken bevestiging bibliotheek, laten we ons eerste formulier opnieuw bekijken - het login- en registratieformulier. Op dit moment gebruiken we alleen een echo
om te zien dat de login of registratie mislukte - laten we dat vervangen door de juiste validatie. Open application / controllers / user.php en werk het als volgt bij:
class User_Controller breidt Base_Controller uit public function action_authenticate () $ email = Input :: get ('email'); $ wachtwoord = Input :: get ('wachtwoord'); $ new_user = Input :: get ('new_user', 'off'); $ input = array ('email' => $ email, 'password' => $ wachtwoord); if ($ new_user == 'on') $ rules = array ('email' => 'verplicht | email | unique: users', 'password' => 'verplicht'); $ validation = Validator :: make ($ input, $ rules); if ($ validation-> failed ()) return Redirect :: to ('home') -> with_errors ($ validation); probeer $ user = new User (); $ user-> email = $ email; $ user-> password = Hash :: make ($ wachtwoord); $ Gebruiksvriendelijkheid> save (); Auth :: login ($ user); return Redirect :: to ('dashboard'); catch (Uitzondering $ e) Sessie :: flash ('status_error', 'Er is een fout opgetreden bij het maken van een nieuwe account - probeer het opnieuw.'); return Redirect :: to ('home'); else $ rules = array ('email' => 'verplicht | email | exists: gebruikers', 'wachtwoord' => 'verplicht'); $ validation = Validator :: make ($ input, $ rules); if ($ validation-> failed ()) return Redirect :: to ('home') -> with_errors ($ validation); $ credentials = array ('gebruikersnaam' => $ email, 'wachtwoord' => $ wachtwoord); if (Auth :: poging ($ credentials)) return Redirect :: to ('dashboard'); else Sessie :: flash ('status_fout', 'Uw e-mailadres of wachtwoord is ongeldig - probeer het opnieuw.'); return Redirect :: to ('home'); public function action_logout () Auth :: logout (); Redirect :: tot ( 'home / index');
Omdat we onze weergaven voor statusberichten op een modulaire manier hebben gemaakt, hoeven we zelfs geen extra HTML te schrijven om de foutmeldingen in actie te zien! Probeer het gewoon!