Het Laravel PHP framework biedt zijn bundelsysteem om ontwikkelaars toe te laten nuttige pakketcodes te herdistribueren, of om applicaties te organiseren in verschillende "bundels" van kleinere applicaties.
In deze tutorial zullen we de ins en outs leren van het maken en distribueren van bundels vanaf het begin.
Een Laravel-bundel heeft toegang tot alle functies die het framework biedt voor zijn hosttoepassing, inclusief routing, migraties, tests, weergaven en tal van andere handige functies.
Hier is een klein geheim, tussen ons: het
toepassing
map van het bronpakket Laravel is ook een bundel, die Laravel deDEFAULT_BUNDLE
.
Voordat ik een nieuw stuk code schrijf, stel ik mezelf graag enkele eenvoudige vragen om te bepalen of het geschikt is voor een bundel. Laat me deze techniek met u delen.
Als het antwoord op deze vraag ja is, zorg ik er dan eerst voor dat iemand nog niet eerder een vergelijkbare bundel of pakket heeft gemaakt. Anders dan om te leren, is het zinloos om het wiel opnieuw te maken. Als het andere pakket een voldoende hoge standaard heeft om in uw project te gebruiken, gebruik dat dan in plaats daarvan en bespaar uzelf de tijd.
Ten tweede denk ik na over de code en beslis of deze al dan niet nuttig kan zijn voor gebruikers van andere frameworks of mensen die helemaal geen framework gebruiken. Als de code niet gerelateerd is aan het Laravel-framework en geen gebruik hoeft te maken van Laravel's kernklassen, dan zou ik in plaats daarvan een Composer-pakket maken. Composer-pakketten worden alom de standaard voor het delen van code die niet beperkt is tot een enkel framework of project.
Raadpleeg de volgende links voor meer informatie over Composer:
Als de code nuttig zou kunnen zijn voor anderen en afhankelijk is van het Laravel-framework, dan heb je een goede reden om een nieuwe bundel te maken.
DROOG is de naam van het spel.
Als de code functionaliteit biedt die u vaak schrijft, is het logisch om een bundel te maken. DROOG (niet jezelf herhalen!) Is de naam van het spel.
U kunt bijvoorbeeld een eenvoudige site bouwen die, naast andere functies, een blogcomponent heeft. De blog kan worden beschouwd als een afzonderlijke applicatie die moet worden opgenomen in een bundel voor een veel grotere organisatie van uw project.
Een ander voorbeeld is een administratief gedeelte, of 'back-end' voor uw website. Deze sectie kan gemakkelijk worden beschouwd als een afzonderlijk onderdeel van de hoofdtoepassing en kan in plaats daarvan worden georganiseerd in een of meer bundels.
Als dit het geval is, kunt u overwegen om in plaats daarvan een 'Bibliotheek' te schrijven. Een bibliotheek is een enkele klasse die herbruikbare code bevat. Het kan eenvoudig aan een Laravel-project worden toegevoegd door de klas in de application / libraries /
map, die standaard automatisch wordt geladen.
Laten we een eenvoudige plug-in maken die samenwerkt met de Gravatar-service om een eenvoudige methode te bieden voor het genereren van avatars van verschillende grootten in onze hoofdtoepassing. We zullen ook de nodige functionaliteit toevoegen om een e-mailadres en avatargrootte in te voeren en een voorbeeld van de bijbehorende gravatar op de pagina bekijken.
Laten we beginnen door een nieuwe map te maken binnen de / bundels
directory van ons project. We bellen de directory en onze bundel gravvy
. Geen jus ... gravvy.
Laten we gravvy toevoegen aan de bundels array binnenin application / bundles.php
zodat we het kunnen testen terwijl we verder gaan. We zullen een toevoegen 'auto' => waar
optie in de array, zodat de bundel automatisch wordt gestart en alle autoloader-toewijzingen die we maken beschikbaar zijn voor het geheel van Laravel.
return array ('docs' => array ('handles' => 'docs'), 'gravvy' => array ('auto' => true));
Eerst moeten we een kleine bibliotheek maken die de avatar van een gebruiker ophaalt met behulp van een e-mailadres. Maak een nieuw bestand binnen de root van de bundel, genaamd gravvy.php
. Laten we een klasse maken, genaamd Gravvy
met een statische methode, maken()
, om het naamgevingsschema dat door Laravel's eigen bibliotheken wordt gebruikt, te repliceren.
De maken()
methode accepteert twee parameters: een e-mailadres en een geheel getal om de grootte van de af te halen avatar weer te geven.
* / class Gravvy / ** * Maak een nieuw afbeeldingselement van een e-mailadres. * @param string $ email Het e-mailadres. * @param integer $ size De grootte van de avatar. * @return string De bron voor een afbeeldingselement. * / public static function make ($ email, $ size = 32) // converteer onze e-mail naar een md5 hash $ email = md5 ($ email); // retourneer de afbeeldingselementretour ''); / ** * Test of een avatars-uitvoer verschijnt zoals verwacht wanneer * een aangepaste avatargrootte specificeert. * * @return void * / public function testAvatarImageIsGeneratedWithSize () // start de gravvy-bundel :: start ('gravvy'); // controleer of de uitvoer overeenkomt met de verwachte $ this-> assertEquals (Gravvy :: make ('[email protected] ', 64),'');
Hierboven hebben we twee PHPUnit-tests geschreven: een om de output te testen van het genereren van een avatar met behulp van een e-mail en een andere die ook een avatargrootte in pixels aangeeft. Je zult merken dat we bellen Bundle :: start ( 'gravvy')
om de bundel handmatig te starten. Dit komt omdat Laravel momenteel geen bundels laadt via de opdrachtregelinterface.
Als kernteamlid wil ik erop wijzen dat we dit in een toekomstige versie willen oplossen!
Laten we Artisan gebruiken om onze PHPUnit-tests uit te voeren door de test
opdracht geven en de bundelnaam gebruiken, gravvy
, als een parameter.
php artisan-test-gravitatie
Super goed! Onze tests zijn bij de eerste poging succesvol verlopen en ons ego is gegroeid - slechts een klein beetje!
Nu onze Gravvy-klasse is getest, kunnen mensen deze in hun eigen toepassingen gebruiken! Laten we de bundel een stap verder nemen en een paar eenvoudige pagina's maken om gravatars te genereren en te bekijken. We kunnen dit voorbeeld gebruiken om te leren hoe het routeringssysteem bundels verwerkt.
Laten we beginnen met het maken van een nieuwe 'preview'-controller voor onze bundel. We zullen een controllers
map binnen de bundel, en daarin zullen we een nieuw bestand toevoegen: preview.php
.
De naam van de controller moet worden voorafgegaan door de naam van de bundel en worden toegevoegd aan
_Controller
- zoals met normale controllers.We zouden een aantal routes kunnen creëren om onze controlleracties in kaart te brengen voor verstandige URI's, maar zou het niet beter zijn als we de gebruiker van onze bundel zouden kunnen laten beslissen welke basis-URI moet worden gebruikt? Het zou? Laten we dat dan doen!
Door een toe te voegen
'handles' => 'gravvy'
sleutel-waarde paar aan de bundelsconfiguratiearray, kunnen wij de gebruiker toestaan het te veranderen zonder de code van de bundel zelf te veranderen. Hier is de resulterende configuratie inapplication / bundles.php
.return array ('docs' => array ('handles' => 'docs'), 'gravvy' => array ('auto' => true, 'handles' => 'gravvy'));Nu kunnen we de gebruiken
(:bundel)
plaats-houder in onze routes, die zal worden vervangen door de waarde van dehandgrepen
keuze. Laten we een makenroutes.php
bestand in de root van onze bundels en voeg enkele routes toe.Route :: get ('(: bundle) / form', 'gravvy :: preview @ form'); Route :: post ('(: bundel) / preview', 'gravvy :: preview @ preview');We hebben de route
KRIJG gravijt / vorm
die is toegewezen aan dehet formulier
actie van deVoorbeeld
controller, enPOST gravure / preview
die is toegewezen aan devoorvertoning
actie van deVoorbeeld
controleur.Laten we de bijbehorende views maken voor onze controlleracties; je kunt ze zo complex en mooi maken als je wilt, maar ik zal ze eenvoudig houden. Maak eerst een
keer bekeken
map in de bundel, net als bij de toepassingsmap.
Nu we een formulier hebben dat een e-mail en een grootteveld zal indienen bij de Preview @ voorvertoning
controller / actiepaar, laten we een voorbeeldpagina maken voor de gegenereerde avatar; we gebruiken een attribuut, genaamd $ element
, om de bron te houden.
$ element
HTML :: link \ _to \ _action ('gravvy :: preview @ form', '< Go Back!')
Nu moeten we het veranderen voorvertoning
actie om gebruik te maken van de gegevens die zijn ingediend via het formulier.
/ ** * Toon de resulterende avatar. * / public function action_preview () // gegevens ophalen uit ons formulier $ email = Input :: get ('email'); $ size = Input: get ('size'); // genereer de avatar $ avatar = Gravvy :: make ($ email, $ size); // laad de voorbeeldweergave retour Bekijk :: make ('gravvy :: preview') -> with ('element', $ avatar);
We halen de POST-gegevens op en gebruiken deze om onze avatar te maken. We moeten ook een toevoegen met()
methode om de Bekijk :: maken ()
ketting om toe te staan dat het element in de weergave wordt gebruikt.
We kunnen eindelijk ons avatar preview-systeem testen! Bekijk de / Gravvy / form
URI en probeer het eens! Alles werkt zoals verwacht.
Dit is misschien niet de beste manier om je bundel te organiseren, maar het laat een paar nuttige dingen zien die mogelijk zijn. Veel plezier met het maken van uw eigen bundels, en zorg ervoor dat u ze op de bundelswebsite publiceert.
Zodra uw bundel in een functionele staat is, kunt u overwegen hem op te nemen in de Laravel Bundles Directory. Laten we het proces van het indienen van een nieuwe bundel doornemen.
Eerst moet je een GitHub-account hebben en je bundelversie binnen een openbare repository hebben. GitHub biedt gratis accounts met een onbeperkt aantal openbare repositories; u vindt hun inschrijfformulier hier.
Als je Git nieuw bent met versiebeheer, raad ik aan om de geweldige serie Git-artikelen hier op Nettuts te lezen+.
Zodra u uw account en code in orde hebt, zorgt u ervoor dat de nieuwste versie van uw bundel te vinden is in de 'master' branch en dat de root van uw bundel (waar de start.php
zou zijn) is de root van de repository, in plaats van een subdirectory.
Ga vervolgens naar de website Laravel Bundles Directory en log in met uw GitHub-inloggegevens.
Klik nu op de knop 'Een bundel indienen', selecteer uw bundelrepository in het vervolgkeuzemenu en klik op de knop 'Doorgaan'.
De aanmeldingsformulier is vrij rechttoe rechtaan, maar hier zijn enkele 'gotchas' die je misschien niet ziet.
Naam
Naam is een sleutelwoord in kleine letters dat wordt gebruikt om uw toepassing te installeren. Het moet een kort maar nauwkeurig woord zijn om uw bundel te beschrijven.
Samenvatting / Beschrijving
Deze velden kunnen inhoud van het opmaakformaat bevatten. Dus voel je vrij om de inhoud van je GitHub te kopiëren README.md
het dossier.
Afhankelijkheden / tags
Gebruik de kommaknop op uw toetsenbord om tags en afhankelijkheden te scheiden. Het veld afhankelijkheden moet het korte installatie-sleutelwoord bevatten voor de bundel die bestaat als een afhankelijkheid voor de bundel die u indient.
Actief
De Actief
veld bepaalt eenvoudig of de bundel al dan niet aan andere gebruikers wordt getoond. U kunt nog steeds inactieve bundels installeren met hun installatiezoekwoord voor testdoeleinden. Stel dit veld alleen in op 'Ja' als u blij bent dat andere mensen uw bundel gebruiken.
Nadat u op de knop 'Opslaan' hebt geklikt, is uw bundel ingediend en, indien gemarkeerd als 'Actief', verschijnt deze in de bundelvermeldingen. U kunt uw bundellijst altijd op een later tijdstip bewerken.
Bundels die zijn gedeeld met de Laravel-community, worden vermeld in de map Bundles op http://bundles.laravel.com.
U kunt bundels per categorie bekijken of de zoekfunctie gebruiken om de bundel te vinden die u zoekt. Zodra u een bundel hebt gevonden die aan uw vereisten voldoet, bekijkt u het tabblad 'Installatie' van het profiel van de bundel om het installatiezoekwoord te vinden.
Zodra u het installatie sleutelwoord voor een bundel heeft, kunt u het vanuit de basis van uw project installeren met behulp van de 'Artisan' opdrachtregelinterface, en het is bundel: installeer
commando. Bijvoorbeeld…
php artisan bundle: installeer bob
Artisan zal de API van de bundel raadplegen om het pad naar de GitHub-repository van de bundels en de repositories van al zijn afhankelijkheden op te halen. Vervolgens worden bronpakketten rechtstreeks van GitHub gedownload en geëxtraheerd naar de / bundels
directory voor jou.
U moet de naam van de bundel handmatig toevoegen aan de array daarin application / bundles.php
om de bundel in te schakelen.
return array ('docs' => array ('handles' => 'docs'), 'bob');
In sommige situaties moet u mogelijk extra informatie toevoegen rangschikking
toegang om automatisch starten te vergemakkelijken of om bepaalde routes naar de bundel te leiden. De auteur heeft deze extra informatie in de bundelbeschrijving opgenomen, als dat het geval is.
Bedankt voor het lezen en geniet van het maken van je eigen bundels met Laravel! Als je meer wilt weten over Laravel, moet je mijn boek ophalen!