Veel ontwikkelaars die Laravel gebruiken, zijn waarschijnlijk slechts krasjes op de oppervlakte van wat het framework te bieden heeft. Hoewel de documentatie de meest gebruikelijke gebruikscasussen en de voor de hand liggende functies omvat, heeft deze niet alles te bieden.
Begrijp me niet verkeerd, de documentatie is goed, het is gewoon dat je zoveel kunt doen, het is moeilijk om te documenteren alles. Daarom gaan we enkele verborgen juweeltjes in Laravel bekijken.
Beschikbaar sinds: v4.0.0
gedocumenteerd: Nee
Weergaven kunnen bijna hetzelfde lopen als configuratiebestanden. Cascading views zijn uitermate handig bij het ontwikkelen van een uitbreidbaar themasysteem. Beschouw de volgende mapstructuur.
/ app / views / blog /index.blade.php / themes / default / views / blog /index.blade.php /theme.blade.php
Het idee is dat wanneer we return View :: make ('theme :: blog.index');
het zal eerst in de kijken themes / default / uitzicht
map en vervolgens, als het de weergave niet kan vinden, terugvallen op app / views
.
Om dit te doen gebruiken we Bekijk :: addNamespace
om onze eigen naamruimte te registreren bij de twee locaties.
View :: addNamespace ('theme', [base_path (). '/ Themes / default / views', app_path (). '/ Views']);
Beschikbaar sinds: v4.0.0
gedocumenteerd: Gedeeltelijk
Collecties zijn een uitstekende manier om arrays te gebruiken en te beheren. Collecties hebben verschillende handige methoden en implementeren een aantal nuttige interfaces zoals ArrayableInterface
, IteratorAggregate
, en JsonableInterface
.
Laten we zeggen dat we een kleine bloggengine bouwen die platte bestanden gebruikt voor opslag. We willen bewerkingen kunnen uitvoeren zoals sorteren, filteren en pagineren.
Het implementeren van de bloggengine valt buiten het bestek van dit artikel, maar laten we ons voorstellen dat we een array hebben, $ artikelen
, en elk lid van de array is een instantie van een Artikel
klasse. Alles wat we dan moeten doen is een nieuw exemplaar krijgen van Verzameling
en geef het onze reeks artikelen.
$ articles = nieuwe Illuminate \ Support \ Collection ($ arrayOfArticles);
Met behulp van de collectie kunnen we onze artikelen sorteren. Laten we onze artikelen sorteren en eerst de meest recent bijgewerkte artikelen weergeven. Laten we ons in het belang van dit artikel voorstellen dat bij het laden van de artikelen uit het bestandssysteem de updatedAt
eigenschap tot de laatst gewijzigde tijd van het bestand.
$ articles-> sortByDesc (function ($ article) return $ article-> updatedAt;);
De sorteer op
en sortByDesc
methoden accepteren een callback, deze callback moet een waarde retourneren die kan worden gebruikt voor het sorteren van de verzameling. In ons geval kunnen we de artikelen de laatst aangepaste tijd retourneren en de verzameling kan daarop gebaseerd sorteren.
Net als bij sorteren kunnen we de verzameling ook gebruiken om onze artikelen te filteren als a WAAR
clausule in MySQL. Laten we onze artikelen filteren op basis van een zoekopdracht die mogelijk is uitgevoerd.
filter (functie ($ artikel) gebruik ($ searchQuery) return preg_match (sprintf ('/% s / m', $ searchQuery), $ article-> body););
De filter
methode retourneert eigenlijk een nieuw exemplaar van Verlichten \ Support \ Collection
dus we moeten het toewijzen aan de $ resultaten
variabel. Deze nieuwe collectie bevat alleen de artikelen waarin 'Laravel rocks!' In het lichaam wordt vermeld.
Met behulp van de verzameling kunnen we onze artikelen pagineren, zodat we niet al te veel artikelen op één pagina verschijnen.
$ perPage = 1; $ page = Input :: get ('page', 1); if ($ page> ($ articles-> count () / $ perPage)) $ page = 1; $ pageOffset = ($ page * $ perPage) - $ perPage; $ results = $ articles-> slice ($ pageOffset, $ perPage);
De ... gebruiken plak
methode, we extraheren een deel van de artikelen in de verzameling en wijzen het toe aan de $ resultaten
veranderlijk.
Dit voorbeeld kan dan nog verder worden genomen door een nieuw exemplaar van Laravel's te maken paginator
klasse. Op die manier kan het alle paginanummers en links voor u genereren.
We zouden een willekeurig artikel kunnen krijgen:
$ article = $ articles-> random ();
We kunnen ook onze verzameling artikelen herhalen als ware het een gewone reeks. Dit is allemaal te danken aan de IteratorAggregate
en ArrayIterator
interfaces.
foreach ($ artikelen als $ artikel) echo $ article-> body;
En we kunnen onze artikelen zelfs transformeren naar een gewone array of naar de JSON-representatie.
$ array = $ articles-> toArray (); $ json = $ articles-> toJson ();
Een van de coolste methoden is waarschijnlijk GroupBy
, waarmee we artikelen kunnen groeperen op basis van een specifieke sleutel. Stel je voor dat elk artikel wat metagegevens had bovenaan, dat werd geparseerd en ontdaan van de inhoud van het artikel.
Hoewel het ontleden van deze metadata buiten het bestek van dit artikel valt, nemen we aan dat het is geparseerd en een eigenschap is op de Artikel
aanleg. Je zou dan kunnen gebruiken GroupBy
om de artikelen te groeperen op basis van de categorie waarin ze zijn geplaatst.
$ results = $ articles-> groupBy ('category');
Alle artikelen met dezelfde categorie worden gegroepeerd. Je zou dan de artikelen voor een specifieke categorie kunnen krijgen.
foreach ($ results-> get ('tutorial') als $ artikel) echo $ article-> body;
Collecties zijn een van de best verborgen juweeltjes die Laravel te bieden heeft.
Beschikbaar sinds: v4.1.19
gedocumenteerd: Nee
Het filteren van routes in Laravel is een veel voorkomende taak die velen van ons in al onze projecten doen. Met een filter kunt u taken uitvoeren, zoals gebruikersauthenticatie of snelheidsbeperking, vóór of nadat een route is afgevuurd. We maken filters met behulp van Route :: filter
en kan ze toepassen op individuele routes, een routegroep of door gebruik te maken van Route :: wanneer
en toepassen op een aangepast patroon.
Route :: filter ('restricted', functie ($ route, $ request, $ group) // Beperk gebruikerstoegang op basis van de waarde van $ group); Route :: when ('admin / *', 'restricted: admin');
In dit voorbeeld maken we een beperkt
filter dat een enkele parameter verwacht, $ groep
. De $ route
en $ verzoek
parameters worden altijd gegeven aan een vóór filter.
Maar wat als we meer flexibiliteit wilden? Laten we zeggen dat we het filter wilden toepassen op alle beheerder
routes behalve voor admin / login
. We kunnen een routegroep gebruiken en de betreffende route eenvoudig buiten de groep verplaatsen. Of we kunnen gebruiken Route :: whenRegex
en schrijf onze eigen reguliere expressie.
Route :: whenRegex ('/ ^ admin (\ / (?! Login) \ S +)? $ /', 'Restricted: admin');
Deze reguliere expressie zorgt er eenvoudigweg voor dat deze alleen wordt toegepast op routes die beginnen met beheerder
en worden niet gevolgd door /Log in
, maar kan worden gevolgd door iets anders. Uitstekend. We hebben nu onze beperkt: admin
filter toegepast op alle routes behalve onze admin / login
route.
Beschikbaar sinds: v4.0.0
gedocumenteerd: Gedeeltelijk
Je hebt het ongetwijfeld gebruikt Verlichten \ Support \ MessageBag
voor een tijdje nu zonder het zelfs te beseffen. De grootste rol MessageBag
plays bevat al uw validatiefouten bij het gebruik van Laravel's ingebouwde validator.
Een$ fouten
variabele is beschikbaar in elke weergave die een leeg venster bevatMessageBag
instantie of het exemplaar dat u naar de sessie hebt geflashtRedirect :: tot ( '/') -> withErrors ($ validator);
Er is een goede kans dat veel van jullie misschien zoiets doen in jouw formulieren wanneer een foutmelding verschijnt onder een bepaalde invoer.
Formulier: tekst ('gebruikersnaam', null) @if ($ errors-> has ('gebruikersnaam'))$ errors-> first ('gebruikersnaam')>; @stop als
Je kunt dat feitelijk verwijderen als
verklaring volledig en gebruik de tweede parameter van de eerste
methode om het bericht in de div
.
Formulier: tekst ('gebruikersnaam', null) $ fouten '-> eerst (' gebruikersnaam ',':bericht')
Veel, veel, veel leuker!
Beschikbaar sinds: v3.0.0
gedocumenteerd: Gedeeltelijk
De Vloeiend
class bestaat al heel lang en wordt feitelijk binnen het framework zelf gebruikt bij het maken van migraties met de schemabuilder. Tussen Laravel 3 en Laravel 4 is de klasse zelf nauwelijks veranderd, de enige grote verschillen zijn nog een paar interfaces.
Om de te gebruiken Vloeiend
klasse alles wat je hoeft te doen is een instantie te krijgen en als je weg bent.
$ user = new Illuminate \ Support \ Fluent; $ Gebruiksvriendelijkheid> naam ( 'Jason') -> land ( 'Australia') -> abonnee ();
De instantie heeft nu 3 attributen gedefinieerd, naam
met een waarde van Jason
, land
met een waarde van Australië
, en abonnee
met een boolean waar
waarde.
Voorafgaand aan Laravel 4.1 kon je de attributen van het exemplaar alleen echt instellen en krijgen. Sinds Laravel 4.1 kunt u de toArray
en toJSON
methoden om respectievelijk de array met kenmerken en de JSON-weergave te verkrijgen.
Vanaf Laravel 4.2 implementeert de klasse ook de JsonSerializable
interface wat betekent dat je de instantie rechtstreeks kunt doorgeven json_encode
.
We hebben verschillende bruikbare edelstenen van het Laravel-raamwerk bekeken. Maar zoals je al geraden hebt, zit er nog meer in het raamwerk.
De beste manier om erachter te komen wat Laravel nog meer te bieden heeft, is door in de bron te graven. Het is niet zo eng als je zou denken en je zult veel leren over het kader waar je aan werkt.
Als je extra edelstenen hebt die je hebt gevonden, aarzel dan niet om ze in de reacties te delen!