Wat is er nieuw in Laravel 5

De PHP-community is onlangs gezegend met een nieuwe release van een van de meest geliefde frameworks, Laravel. Versie 5.0.1 is een belangrijke release, dus er zijn niet alleen enkele geweldige nieuwe functies beschikbaar, maar de architectonische basis van het framework is tot op zekere hoogte ook veranderd. Ik ga dus zonder verdere omhaal duiken in het kader en laat je alle goede dingen zien die de nieuwste release te bieden heeft.

1. Directorystructuur

De mappenstructuur van een Laravel-project is grondig onder handen genomen. Laravel 5 implementeert de autoloadingsstandaard van PSR-4, wat betekent dat al uw klassen volledig namespaced zijn. De standaardnaamruimte voor uw webtoepassing is app, welke je kunt veranderen met behulp van de php artisan app: naam commando. 

Uw modellen vallen onder de standaardnaamruimte van de app en bevinden zich in de app-map. De assets, views en taalbestanden van uw applicatie bevinden zich in de map resources. De vendor-, public- en bootstrap-directory's behouden hun plaats zoals in de oudere versies van het framework, terwijl de mappen config, storage, database en tests zijn verplaatst naar de hoofdmap van het project. 

Als je in de app-map kijkt, zul je heel wat klassen opmerken, maar maak je daar nu geen zorgen over - daar gaan we het in de loop van dit artikel over hebben.. 

De omgevingsdetectie is enorm verbeterd. In plaats van alle complexe geneste configuratiemappen, hebt u een .env bestand in de root van uw project om zorg te dragen voor de applicatieomgeving en alle omgevingsvariabelen. Ook de PHP ambachtelijke ketellapper commando gebruikt nu het Psysh-pakket in plaats van Boris.

2. Methode Injectie

Methode-injectie is sterk vereenvoudigd. Tot versie 4.2 moest u de container Inversion of Control (IoC) aanvragen om een ​​klasseninstantie te leveren of deze in de constructor van uw controller te maken om deze onder de class scope toegankelijk te maken. Nu kunt u het type hinted klasse-instantie declareren in de handtekening van de controllermethode en de IoC-container zorgt ervoor, zelfs als er meerdere parameters zijn in de handtekening van uw controllerfunctie.

3. Contracten

Contracten zijn feitelijk interface-klassen in vermomming. Interfaces zijn een beproefde methode voor het verwijderen van klasse-afhankelijkheid en het ontwikkelen van losjes gekoppelde softwarecomponenten. Ze helpen je meestal om de regel "afhankelijk van abstracties, niet concreties" te volgen. 

Laravel koopt in dezelfde filosofie. De meeste van de belangrijkste kerncomponenten maken gebruik van deze contracten om het raamwerk losjes gekoppeld te houden. Je kunt ze ook gebruiken in je pakketontwikkeling. 

Als uw pakket bijvoorbeeld caching vereist, kunt u in plaats van een concrete cacheklasse te gebruiken, de Verlichten \ contracten \ Cache interface en je bent vrij om de cache-implementatie in en uit te pluggen zonder veel van je pakketcode te veranderen. 

Je zou je kunnen afvragen hoe Laravel bezig is met het uitzoeken van de implementatie voor een specifiek contract. Alle magie gebeurt binnen de Verlichten \ Foundation \ Application.php het dossier.

4. Route Caching

Artisan heeft een nieuwe route-caching-functie. Route-caching versnelt de routeregistratie van uw applicatie enorm, met duidelijk zichtbare prestatievoordelen. Als uw toepassing echter in een klein aantal routes handelt, ziet u mogelijk niet de caching van de gevolgenroute, wat betekent dat deze meer geschikt is voor gevallen waarin uw toepassing een groot aantal routes heeft.. 

De commando's php artisan route: cache en php artisan route: vrij schakel route caching in respectievelijk uit. Nadat route-caching is ingeschakeld, worden wijzigingen die u aanbrengt in de toepassingsroutes niet van kracht. Route caching wordt over het algemeen geïmplementeerd als onderdeel van uw implementatieproces.

