Zoeken…
Invoering
Laravel geeft toegang tot verschillende klassen die Services worden genoemd. Sommige services zijn standaard beschikbaar, maar u kunt ze zelf maken.
Een service kan in meerdere bestanden van de toepassing worden gebruikt, zoals controllers. Laten we ons voorstellen a Service OurService
uitvoering van een getNumber()
methode het terugsturen van een willekeurig getal:
class SomeController extends Controller {
public function getRandomNumber()
{
return app(OurService::class)->getNumber();
}
}
Om een service te maken, is het alleen nodig om een nieuwe klasse te maken:
# app/Services/OurService/OurService.php
<?php
namespace App\Services\OurService;
class OurService
{
public function getNumber()
{
return rand();
}
}
Op dit moment zou je deze service al in een controller kunnen gebruiken, maar je zou elke keer dat je het nodig hebt een nieuw object moeten instantiëren:
class SomeController extends Controller {
public function getRandomNumber()
{
$service = new OurService();
return $service->getNumber();
}
public function getOtherRandomNumber()
{
$service = new OurService();
return $service->getNumber();
}
}
Daarom is de volgende stap het registreren van uw service in de Service Container . Wanneer u uw Service in de Service Container registreert, hoeft u niet elke keer een nieuw object te maken.
Als u een service in de servicecontainer wilt registreren, moet u een serviceprovider maken . Deze dienstverlener kan:
- Registreer uw service in de servicecontainer met de registratiemethode )
- Andere services in uw service injecteren (afhankelijkheden) met de opstartmethode
Een serviceprovider is een klasse die de abstracte klasse Illuminate\Support\ServiceProvider
uitbreidt. Het moet de methode register()
implementeren om een service in de servicecontainer te registreren :
# 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();
});
}
}
Alle serviceproviders worden opgeslagen in een array in config/app.php
. Daarom moeten we onze serviceprovider in deze array registreren:
return [
...
'providers' => [
...
App\Services\OurService\OurServiceServiceProvider::class,
...
],
...
];
We hebben nu toegang tot onze Service via een controller. Drie mogelijkheden:
- Afhankelijkheid injectie:
<?php
namespace App\Http\Controllers;
use App\Services\OurService\OurService;
class SomeController extends Controller
{
public function __construct(OurService $our_service)
{
dd($our_service->getNumber());
}
}
- Toegang via de
app()
helper:
<?php
namespace App\Http\Controllers;
use App\Services\OurService\OurService;
class SomeController extends Controller
{
public function getRandomNumber()
{
return app('OurService')->getNumber();
}
}
Laravel biedt gevels, denkbeeldige klassen die u in al uw projecten kunt gebruiken en die een service weergeven. Om gemakkelijker toegang te krijgen tot uw service, kunt u een gevel maken:
<?php
namespace App\Http\Controllers;
use Randomisator;
class SomeController extends Controller
{
public function getRandomNumber()
{
return Randomisator::getNumber();
}
}
Als u een nieuwe gevel wilt maken, moet u een nieuwe klasse maken met de uitbreiding Illuminate\Support\Facades\Facade
. Deze klasse moet de methode getFacadeAccessor()
implementeren en de naam retourneren van een service die is geregistreerd door een serviceprovider :
# 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';
}
}
U moet ook uw gevel registreren in config/app.php
:
return [
...
'aliases' => [
....
'Randomisator' => App\Services\OurService\OurServiceFacade::class,
],
];
De gevel is nu overal in uw project toegankelijk.
Als u vanuit uw weergaven toegang wilt krijgen tot uw service, kunt u een helperfunctie maken. Laravel wordt geleverd met enkele helpers-functie uit de doos, zoals de auth()
-functie of de view()
-functie. Maak een nieuw bestand aan om een helpfunctie te maken:
# app/Services/OurService/helpers.php
if (! function_exists('randomisator')) {
/**
* Get the available OurService instance.
*
* @return \App\ElMatella\FacebookLaravelSdk
*/
function randomisator()
{
return app('OurService');
}
}
U moet dit bestand ook registreren, maar in uw composer.json
bestand:
{
...
"autoload": {
"files": [
"app/Services/OurService/helpers.php"
],
...
}
}
U kunt deze helper nu in een weergave gebruiken:
<h1>Here is a random number: {{ randomisator()->getNumber() }}</h1>