Dezvoltarea unui pachet de laravel - Tutorial pas cu pas

postat acum 2 luni de Stefanescu Mihai in categorie iNoob

A 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\[email protected]’);
Route::get(‘subtract/{a}/{b}’, ‘invataprogramare\Calculator\[email protected]’);

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.

Sunt un tanar programator din Bucuresti ce lucreaza in PHP/Mysql (MySqli/PDO), Laravel, CodeIgniter, MySQL, PostgreSQL, Wordpress, HTML5/CSS3, Sass, Photoshop si multe altele.
Google+ Community Facebook Group