Ritorniamo con le nostre super guide Laravel! Oggi vediamo come creare un package in Laravel usando il seguente flusso di lavoro.

  • Creeremo un ambiente dentro un’installazione Laravel
  • Completeremo lo sviluppo del package
  • Lo estrarremo su un repositorio Github
  • Registreremo il package con packagist
  • Installeremo il nostro package con Composer su un altro progetto

Ok. Avanti tutta!

Creazione di un Package

Andiamo dentro la cartella del progetto e creiamo la seguente struttura.

Dal terminale, spostandoci nella cartella packages/laramind/calculator inizializziamo il package

composer init
Il file alla fine risulterà simile a questo.

laravel new package-sandbox
packages
    -- laramind
        -- calculator
            -- src
{
    "name": "laramind/calculator",
    "description": "Math and stuff",
    "authors": [
        {
            "name": "Sidrit Trandafili",
            "email": "forge405@gmail.com"

} ],

    "minimum-stability": "dev",
    "require": {}
}

A questo punto abilitiamo il package auto-discovery e definiamo il nostro namespace

{
    "name": "laramind/calculator",
    "description": "Math and stuff",
    "type": "library",
    "license": "MIT",
    "authors": [
        {
            "name": "Sidrit Trandafili",
            "email": "forge405@gmail.com"

} ],

    "minimum-stability": "stable",
    "autoload": {
        "psr-4": {
            "Sid\\Calculator\\": "src/"

} },

    "extra": {
        "laravel": {
            "providers": [

] }

},

    "require": {}
}
"Sid\\Calculator\\CalculatorServiceProvider"

Creiamo un ServiceProvider. Questo file verrà creato in app/Providers. Lo spostiamo in packages/laramind/calculator/src

php artisan make:provider CalculatorServiceProvider. Abilitiamo il nostro composer.json (quello del progetto Laravel) a caricare il nostro package

//composer.json

“psr-4”: {

            "App\\": "app/",
            "Sid\\Calculator\\": "packages/laramind/calculator/src"
        }
// config/app.php
Sid\Calculator\CalculatorServiceProvider::class,
//composer dump-autoload

Questo ci permette di lavorare in locale senza dover installare il package ogni volta.

Creazione di un package dentro la nostra cartella src. Creiamo un file routes.php.

Dentro il metodo boot() del ServiceProvider del package istruiamo Laravel a includere queste routes

Route::get('math', function(){
        echo 'The calculator!';

});

public function boot()
{

//

    include __DIR__.'/routes.php';
}

Adesso creiamo un Controller. Questo file verrà creato in app/Http/Controllers. Lo spostiamo in packages/laramind/calculator/src

php artisan make:controller MathCalculator Definiamo due metodi

<?php

namespace Laramind\Calculator;
use App\Http\Controllers\Controller;
class CalculatorController extends Controller
{
    public function add($a, $b)
    {
        $result = $a + $b;
        return view('calculator::result', compact('result'));
    }
    public function subtract($a, $b)
    {
        $result = $a - $b;
        return view('calculator::result', compact('result'));
    }

}

Creazione di un package Nel metodo register del nostro Provider, registriamo il nostro controller

$this->app->make(‘Laramind\Calculator\MathController’); Definiamo due metodi

<?php

namespace Laramind\Calculator;
use App\Http\Controllers\Controller;
class CalculatorController extends Controller
{
    public function add($a, $b)
    {
        $result = $a + $b;
        return view('calculator::result', compact('result'));
    }
    public function subtract($a, $b)
    {
        $result = $a - $b;
        return view('calculator::result', compact('result'));
    }
}
Route::get('add/{a}/{b}', 'Laramind\Calculator\MathController@add');
Route::get('subtract/{a}/{b}', 'Laramind\Calculator\MathController@subtract');

Creiamo una cartella views. Creiamo dentro questa cartella un file result.blade.php

<!DOCTYPE html>
<html>
<head>
    <title>Math</title>
</head>
<body>
    <h1 style="text-align:center">

The result is

        <span>{{ $result }}</span>
    </h1>
</body>
</html>

Istruiamo Laravel a riconoscere queste views tramite una dichiarazione nel provider

public function register()
{
    $this->app->make('Sid\Calculator\MathController');
    $this->loadViewsFrom(__DIR__.'/views', 'calculator');
}

LaraMind in Italia è il punto di riferimento per quanto riguarda Laravel e Vue.js, una divulgazione continua e un aggiornamento costante con novità e guide tecniche sul blog e non solo, tanta, tantissima formazione in aula e da remoto, e formazione customizzata per privati e aziende.