お問い合わせ

ブログ

これまでに経験してきたプロジェクトで気になる技術の情報を紹介していきます。

Laravel インジェクション(DI)

okuda Okuda 2 years

インジェクション(DI)関係

コンストラクタインジェクション

コントローラー内のすべてのメソッドからnewすることなくクラスのメソッドを呼び出すことができる

use Illuminate\Http\Request;
use Illuminate\Support\Facades\Hash;

// DIするクラス
use App\Models\User;

class CheckController extends Controller
{
    // プロパティを宣言
    private $user;

    // DIするクラスを追加
    public function __construct(User $user)
    {
        $this->user = $user;
    }

    public function index(Request $request)
    {
        // このように使用する
        $user = $this->user->find(1);
        dump($user);

        $user = $this->user;
        $user->name = $request->name;
        $user->email = $request->email;
        $user->password = Hash::make($request->password);
        $user->save();
        dump($user->id);
    }
}

メソッドインジェクション

これはいつもRequestでやっているやつ

namespace App\Http\Controllers;

// DIするクラス
use Illuminate\Http\Request;
use App\Models\User;

class CheckController extends Controller
{
    // DIするクラスを追加
    public function index(Request $request, User $user)
    {
        dump($request);
        $user = $user->find(1);
        dump($user->name);
    }
}

モデルバインディング

これもメソッドインジェクションのひとつになるのか?

// {user}はコントローラの変数と同じにする
Route::get('/user/{user}', [CheckController::class, 'show'])->name('user.show');
use Illuminate\Http\Request;
use App\Models\User;

class CheckController extends Controller
{
    // $userはルート「'/user/{user}'」の「 {user} 」と揃える
    public function index(Request $request, User $user)
    {
        // このようにしなくても
        // $user = $user->find($id);
        // $userにはインスタンスが返される
        dump($user->name);
    }
}
Laravel インジェクション(DI) 2021-11-19 09:10:58

コメントはありません。

4524

お気軽に
お問い合わせください。

お問い合わせ
gomibako@aska-ltd.jp