سلام و عرض ادب
متد کانستراکتور کلاس MagicAuthentication یه آرگومان داره که request$ هست:
namespace App\\Services\\Auth;
use App\\Models\\LoginToken;
use App\\Models\\User;
use Illuminate\\Http\\Request;
use Illuminate\\Support\\Facades\\Auth;
class MagicAuthentication
{
public const INVALID_TOKEN = 'token.invalid';
public const AUTHENTICATED = 'authenticated';
public function __construct(private Request $request)
{
}
public function requestLink()
{
$user = $this->getUser();
$user->createMagicLoginToken()->send([
'remember' => $this->request->has('remember')
]);
}
private function getUser()
{
return User::where('email',$this->request->email)->firstOrFail();
}
public function authenticate(LoginToken $token)
{
$token->delete();
if($token->isExpired()){
return self::INVALID_TOKEN;
}
Auth::login($token->user,$this->request->query('remember'));
return self::AUTHENTICATED;
}
}
توی متدهای این کلاس هم از اون request$ استفاده کردیم.
ولی توی کانتسراکتور کنترلر MagicController وقتی که از کلاس MagicAuthentication آبجکت ساختیم، هیچ پارامتری بهش پاس ندادیم:
namespace App\\Http\\Controllers;
use App\\Models\\LoginToken;
use App\\Services\\Auth\\MagicAuthentication;
use Illuminate\\Http\\Request;
class MagicController extends Controller
{
public function __construct(private MagicAuthentication $auth)
{
}
public function login(LoginToken $token)
{
return $this->auth->authenticate($token) === $this->auth::AUTHENTICATED
? redirect()->route('home') :
redirect()->route('auth.magic.login.form')->with('failed', 'auth.magic link failed to send');
}
}
با این وجود کلاس MagicAuthentication داره به درستی کار میکنه.
چرا و چطور بدون اینکه پارامتر request$ رو بهش پاس بدیم، داره از این پراپرتی استفاده میکنه؟