Szukaj…
Wprowadzenie
Laravel umożliwia dostęp do różnych klas zwanych usługami. Niektóre usługi są dostępne od razu po wyjęciu z pudełka, ale możesz je utworzyć samodzielnie.
 Z usługi można korzystać w wielu plikach aplikacji, takich jak kontrolery. Wyobraźmy sobie usługę Service OurService implementującą getNumber() zwracającą liczbę losową: 
class SomeController extends Controller {
    
    public function getRandomNumber()
    {
        return app(OurService::class)->getNumber();
    }
}
Aby utworzyć usługę, wystarczy utworzyć nową klasę:
# app/Services/OurService/OurService.php
<?php
namespace App\Services\OurService;
class OurService 
{
    public function getNumber()
    {
        return rand();
    }
}
W tej chwili możesz już korzystać z tej usługi w kontrolerze, ale za każdym razem będziesz potrzebować utworzyć nowy obiekt:
class SomeController extends Controller {
    
    public function getRandomNumber()
    {
        $service = new OurService();
        return $service->getNumber();
    }
    public function getOtherRandomNumber()
    {
        $service = new OurService();
        return $service->getNumber();
    }
}
Dlatego następnym krokiem jest zarejestrowanie usługi w kontenerze usług . Po zarejestrowaniu usługi w kontenerze usług nie trzeba tworzyć nowego obiektu za każdym razem, gdy jest to potrzebne.
Aby zarejestrować usługę w kontenerze usług, musisz utworzyć usługodawcę . Ten usługodawca może:
- Zarejestruj swoją usługę w kontenerze usług przy użyciu metody rejestracji )
- Wstrzykiwanie innych usług do usługi (zależności) za pomocą metody rozruchu
 Usługodawca to klasa rozszerzająca klasę abstrakcyjną Illuminate\Support\ServiceProvider . Musi zaimplementować metodę register() , aby zarejestrować usługę w kontenerze usług : 
# 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();
        });
    }
}
 Wszyscy dostawcy usług są zapisani w tablicy w config/app.php . Musimy więc zarejestrować naszego usługodawcę w tej tablicy: 
return [
    ...
    'providers' => [
        ...
        App\Services\OurService\OurServiceServiceProvider::class,
        ...
    ],
    ...
];
Możemy teraz uzyskać dostęp do naszej usługi w kontrolerze. Trzy możliwości:
- Wstrzykiwanie zależności:
<?php
namespace App\Http\Controllers;
use App\Services\OurService\OurService;
class SomeController extends Controller
{
    public function __construct(OurService $our_service)
    {
        dd($our_service->getNumber());
    }
}
-  Dostęp poprzez pomocnika app():
<?php
namespace App\Http\Controllers;
use App\Services\OurService\OurService;
class SomeController extends Controller
{
    public function getRandomNumber()
    {
        return app('OurService')->getNumber();
    }
}
Laravel zapewnia Fasady, wyimaginowane klasy, które można wykorzystać we wszystkich swoich projektach i odzwierciedlają Usługę. Aby łatwiej uzyskać dostęp do usługi, możesz utworzyć fasadę:
<?php
namespace App\Http\Controllers;
use Randomisator;
class SomeController extends Controller
{
    public function getRandomNumber()
    {
        return Randomisator::getNumber();
    }
}
 Aby utworzyć nową fasadę, musisz utworzyć nową klasę rozszerzającą Illuminate\Support\Facades\Facade . Ta klasa musi implementować getFacadeAccessor() i zwracać nazwę usługi zarejestrowanej przez dostawcę usług : 
# 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';
    }
}
 Musisz także zarejestrować swoją fasadę w config/app.php : 
return [
    ...
    'aliases' => [
        ....
        'Randomisator' => App\Services\OurService\OurServiceFacade::class,
    ],
];
Fasada jest teraz dostępna w dowolnym miejscu w projekcie.
 Jeśli chcesz uzyskać dostęp do usługi z poziomu widoków, możesz utworzyć funkcję pomocnika. Laravel jest dostarczany z niektórymi funkcjami pomocniczymi po wyjęciu z pudełka, takimi jak funkcja auth() lub funkcja view() . Aby utworzyć funkcję pomocnika, utwórz nowy plik: 
# app/Services/OurService/helpers.php    
if (! function_exists('randomisator')) {
    /**
     * Get the available OurService instance.
     *
     * @return \App\ElMatella\FacebookLaravelSdk
     */
    function randomisator()
    {
        return app('OurService');
    }
}
 Musisz także zarejestrować ten plik, ale w pliku composer.json : 
{
    ...
    "autoload": {
        "files": [
            "app/Services/OurService/helpers.php"
        ],
        ...
    }
}
Możesz teraz używać tego pomocnika w widoku:
<h1>Here is a random number: {{ randomisator()->getNumber() }}</h1>