- サービスの作成: まず、Laravelのサービスコンテナに登録するカスタムサービスを作成します。サービスはアプリケーションの機能をカプセル化し、コンポーネントとして再利用できるようにします。例として、以下のようなサービスクラスを作成します。
<?php
namespace App\Services;
class MyService
{
public function doSomething()
{
// サービスの機能を実装するコード
}
}
- サービスの登録:
作成したサービスをLaravelのサービスコンテナに登録します。これにより、アプリケーション内の他の場所でサービスを使用することができます。登録は
AppServiceProvider
クラスのregister
メソッド内で行います。
<?php
namespace App\Providers;
use Illuminate\Support\ServiceProvider;
use App\Services\MyService;
class AppServiceProvider extends ServiceProvider
{
public function register()
{
$this->app->singleton(MyService::class, function ($app) {
return new MyService();
});
}
}
- サービスのインジェクト: サービスをインジェクトする方法はいくつかあります。以下にいくつかの例を示します。
3.1 コントローラのコンストラクタインジェクション: コントローラでサービスを使用する場合、コンストラクタインジェクションを使用してサービスをインジェクトできます。
<?php
namespace App\Http\Controllers;
use App\Services\MyService;
class MyController extends Controller
{
protected $myService;
public function __construct(MyService $myService)
{
$this->myService = $myService;
}
public function index()
{
// サービスを使用するコード
$this->myService->doSomething();
}
}
3.2 メソッドインジェクション: コントローラのメソッド内でサービスを使用する場合、メソッドインジェクションを使用してサービスをインジェクトできます。
<?php
namespace App\Http\Controllers;
use App\Services\MyService;
class MyController extends Controller
{
public function index(MyService $myService)
{
// サービスを使用するコード
$myService->doSomething();
}
}
3.3 ルートモデルバインディング: 特定のルートに対してサービスをインジェクトする場合は、ルートモデルバインディングを使用できます。
<?php
use App\Services\MyService;
use App\Http\Controllers\MyController;
Route::get('/my-route/{myService}', [MyController::class, 'index']);
Route::bind('myService', function ($value) {
return app()->make(MyService::class);
});
これらはサービスをインジェクトするいくつかの一般的な方法です。他にも様々な方法がありますが、上記の方法はよく使用されます。
このようにして、Laravelでサービスを作成し、アプリケーションにインジェクトすることができます。これによって、コードの再利用性や保守性が向上し、よりモジュール化されたアプリケーションを構築することができます。