5. Routemiddleware

Middleware kan worden gebruikt om extra lagen toe te voegen aan uw HTTP-routes. Als u wilt dat de code wordt uitgevoerd vóór elke route of voor specifieke routes in uw toepassing, dan is zo'n code goed geschikt voor een middleware-klasse. 

Laten we bijvoorbeeld zeggen dat u een bepaald bereik van IP's uit uw toepassing wilt blokkeren om uw toepassing niet beschikbaar te maken in die regio. In dat geval moet u vóór elke aanvraag het IP-adres van de klant controleren en deze in uw toepassing toestaan ​​/ weigeren. Dit zal veel te doen zijn in je controlleracties, dus je zult middleware gebruiken. Genereer een middleware-klasse op app / Http / Middleware / RegionMiddleware.php door het gebruiken van php artisan make: middleware "RegionMiddleware".

U kunt dan uw middleware registreren in de app / Http / Kernel.php bestand door het toe te voegen aan de $ middleware matrix. U kunt ook middleware aan specifieke routes koppelen door deze toe te voegen aan de $ routeMiddleware array en geef het vervolgens door in de routeopties.

6. Authenticatie

Verificatie maakt deel uit van bijna alle webtoepassingen die u ontwikkelt en er wordt veel tijd besteed aan het schrijven van de authenticatieopstelling. Bij Laravel 5 is dit niet meer het geval. De databasemigraties, -modellen, -controllers en -views moeten gewoon worden geconfigureerd om het allemaal te laten werken. Laravel 5 heeft een registratiedienst, die een cruciaal onderdeel is van dit uit de doos bestaande, gebruiksklare authenticatiesysteem.

7. Evenementen

Voorbij zijn de oude dagen waarop u uw toepassingsgebeurtenissen als strings declareerde, omdat het gebeurtenisobject nu beschikbaar is. U kunt gebeurtenisobjecten maken met php artisan make: event en gebeurtenishandler-objecten gebruiken php artisan handler: evenement . Al je evenementen- en handlerklassen gaan naar binnen app / Evenementen en app / Handlers / Evenementen map respectievelijk. 

Nadat je je evenementen hebt gemaakt, kun je ze ontslaan Evenement :: vuur (nieuw evenement (params)). Als u luisteraars aan uw evenementen wilt koppelen, moet u de $ luisteren array in de app / Providers / EventServiceProvider.php het dossier.

8. Opdrachten

Met Laravel 5 kunt u uw complexe bedrijfslogica inkapselen in eenvoudige opdrachtobjecten. 

Stel dat u een online winkel heeft waar gebruikers zich registreren en elektronische artikelen kopen. Het registratieproces kan betrekking hebben op het verifiëren van het e-mailadres en de creditcard van de gebruiker. 

Het is misschien verleidelijk om al deze code in een controlleractie te dumpen, maar het is geen goed idee om code te hebben die alleen onder de HTTP-verzoekcontext werkt, moeilijk te testen is vanwege HTTP-verzoeken, en de controlleracties blokkeert. 

Als je dit doet met behulp van commando's, heb je verschillende voordelen. Ten eerste zal uw self-contained code modulair en eenvoudig te testen zijn. Ten tweede, omdat Laravel u toestaat om opdrachten in de wachtrij te zetten, kan uw bedrijfslogica asynchroon op de achtergrond worden uitgevoerd, wat onmogelijk te maken is met controlleracties.

9. Wachtrij en taakplanning

Een wachtrij voor gebruiksklaar wordt standaard meegeleverd met het framework, zodat u geen pakketten van derden hoeft te gebruiken. Het enige wat u hoeft te doen is de wachtrij configureren en u moet goed zijn om te gaan. Al uw wachtrijbanen worden bewaard in de app / Commands map. Nadat u uw wachtrijopdrachten hebt gemaakt, kunt u ze gewoon naar de wachtrij duwen met Wachtrij :: push (nieuw commando ($ params))

