Suche…
Einführung
Laravel ermöglicht den Zugriff auf eine Vielzahl von Klassen, die als Services bezeichnet werden. Einige Dienste sind sofort verfügbar, Sie können sie jedoch selbst erstellen.
Ein Dienst kann in mehreren Dateien der Anwendung wie Controller verwendet werden. Stellen wir uns vor, ein Service OurService
implementiert eine getNumber()
-Methode, die eine Zufallszahl getNumber()
:
class SomeController extends Controller {
public function getRandomNumber()
{
return app(OurService::class)->getNumber();
}
}
Um einen Service zu erstellen, müssen Sie nur eine neue Klasse erstellen:
# app/Services/OurService/OurService.php
<?php
namespace App\Services\OurService;
class OurService
{
public function getNumber()
{
return rand();
}
}
Zu diesem Zeitpunkt könnten Sie diesen Dienst bereits in einem Controller verwenden, müssen jedoch jedes Mal ein neues Objekt instanziieren, wenn Sie es benötigen:
class SomeController extends Controller {
public function getRandomNumber()
{
$service = new OurService();
return $service->getNumber();
}
public function getOtherRandomNumber()
{
$service = new OurService();
return $service->getNumber();
}
}
Daher ist der nächste Schritt die Registrierung Ihres Dienstes im Dienstcontainer . Wenn Sie Ihren Dienst im Dienstcontainer registrieren, müssen Sie nicht jedes Mal ein neues Objekt erstellen, wenn Sie es benötigen.
Um einen Dienst im Dienstcontainer zu registrieren, müssen Sie einen Dienstanbieter erstellen. Dieser Dienstanbieter kann:
- Registrieren Sie Ihren Service mit der Registrierungsmethode im Service-Container.
- Injizieren anderer Dienste in Ihren Dienst (Abhängigkeiten) mit der Startmethode
Ein Service Provider ist eine Klasse, die die abstrakte Klasse Illuminate\Support\ServiceProvider
. Es muss die register()
-Methode implementiert werden, um einen Dienst im Dienstcontainer zu registrieren :
# 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 Dienstanbieter werden in einem Array in config/app.php
. Also müssen wir unseren Service Provider in diesem Array registrieren:
return [
...
'providers' => [
...
App\Services\OurService\OurServiceServiceProvider::class,
...
],
...
];
Wir können jetzt auf unseren Service in einer Steuerung zugreifen. Drei Möglichkeiten:
- Abhängigkeitsspritze:
<?php
namespace App\Http\Controllers;
use App\Services\OurService\OurService;
class SomeController extends Controller
{
public function __construct(OurService $our_service)
{
dd($our_service->getNumber());
}
}
- Zugriff über den
app()
Helfer:
<?php
namespace App\Http\Controllers;
use App\Services\OurService\OurService;
class SomeController extends Controller
{
public function getRandomNumber()
{
return app('OurService')->getNumber();
}
}
Laravel bietet Fassaden, imaginäre Kurse, die Sie in allen Ihren Projekten verwenden können und einen Service widerspiegeln. Um auf Ihren Dienst einfacher zuzugreifen, können Sie eine Fassade erstellen:
<?php
namespace App\Http\Controllers;
use Randomisator;
class SomeController extends Controller
{
public function getRandomNumber()
{
return Randomisator::getNumber();
}
}
Um eine neue Fassade zu erstellen, müssen Sie eine neue Klasse erstellen, die Illuminate\Support\Facades\Facade
. Diese Klasse muss die zur Umsetzung getFacadeAccessor()
Methode und gibt den Namen eines Dienstes von einem Service Provider registriert:
# 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';
}
}
Sie müssen Ihre Facade auch in config/app.php
:
return [
...
'aliases' => [
....
'Randomisator' => App\Services\OurService\OurServiceFacade::class,
],
];
Die Fassade ist jetzt überall in Ihrem Projekt zugänglich.
Wenn Sie von Ihren Ansichten aus auf Ihren Dienst zugreifen möchten, können Sie eine Hilfsfunktion erstellen. Laravel wird mit einigen Helfern ausgeliefert, wie die auth()
oder die view()
Funktion. Um eine Hilfsfunktion zu erstellen, erstellen Sie eine neue Datei:
# app/Services/OurService/helpers.php
if (! function_exists('randomisator')) {
/**
* Get the available OurService instance.
*
* @return \App\ElMatella\FacebookLaravelSdk
*/
function randomisator()
{
return app('OurService');
}
}
Sie müssen diese Datei auch registrieren, jedoch in Ihrer composer.json
Datei:
{
...
"autoload": {
"files": [
"app/Services/OurService/helpers.php"
],
...
}
}
Sie können diesen Helfer jetzt in einer Ansicht verwenden:
<h1>Here is a random number: {{ randomisator()->getNumber() }}</h1>