Ricerca…
introduzione
Laravel consente l'accesso a una varietà di classi chiamate Servizi. Alcuni servizi sono disponibili immediatamente, ma è possibile crearli da soli.
Un servizio può essere utilizzato in più file dell'applicazione, come i controller. Immaginiamo un servizio OurService
implementa un metodo getNumber()
restituendo un numero casuale:
class SomeController extends Controller {
public function getRandomNumber()
{
return app(OurService::class)->getNumber();
}
}
Per creare un servizio, è necessario solo creare una nuova classe:
# app/Services/OurService/OurService.php
<?php
namespace App\Services\OurService;
class OurService
{
public function getNumber()
{
return rand();
}
}
A questo punto, potresti già utilizzare questo servizio in un controller, ma dovresti creare un'istanza di un nuovo oggetto ogni volta che ne hai bisogno:
class SomeController extends Controller {
public function getRandomNumber()
{
$service = new OurService();
return $service->getNumber();
}
public function getOtherRandomNumber()
{
$service = new OurService();
return $service->getNumber();
}
}
Questo è il motivo per cui il prossimo passo è registrare il tuo servizio nel Service Container . Quando registri il servizio nel contenitore del servizio, non è necessario creare un nuovo oggetto ogni volta che ne hai bisogno.
Per registrare un servizio nel contenitore del servizio, è necessario creare un fornitore di servizi . Questo fornitore di servizi può:
- Registra il tuo servizio nel contenitore di servizio con il metodo di registrazione )
- Iniezione di altri servizi nel servizio (dipendenze) con il metodo di avvio
Un fornitore di servizi è una classe che estende la classe astratta Illuminate\Support\ServiceProvider
. È necessario implementare il metodo register()
per registrare un servizio nel Service Container :
# app/Services/OurService/OurServiceServiceProvider.php
<?php
namespace App\Services\OurService;
use Illuminate\Support\ServiceProvider;
class OurServiceServiceProvider extends ServiceProvider
{
public function register()
{
$this->app->singleton('OurService', function($app) {
return new OurService();
});
}
}
Tutti i fornitori di servizi sono salvati in un array in config/app.php
. Quindi abbiamo bisogno di registrare il nostro fornitore di servizi in questo array:
return [
...
'providers' => [
...
App\Services\OurService\OurServiceServiceProvider::class,
...
],
...
];
Ora possiamo accedere al nostro servizio in un controller. Tre possibilità:
- Iniezione di dipendenza:
<?php
namespace App\Http\Controllers;
use App\Services\OurService\OurService;
class SomeController extends Controller
{
public function __construct(OurService $our_service)
{
dd($our_service->getNumber());
}
}
- Accesso tramite l'helper
app()
:
<?php
namespace App\Http\Controllers;
use App\Services\OurService\OurService;
class SomeController extends Controller
{
public function getRandomNumber()
{
return app('OurService')->getNumber();
}
}
Laravel fornisce facciate, classi immaginarie che puoi usare in tutti i tuoi progetti e riflettere un servizio. Per accedere più facilmente al tuo servizio, puoi creare una facciata:
<?php
namespace App\Http\Controllers;
use Randomisator;
class SomeController extends Controller
{
public function getRandomNumber()
{
return Randomisator::getNumber();
}
}
Per creare una nuova facciata, è necessario creare una nuova classe che estende Illuminate\Support\Facades\Facade
. Questa classe deve implementare il metodo getFacadeAccessor()
e restituire il nome di un servizio registrato da un fornitore di servizi :
# app/Services/OurService/OurServiceFacade.php
<?php
namespace App\Services\OurService;
use Illuminate\Support\Facades\Facade;
class OurServiceFacade extends Facade
{
protected static function getFacadeAccessor()
{
return 'OurService';
}
}
Devi anche registrare la tua facciata in config/app.php
:
return [
...
'aliases' => [
....
'Randomisator' => App\Services\OurService\OurServiceFacade::class,
],
];
The Facade è ora accessibile ovunque nel tuo progetto.
Se si desidera accedere al servizio dalle proprie visualizzazioni, è possibile creare una funzione di supporto. Laravel viene fornito con alcuni helper che funzionano fuori dalla scatola, come la funzione auth()
o la funzione view()
. Per creare una funzione di supporto, crea un nuovo file:
# app/Services/OurService/helpers.php
if (! function_exists('randomisator')) {
/**
* Get the available OurService instance.
*
* @return \App\ElMatella\FacebookLaravelSdk
*/
function randomisator()
{
return app('OurService');
}
}
Devi anche registrare questo file, ma nel tuo file composer.json
:
{
...
"autoload": {
"files": [
"app/Services/OurService/helpers.php"
],
...
}
}
Ora puoi usare questo helper in una vista:
<h1>Here is a random number: {{ randomisator()->getNumber() }}</h1>