Taakplanning is ook veel verbeterd. Eerder moest u een cron instellen voor elke console-opdracht, maar niet meer. U hebt slechts één cron-invoer nodig en u kunt uw taken in de toepassing plannen met veel syntaxisuiker.

10. Meerdere bestandssystemen

Laravel 5 heeft ingebouwde ondersteuning voor meerdere bestandssystemen met behulp van het pakket Flysystem van derden. Uw toepassing kan lokale of cloudopslag gebruiken door middel van eenvoudige configuratie. U hoeft alleen met de gevel van het bestandssysteem te werken en de onderliggende opslagbewerkingen worden automatisch afgehandeld. U kunt uw opslagopties configureren in de config / filesystems.php het dossier. Als u toegang wilt hebben tot alle beschikbare opslagopties in uw project, kunt u de gevel van het bestandssysteem omzeilen en direct met de schijfgevel werken.

11. Verzoek om een ​​Object

Met het verzoekobject kunt u authenticatie / autorisatie en gegevensvalidatie logica in uw aanvragen invoegen. Nadat u uw bedrijfslogica in het aanvraagobject hebt geïmplementeerd, moet u deze een hint geven in de actie van een controller, net als bij methode-injectie. 

Laten we dit decoderen met behulp van een codevoorbeeld. uitvoeren php artisan make: verzoek TutsPlusRequest om een ​​verzoekklasse te genereren op app / Http / aanvragen / TutsPlusRequest.php. Als je de inhoud van dat bestand bekijkt, zul je merken dat een vakman een regelsysteem en een autorisatiemethode heeft gegenereerd. U gaat enkele validatieregels toevoegen in uw regelsmethode.

 'required | email', 'password' => 'required | min: 8'];  // in uw controller actie public functie postLogin (\ App \ Http \ Requests \ TutsPlusRequest $ request) // code hier vuurt niet // als de validatieregels // in het verzoek niet slagen?>

U wilt dat de e-mail een geldige e-mail is en dat het wachtwoord ten minste acht tekens lang is. Beide velden zijn verplicht. Als een van deze validatieregels faalt, wordt de actie van uw controller niet uitgevoerd en wordt de gebruiker doorgestuurd naar de formulierpagina.

12. Elixir

Elixir is een GulpJS API voor Laravel die u helpt bij het definiëren van slordige taken voor uw toepassingen. Duiken in GulpJS valt buiten het bestek van dit artikel, maar u kunt een kijkje nemen op de officiële site en Elixir voor meer informatie. 

Een typisch voorbeeld van GulpJS is om uw CSS / JS-bestanden te verkleinen / samen te voegen. Je slikpakketten bevinden zich in de package.json bestand in de hoofdmap van uw project, terwijl de taken die moeten worden uitgevoerd, zijn opgegeven in de gulpfile.js het dossier. Voor degenen onder jullie die al bekend zijn met de GulpJS-workflow, zou dit logischer zijn, aangezien Elixir je alleen helpt GulpJS te integreren in je Laravel-apps.

13. Laravel Socialite

Socialite is een first party-pakket dat integratie van authenticatie door derden in uw webapplicaties een makkie maakt. Aangezien dit standaard niet is inbegrepen, moet u het met behulp van composer naar binnen slepen. Zodra dat is gebeurd, moet u de providers configureren die u in uw toepassing wilt gebruiken. Momenteel ondersteunt Socialite Twitter, GitHub, Google en Facebook.

gordijnen!

Ik hoop dat je het leuk vond om naar de details van Laravel 5 te kijken. Vanuit een architecturaal perspectief denk ik dat het framework gigantische sprongen vooruit heeft gemaakt, wat een lange weg zal banen bij het organiseren van je webapplicatiecode en je zal bevrijden van de nachtmerrie die onderhoud is.

.