수색…
소개
Laravel은 서비스라는 다양한 클래스에 대한 액세스를 허용합니다. 일부 서비스는 즉시 사용할 수 있지만 직접 만들 수 있습니다.
서비스는 컨트롤러와 같이 응용 프로그램의 여러 파일에서 사용할 수 있습니다. Service OurService
가 임의의 숫자를 반환하는 getNumber()
메소드를 구현한다고 상상해 봅시다.
class SomeController extends Controller {
public function getRandomNumber()
{
return app(OurService::class)->getNumber();
}
}
서비스를 만들려면 새로운 클래스를 생성하기 만하면됩니다.
# app/Services/OurService/OurService.php
<?php
namespace App\Services\OurService;
class OurService
{
public function getNumber()
{
return rand();
}
}
이때 컨트롤러에서 이미이 서비스를 사용할 수 있지만 필요할 때마다 새 객체를 인스턴스화해야합니다.
class SomeController extends Controller {
public function getRandomNumber()
{
$service = new OurService();
return $service->getNumber();
}
public function getOtherRandomNumber()
{
$service = new OurService();
return $service->getNumber();
}
}
그래서 다음 단계는 서비스 컨테이너에 서비스를 등록하는 것입니다. 서비스를 서비스 컨테이너에 등록 할 때마다 필요할 때마다 새 객체를 만들 필요가 없습니다.
서비스 컨테이너에 서비스를 등록하려면 서비스 공급자 를 만들어야합니다. 이 서비스 공급자는 다음을 수행 할 수 있습니다.
- 등록 메소드 를 사용하여 서비스 컨테이너에 서비스 등록 )
- boot 메소드 를 사용하여 다른 서비스를 서비스에 추가 (종속성)
Service Provider 는 추상 클래스 Illuminate\Support\ServiceProvider
확장 한 클래스입니다. 서비스를 서비스 컨테이너 에 등록 하려면 register()
메소드를 구현해야합니다.
# 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();
});
}
}
모든 서비스 공급자 는 config/app.php
배열로 저장됩니다. 따라서 우리는 우리의 서비스 공급자를이 배열에 등록해야합니다 :
return [
...
'providers' => [
...
App\Services\OurService\OurServiceServiceProvider::class,
...
],
...
];
이제 컨트롤러에서 서비스에 액세스 할 수 있습니다. 3 가지 가능성 :
- 의존성 주입 :
<?php
namespace App\Http\Controllers;
use App\Services\OurService\OurService;
class SomeController extends Controller
{
public function __construct(OurService $our_service)
{
dd($our_service->getNumber());
}
}
-
app()
도우미를 통한 액세스 :
<?php
namespace App\Http\Controllers;
use App\Services\OurService\OurService;
class SomeController extends Controller
{
public function getRandomNumber()
{
return app('OurService')->getNumber();
}
}
Laravel은 모든 프로젝트에서 사용할 수 있고 서비스를 반영 할 수있는 Facades, 상상의 수업을 제공합니다. 서비스에보다 쉽게 액세스하려면 Facade :
<?php
namespace App\Http\Controllers;
use Randomisator;
class SomeController extends Controller
{
public function getRandomNumber()
{
return Randomisator::getNumber();
}
}
새 Facade를 만들려면 Illuminate\Support\Facades\Facade
확장하는 새 클래스를 만들어야합니다. 이 클래스는 getFacadeAccessor()
메서드를 구현하고 서비스 공급자가 등록한 서비스의 이름을 반환해야합니다.
# 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';
}
}
또한 Facade를 config/app.php
에 등록해야합니다.
return [
...
'aliases' => [
....
'Randomisator' => App\Services\OurService\OurServiceFacade::class,
],
];
이제 Facade는 프로젝트의 어느 곳에서나 접근 할 수 있습니다.
보기에서 서비스에 액세스하려면 도우미 기능을 만들 수 있습니다. Laravel에는 auth()
함수 또는 view()
함수와 같은 일부 도우미 기능이 기본적으로 제공됩니다. 도우미 함수를 만들려면 새 파일을 만듭니다.
# app/Services/OurService/helpers.php
if (! function_exists('randomisator')) {
/**
* Get the available OurService instance.
*
* @return \App\ElMatella\FacebookLaravelSdk
*/
function randomisator()
{
return app('OurService');
}
}
이 파일을 composer.json
파일에 등록해야합니다.
{
...
"autoload": {
"files": [
"app/Services/OurService/helpers.php"
],
...
}
}
이제보기에서이 도우미를 사용할 수 있습니다.
<h1>Here is a random number: {{ randomisator()->getNumber() }}</h1>