ブログ
これまでに経験してきたプロジェクトで気になる技術の情報を紹介していきます。
Laravel インジェクション(DI)
Okuda
3 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)
Laravel インジェクション(DI)
2021-11-18 10:30:37
2021-11-19 09:10:58
コメントはありません。