Als PHP-ontwikkelaar bent u wellicht geïnteresseerd in het werken met frameworks. Frameworks proberen het ontwikkelproces te vereenvoudigen door het vereenvoudigen van gangbare praktijken die worden gebruikt in de meeste webprojecten zoals pakketten, modules, plug-ins en zelfs componenten (CakePHP).
Misschien heb je tijdens het ontwikkelingsproces het gevoel dat je het wiel opnieuw uitvindt, bijvoorbeeld bij het maken van een verificatie- of Captcha-toepassing. In dit geval moet u een pakket maken dat uw app-ontwikkeling sneller en gemakkelijker zal maken en vereenvoudigen.
Er zijn twee soorten pakketten; sommige zijn kader onafhankelijk (stand-alone) en de anderen zijn voor een specifiek kader. Deze tutorial behandelt uitsluitend Laravel-pakketten.
Voordat u een pakket maakt, moet u meer weten over pakketbeheerders. PEAR is een bekende PHP-pakketmanager die, hoewel beschikbaar, maar zelden wordt gebruikt. Waarom? Het dwong je om pakketten systeembreed te installeren in plaats van op projectbasis. Componist werd de opvolger van PEAR.
Een van de parameters voor het schalen van de framework-kracht is hoe de ontwikkelaar nuttige pakketcodes opnieuw verdeelt. Hiermee kunnen ontwikkelaars applicaties samenvatten in verschillende pakketten met kleinere applicaties.
Pakketten bieden inderdaad een geweldige manier om gerelateerde code te groeperen. Pakketten lijken veel op "Componenten". Het is belangrijk op te merken dat de broncode van Laravel een "pakket" is, dat Taylor Otwell noemt DEFAULT_BUNDLE
.
Een groot voordeel van Laravel-pakketten is dat ze toegang bieden tot alle functies die het framework biedt voor de hosttoepassing, waaronder routing, migraties, tests, weergaven en tal van andere handige functies. Een ander belangrijk voordeel van een pakket is het DRY (Do not Repeat Yourself) -principe. Door een pakket te maken voor code die u vaak gebruikt, bespaart u middelen en verbetert u de prestaties van uw toepassing.
Laten we nu enkele nuttige Laravel-pakketten introduceren. Pakketten die ik heb gebruikt, zijn onder andere:
Mogelijk vindt u de verpakkingsmogelijkheden die u nodig hebt in packalyst. Packalyst maakt een eenvoudig en sociaal pakkettenregister voor Laravel.
Maak een eenvoudig authenticatiepakket voor Laravel 5.0. Om dit te doen, moet je eerst en vooral een composer.json
bestand voor uw nieuwe pakket:
"naam": "alireza / myauth", "description": "Hoe uw laravel 5-pakket maken", "licentie": "MIT", "auteurs": ["name": "Alireza Rahmani khalili", "email ":" [email protected] "]," minimum-stabiliteit ":" dev "," require ": " laravel / framework ":" ~ 5.0 "," autoload ": " psr-4 ": "Alireza \\ Authentication \\": "src /"
De serviceprovidersklasse is gewoon het bestand dat alles correct instelt voor het pakket. Dit is hoe de serviceprovider er op dit moment in zou moeten uitzien src / MyAuthServiceProvider.php
:
naamruimte Alireza \ Authenticatie; gebruik Illuminate \ Support \ ServiceProvider; class MyAuthServiceProvider breidt ServiceProvider uit / ** * Geeft aan of het laden van de provider is uitgesteld. * * @var bool * / protected $ defer = false; / ** * Bootstrap de toepassingsgebeurtenissen. * * @return void * / public function boot () / ** * Registreer de serviceprovider. * * @return void * / public function register () / ** * Ontvang de services die door de provider worden aangeboden. * * @return array * / public function provides () return [];
Voeg de serviceprovider toe aan config / app.php
:
'Alireza \ Authentication \ MyAuthServiceProvider :: class',
Nu is Laravel op de hoogte van het pakket. U kunt vragen over "alias" en waarom ik het niet aan mijn toevoegen app.php
. Persoonlijk voeg ik een alias toe aan de registermethode van de serviceprovidersklasse in plaats van deze handmatig aan het Laravel-configuratiebestand toe te voegen. Ik zal dit later bespreken. Maak nu een eenvoudige PHP-klasse met de naam MyAuth
in src / MyAuth.php
:
naamruimte Alireza \ Authenticatie; gebruik Config, Request, Session, Hash; gebruik App \ Gebruiker; Klasse MyAuth public $ redirect_login = '/ users / home'; public $ redirect_logout = '/ users / logout'; public $ login = '/ user / login'; beschermde $ gegevens; openbare functie __construct () if (Request :: isMethod ('post')) // Get post-invoer $ this-> data = array ('gebruikersnaam' => Input :: get ('gebruikersnaam'), 'wachtwoord' = > Input :: get ('wachtwoord')); public function login ($ data = false) $ this-> data = $ data; if ($ this-> data &&! is_array ($ this-> data)) return redirect ($ this-> login) -> with ('message', 'sorry geen array om handmatig in te loggen') -> send ( ); if ($ this-> data &&! Session :: has ('user')) $ result = User :: Where (['email' => $ this-> data ['gebruikersnaam']]) -> eerst ( ); if ($ result && Hash :: check ($ this-> data ['password'], $ result-> password)) Session :: put ('user', $ result); return Redirect ($ this-> redirect_login) -> with ('message', 'Welcome log-in succeeded') -> send (); Sessie :: flush (); return redirect ($ this-> login) -> with ('message', 'Login failed, foute gebruikersnaam of wachtwoord') -> send (); openbare functie logout () Session :: flush (); return redirect ($ this-> login) -> with ('message', 'logout succeeded') -> send ();
De authenticatieklasse moet met de IoC-container van Laravel binden aan de serviceprovider van het pakket. Maak daarvoor een Facade-klasse die het gebruik van klassemethoden toestaat zonder dat er een nieuw exemplaar moet worden gemaakt, evenals andere voordelen die eerder zijn aangegeven. Net zoals de MyAuth-klasse de nieuwe map heeft gemaakt gevels
in de directory Facades, maak een nieuwe PHP-klasse en noem die src / MyAuthFacade.php
:
naamruimte Alireza \ Authenticatie; gebruik Illuminate \ Support \ Facades \ Facade; class MyAuthFacade breidt Facade uit beschermde statische functie getFacadeAccessor () retourneer 'MyAuth';
Hierna is het enige dat overblijft om het pakket op te starten. De mijne ziet eruit als:
public function register () $ this-> app ['MyAuth'] = $ this-> app-> share (function ($ app) retourneer nieuwe MyAuth;); $ this-> app-> opstarten (function () $ loader = \ Illuminate \ Foundation \ AliasLoader :: getInstance (); $ loader-> alias ('MyAuth', 'Alireza \ Authentication \ MyAuthFacade'););
Zoals je ziet, heb ik de Myauth-klasse gebonden met de IoC-container. Nu is het gemakkelijk om de MyAuth-klasse te gebruiken:
MyAuth :: login ([ 'username' => '[email protected]', 'password' => 'test']);
Dit zou het bericht moeten genereren, Welkomst log-in is gelukt.
Indien gewenst kunt u uw pakket nu registreren in Packagist. Het MyAuth-pakket is nu geregistreerd en kan eenvoudig in Laravel worden opgenomen via het commando voor de componist: componist vereist "alireza / myauth"
.
Als u op zoek bent naar een voorbeeld van een populair, volwassen Laravel-pakket, dan kunt u TerranetAdmin voor Laravel bekijken.
Dit was een kort overzicht van het maken van een Laravel 5-pakket. Zoals u kunt zien, is het maken van het pakket eenvoudig en zou het een belangrijk hulpmiddel kunnen zijn om het ontwikkelingsproces te vereenvoudigen en te versnellen.