IMPORTANT: Per accedir als fitxer de subversion: http://acacha.org/svn (sense password). Poc a poc s'aniran migrant els enllaços. Encara però funciona el subversion de la farga però no se sap fins quan... (usuari: prova i la paraula de pas 123456)

Requeriments

Llegiu abans fonaments Laravel especialment l'apartat Laravel Request Lifecycle i com no la documentació oficial:

https://laravel.com/docs/master/providers

Introducció

Els proveïdors de serveis a Laravel són el component principal de Laravel per al boostrapping de les nostres aplicacions. Tant la nostra aplicació, com els components core de Laravel, com els components de tercers (Laravel packages) són arrancats/bootstraped mitjançant proveidors de serveis.

Però que vol dir boostraping?

IMPORTANT: En general arrancar o boostraping significa registrar coses que fan que la nostra aplicació funciona, com per exemple service container bindings, event listeners, middleware o fins i tots les Laravel routes s'arranquen mitjançant un Service Provider. Els Service providers són el lloc principal de configuració de la nostra aplicació

Configuració

Al fitxer config/app.php podeu veure els proveïdors que està utilitzant la vostra aplicació al array providers. Vegeu:

https://github.com/laravel/laravel/blob/master/config/app.php

Podeu observar tres tipus de servei:

  • Laravel Framework Service Providers: són proveïdors de servei proporcionats pel propi framework, és a dir pel paquet laravel/framework del que depèn qualsevol aplicació Laravel (vegeu el fitxer composer.json del vostre projecte Laravel)
  • Application Service Providers: aquests són els proveïdors de servei específics de la vostra aplicació Laravel. Atenció, aquí cal tenir en compte que sovint no construïm aplicacions Laravel des de zero, sinó que utilitzem un codi de plantilla o Boilerplate o Scaffolding. Aquesta plantilla és la que instal·la la comanda laravel i no és res més que el codi del repositori laravel/laravel. Aquesta plantilla ja ens proporciona un conjunt de proveïdors de servei per defecte típics de totes les aplicacions Laravel com AuthServiceProvider, EventServiceProvider, RouteServiceProvider o AppServiceProvider. De fet aquest últim si l'observeu està buit i simplement serveix com a plantilla per tal que l'utilitzeu per tal de dur a terme les tasques de bootstraping pròpies de la vostra aplicació.
  • Third Party Service Providers: Sovint instal·larem paquets extra a les nostres aplicacions Laravel. Tot paquet Laravel proporciona nous proveïdors de servei i com a tal s'hauran d'instal·lar manualment al fitxer config/app.php. Vegeu alguns paquets famosos com Laravel Debugbar o Laravel IDE Helper (també us pot interessar el paquet acacha/llum)


El fitxer app.php és el fitxer core/principal de configuració a Laravel.

IMPORTANT: No tots els serveis s'executen a cada Request! Us podeu imaginar que carregar tots els serveis sempre quan no els utilitzem a cada petició HTTP seria un greu inconvenient pel rendiment de l'aplicació. Alguns proveidors són deferred providers és a dir proveïdors que només es carreguen quan es necessiten

Creació de Service Providers

Podeu utilitzar la comanda artisan:

$ php artisan make:provider MyOwnServiceProvider

Això ens crearà el codi a la carpeta app/Providers:

<?php

namespace App\Providers;

use Illuminate\Support\ServiceProvider;

class AppServiceProvider extends ServiceProvider
{
    /**
     * Bootstrap any application services.
     *
     * @return void
     */
    public function boot()
    {
        //
    }

    /**
     * Register any application services.
     *
     * @return void
     */
    public function register()
    {
        //
    }
}

Tots els proveïdors de Serveis són fills o hereus de la classe

Illuminate\Support\ServiceProvider [1]

Com podeu observar cada proveïdor de serveis fa bàsicament dos tasques/dos mètodes:

  • register: per registrar entenem definir les coses que proporcionarà el service provider a l'aplicació. Es pot veure com una "mena de constructor" del Service Provider. És important el codi que executem a register sigui codi independent d'altres proveïdors de serveis o dit d'un altre forma només podem executar codi d'inicialització del nostre propi servei i no podem executar codi d'altres serveis. Al mètode register només s'haurien de fer tasques d'associació (binding) d'objectes al service container (vegeu també Laravel Service Container). Mai s'han de fer tasques com registrar event listeners o routes, o qualsevol altre codi que no tingui relació amb el service container ja que sinó pot passar que utilitzem alguna funcionalitat que encara no està disponible.
  • boot: El mètode boot s'executa després d'haver executat el mètode register de tots els Service Providers de la nostra aplicació. Per tant en aquest mètode podem fer ús del codi que altres service providers haguin executat als seus propis register methods

IMPORTANT: Com podeu veure la principal diferencia entre els dos mètodes és el moment en que s'executen durant el cicle de vida d'una aplicació Laravel. El mètode boot s'executa després d'haver executat el mètode register de tots els Service Providers de la nostra aplicació

Vegeu també

Enllaços externs