Dezvoltarea unui pachet de laravel - Tutorial pas cu pas
Stefanescu Mihai 2 years ago iNoobA venit un moment in care deja scrisesem cateva aplicatii in laravel, dar voiam sa am cod pe care sa il pot refolosi in proiectele mele...asa ca am inceput sa fac pachete de laravel pentru a imi usura viata. In acest tutorial am sa va invat sa scrieti primul vostru pachet de laravel.
Creaza un folder pentru noul nostru pachet
Hai sa facem o noua aplicatie de laravel folosind comanda
laravel new my_app
Dupa ce am instalat laravel-ul trebui sa facem un folder packages in radacina acestuia.
Apoi, in acest nou folder o sa facem un folder cu numele companiei sau numele nostru, in cazul meu va fi invata-programare.
In interiorul acestui folder trebuie sa avem folderul pachetului nostru, in cazul meu calculator.
Acum, ultimul folder din structura va fi folderul src, folder in care va fi pus codul pachetului nostru.
Ok,acum structura nostra ar trebui sa arate astfel: 'packages/invataprogramare/calculator/src'
Numele pachetului si initializarea composer
In terminal/cmd navigati pana in fodlerul pachetului, in cazul meu 'packages/invataprogramare/calculator' si rulati urmatoarea comanda.
composer init
Aceasta va initializa folderul curent ca si pachet de composer si va va pune o serie de intrebari. Va cere numele, descrierea, autorul si alte informatii. Puteti da Skip la intrebarilor carora nu le stiti raspunde si le putem edita mai tarziu. Dupa ce acest proces s-a terminat o sa gasim un fisier composer.json in folderul pachetului:
{ “name”: “invataprogramare/calculator”, “description”: “un pachet creat cu scop educativ.”, “authors”: [ { “name”: “numele tau”, “email”: “emailul tau” } ], “minimum-stability”: “dev”, “require”: {} }
Super! Acum ca am intializat pachetul trebuie sa il adaugam in fisierul composer.json principal.
Incarcarea pachetului in composer.json-ul aplicatiei
In radacina laravel-ului avem un fisier composer.json, aici trebuie sa ne definim toate dependintele aplicatiei.
Pentru a incarca pachetul in composer.json trebuie sa il trecem in blocul de PSR-4
“autoload”: { “classmap”: [ “database” ], “psr-4”: { “App\\”: “app/”, “invataprogramare\\Calculator\\”: “packages/invataprogramare/calculator/src” } },
Apoi trebuie sa rulam urmatoarea comanda:
composer dump-autoload
Si pentru a optimiza class loader-ul:
php artisan optimize
Adaugarea in Service Provider
ServiceProvider-ul este principalul mod de a accesa pachetul. De aici incepe pachetul sa fie incarcat. Hai sa creeam un nou service provider folosind comanda
php artisan make:provider CalculatorServiceProvider
Aceasta comanda va creea un nou fisier in 'app/providers/CalculatorServiceProvider.php'
Noi trebuie sa il luam de aici si sa il mutam in 'packages/invataprogramare/calculator/src/CalculatorServiceProvider.php'
Nu uita sa schimbi namespace-ul in Vendor\Pachet!
Dupa cum bine stim, in service provider avem 2 metode predefinite, boot() si register(). Metoda boot() este folosita pentru a incarca rute, listeneri, etc. Metoda register() este folosita pentru a ne lega la containerul aplicatiei.
Acum trebuie sa adaugam noul nostru service provider in config/app.php in array-ul $providers
‘providers’ => [ /* * Laravel Framework Service Providers… */ Illuminate\Auth\AuthServiceProvider::class, //.. Other providers invataprogramare\Calculator\CalculatorServiceProvider::class, ],
Adaugarea rutelor
Hai sa facem un nou fisier routes.php in folderul src al pachetului nostru si sa punem urmatorul cod in el:
<?php Route::get(‘calculator’, function(){ echo ‘Salutari din ruta primului meu pachet de laravel!’; });
Apoi sa includem acest fisier in metoda boot() a service providerului nostru:
public function boot() { include __DIR__.’/routes.php’; }
Eu folosesc php artisan serve pentru a accesa site-ul, daca accesez http://localhost:8000/calculator am sa vad mesajul pe ecran.
Controllerele
Haideti sa facem un controller nou ruland comanda:
php artisan make:controller CalculatorController
Acum, ca si in cazul service providerul-ui, trebuie sa mutam acest fisier in packages/invataprogramare/calculator/src/CalculatorController.php
Din nou, nu uita sa schimbi namespace-ul acestui fisier.
Acum, hai sa adaugam 2 metode, add si substract():
<?php namespace invataprogramare\Calculator; use Illuminate\Http\Request; use App\Http\Requests; use App\Http\Controllers\Controller; class CalculatorController extends Controller { public function add($a, $b){ echo $a + $b; } public function subtract($a, $b){ echo $a — $b; } }
Dupa ce am creat acest fisier trebuie sa il inregistram in Service Provider in metoda register():
public function register() { $this->app->make(‘invataprogramare\Calculator\CalculatorController’); }
Ne-a mai ramas numai sa adaugam rutele in fisierul routes.php
Route::get(‘add/{a}/{b}’, ‘invataprogramare\Calculator\CalculatorController@add’); Route::get(‘subtract/{a}/{b}’, ‘invataprogramare\Calculator\CalculatorController@subtract’);
Daca intram pe site si navigam pe rutele acestea o sa vedem in pagina rezultatul.
View-uri
Ne-a mai ramas un singur lucru, sa adaugam un view in pachet.
In packages/invataprogramare/calculator/src/views adaugam un fisier nou, add.blade.php cu acest continut:
<!DOCTYPE html> <html> <head> <title>Calculator</title> </head> <body> <h1>Rezultat</h1> {{ $result }} </body> </html>
Acum trebuie sa inregistram acest view in service provider:
public function register() { $this->app->make(‘invataprogramare\Calculator\CalculatorController’); $this->loadViewsFrom(__DIR__.’/views’, ‘calculator’); }
Si sa schimbam metodele din controller astfel incat sa returneze view-ul.
public function add($a, $b){ $result = $a + $b; return view(‘calculator::index’, compact(‘result’)); } public function subtract($a, $b){ $result = $a + $b; return view(‘calculator::index’, compact(‘result’)); }
Asta este tot pentru acest articol, mai departe pachetele dezvoltate de voi le puteti uploada pe packagist astfel inca sa poata fi instalate folosind composer.