PHP-samhället har nyligen blivit välsignat med en ny version av en av sina mest kända ramar, Laravel. Version 5.0.1 är en stor release, så det finns inte bara några nya nya funktioner, men ramverkets arkitektoniska grundval har också förändrats i viss utsträckning. Så, utan vidare, kommer jag att dyka rakt in i ramen och visa dig alla de bra saker som den senaste utgåvan har att erbjuda.
Mappstrukturen för ett Laravel-projekt har genomgått en omfattande översyn. Laravel 5 implementerar PSR-4 autoloading-standarden, vilket innebär att alla dina klasser är helt namnpaced. Standardnamnrymden för din webbapplikation är app
, som du kan ändra med php artisan app: namn
kommando.
Dina modeller faller under standardapps namnrymden och finns i app-mappen. Programmets tillgångar, visningar och språkfiler finns i resursmappen. Säljaren, allmänheten och startlistan behåller sin plats som i de äldre versionerna av ramverket, medan konfigurations-, lagrings-, databas- och testerna har flyttats till projektets rot.
Om du tittar in i app-mappen kommer du att märka många klasser, men oroa dig inte för dem för nu - vi kommer att komma in på det under den här artikeln.
Miljödetektering har förbättrats avsevärt. I stället för alla komplexa kapslade konfigurations kataloger har du en .env
filen i roten till ditt projekt för att ta hand om applikationsmiljön och alla miljövariabler. Även php artisan tinker
kommandot använder nu Psysh-paketet istället för Boris.
Metodinjektion har blivit mycket förenklad. Fram till version 4.2 behövde du begära Inversion of Control (IoC) behållaren för att tillhandahålla en klassinstans eller skapa den i din controllerens konstruktör för att göra den tillgänglig under klassens omfattning. Nu kan du deklarera typen av antydd klassinstans i kontrollmetodens underskrift och IoC-behållaren tar hand om det, även om det finns flera parametrar i din controllerfunktions underskrift.
Kontrakt är faktiskt gränssnittsklasser i förklädnad. Gränssnitt är en beprövad metod för att avlägsna klassberoende och utveckla löst kopplade programkomponenter. De hjälper dig i allmänhet att följa reglerna "bero på abstraktioner, inte konkretioner".
Laravel köper in i samma filosofi. De flesta av huvudkomponenterna använder sig av dessa kontrakt för att hålla ramarna löst kopplade. Du kan också använda dem i din paketutveckling.
Till exempel, om ditt paket kräver cachelagring, kan du istället för att använda en konkret cacheklass implementera Illuminate \ Kontrakt \ Cache
gränssnittet och du kommer att vara fri att ansluta cacheförsättningen in och ut utan att ändra mycket av din paketkod.
Du kanske frågar hur Laravel handlar om att bestämma genomförandet för ett visst kontrakt. Allt som magi händer inne i Illuminate \ Foundation \ Application.php
fil.
Artisan har en ny ruttcache-funktion. Route caching ökar hastigt upp din ansökans rutregistrering, med tydliga synliga prestandafördelar. Om din ansökan handlar om ett litet antal rutter kan du dock inte se vilken ruttvägledning som ska ha, vilket betyder att den passar mer i fall där din ansökan har ett stort antal rutter.
Kommandona php artisan route: cache
och php artisan väg: klar
vrid och avaktivera rutekachning. När ruttcaching är påslagen, kommer alla ändringar som du gör till programrutterna inte att träda i kraft. Ruttcaching skulle i allmänhet genomföras som en del av din installationsprocess.
Middleware kan användas för att lägga till extra lager på dina HTTP-rutter. Om du vill att kod ska utföras före varje rutt eller före specifika rutter i din ansökan, är en sådan kod en bra passform för en middleware-klass.
Låt oss till exempel säga att du vill blockera ett visst antal IP-adresser från din ansökan för att göra din ansökan otillgänglig i den regionen. I så fall måste du kontrollera klientens IP före varje förfrågan och tillåta / inte tillåta dem att komma in i din ansökan. Det här kommer att vara mycket att göra i dina kontrolleråtgärder, så du kommer istället använda middleware. Skapa en middleware-klass på app / HTTP / Middleware / RegionMiddleware.php
genom att använda php artisan make: middleware "RegionMiddleware"
.
Du kan sedan registrera din middleware i app / HTTP / Kernel.php
fil genom att lägga till den till $ middleware
array. Du kan också bifoga middleware till specifika rutter genom att lägga till den i $ routeMiddleware
array och sedan passera den i rutten alternativ.
Autentisering är en del av nästan alla webbapplikationer du utvecklar, och mycket tid spenderas på att skriva autentiseringskedjan. Detta är inte fallet längre med Laravel 5. Databasmigrationerna, modellerna, kontrollerna och vyerna behöver bara konfigureras för att få allt att fungera. Laravel 5 har en registrator-tjänst, som är en viktig del av det här ur lådan, redo att använda autentiseringssystem.
Borta är de gamla dagarna när du brukade förklara dina programhändelser som strängar, eftersom händelseobjektet nu är tillgängligt. Du kan skapa händelseobjekt med php artisan make: händelse
och händelsehanteringsobjekt använder php artisan handler: händelse
. Alla dina händelse- och hanterarkurser går in i app / Events
och app / Handlar / Events
mapp respektive.
När du har skapat dina händelser kan du avfyra dem Händelse :: eld (ny händelse (parametrar))
. För att bifoga lyssnare till dina händelser måste du redigera $ lyssna
array i app / leverantörer / EventServiceProvider.php
fil.
Laravel 5 låter dig inkapsla din komplexa affärslogik till enkla kommandobjekt.
Låt oss till exempel säga att du har en webbutik där användare registrerar och köper elektroniska artiklar. Registreringsprocessen kan innebära att verifiera användarens e-postadress och kreditkort.
Det kan vara frestande att dumpa all den här koden i en kontrolleråtgärd, men det är inte en bra idé att ha kod som bara fungerar under HTTP-förfrågningskontexten, vara svår att testenhet på grund av HTTP-förfrågningar och uppblåsa kontrollen.
Att göra detta med kommandon ger dig flera fördelar. Först kommer din självständiga kod att vara modulär och en bris till enhetstest. För det andra, eftersom Laravel tillåter dig att kökommandon, kan din affärslogik köras asynkront i bakgrunden, vilket är omöjligt att göra med kontrolleråtgärder.
En färdig att använda kö tillhandahålls som standard med ramverket, så du behöver inte använda några tredjepartspaket. Allt du behöver göra är att konfigurera kön och du borde vara bra att gå. Alla dina köerbara jobb hålls i app / Kommandon
mapp. När du har skapat dina köregenskaper kan du helt enkelt trycka dem i köen med Kö: push (nytt kommando ($ params))
.
Uppgiftsschemaläggningen har också förbättrats mycket. Tidigare behövde du ställa in en cron för varje konsolkommando, men inte mer. Du behöver bara en enda cron-post och du kan schemalägga dina uppgifter inom programmet med mycket syntaksocker.
Laravel 5 har inbyggt stöd för flera filsystem med hjälp av tredjepartspaketet Flysystem. Din ansökan kan använda lokalt eller molnlagring med hjälp av enkel konfiguration. Du behöver bara arbeta med filsystemfasaden och de underliggande lagringsoperationerna tas hand om automatiskt. Du kan konfigurera dina lagringsalternativ i config / filesystems.php
fil. Om du behöver tillgång till alla tillgängliga lagringsalternativ i ditt projekt kan du kringgå filsystemfasaden och arbeta direkt med diskfacaden.
Förfrågningsobjektet hjälper dig att injicera autentisering / behörighet och data validering logik i dina önskemål. När du har genomfört din affärslogik i förfrågan objektet måste du skriva tipset till en kontrollörs åtgärd, precis som vid metodinjektion.
Låt oss dekryptera detta med ett kodexempel. Kör php artisan make: begär TutsPlusRequest
att generera en begäran klass på app / HTTP / Begäran / TutsPlusRequest.php
. Om du tittar på innehållet i den filen kommer du att märka att hantverkare har skapat en reglermetod och en auktoriseringsmetod. Du kommer att lägga till några valideringsregler i din reglermetod.
'krävs | email', 'password' => 'krävs | min: 8']; // i din controller-funktionen public function postLogin (\ App \ Http \ Requests \ TutsPlusRequest $ request) // -koden här kommer inte att avfyra // om valideringsreglerna // i förfrågan misslyckas?>
Du vill att e-postmeddelandet ska vara ett giltigt e-postmeddelande och lösenordet ska vara minst åtta tecken. Båda fälten är obligatoriska. Om någon av dessa valideringsregler misslyckas, kommer din kontrollåtgärd inte att köras och användaren omdirigeras till formulärsidan.
Elixir är ett GulpJS API för Laravel som hjälper dig att definiera gulp-uppgifter för dina applikationer. Dykning i GulpJS ligger utanför ramen för denna artikel, men du kan ta en titt på dess officiella webbplats och Elixir för mer information.
Ett typiskt användningsfall för GulpJS är att minska / sammanfoga dina CSS / JS-filer. Din gulp paket finns i package.json
filen i roten till ditt projekt, medan de uppgifter som behöver köras anges i gulpfile.js
fil. För dig som redan är bekant med GulpJS-arbetsflödet skulle det vara mer meningsfullt, eftersom Elixir bara hjälper dig att integrera GulpJS i dina Laravel-appar.
Socialite är ett första partipaket som gör integration av tredjepartsautentisering i dina webbapplikationer en cinch. Eftersom det inte ingår som standard måste du dra in det med kompositören. När det är klart måste du konfigurera de leverantörer du vill använda i din ansökan. För närvarande stöder Socialite Twitter, GitHub, Google och Facebook.
Jag hoppas att du njöt av att titta på specifika Laravel 5. Ur ett arkitektoniskt perspektiv tycker jag att ramverket har tagit stora språng framåt, vilket kommer att gå långt i att hålla din webbansökningskod organiserad och befria dig från den mardröm som är underhåll.
.