我有一个立面类
use App'Http'Response
class RUser
{
public function signup(TokenGenerator $token_generator, $data)
{
$response = [];
$access_token = $token_generator->generate(32);
dd($access_token);
$user = User::create($data);
$response['user_id'] = $user->_id;
$response[''];
}
}
现在,在我的UserController
中,我正在尝试使用下面中的RUser::signup()
函数
class UserController extends Controller
{
public function store(Request $request)
{
$this->request = $request;
$payload = json_decode($this->request->getContent());
if($this->validateJson('user.create', $payload)) {
$validator = Validator::make((array) $payload, User::$rules);
if ($validator->fails()) {
$messages = $validator->errors();
return $this->sendResponse(false, $messages);
}
FUser::signup($payload);
return $this->sendResponse(true, $response);
}
}
}
我认为Laravel会自动解决这些依赖关系,我不应该显式地传递TokenGenerator
的实例。但我得到了以下错误。
Argument 1 passed to App'Http'Responses'RUser::signup() must be an instance of App'Utils'TokenGenerator, instance of stdClass given, called in
因此,您的示例需要这样的更改才能正常工作:
class RUser
{
protected $token_generator;
public function __construct(TokenGenerator $token_generator)
{
$this->token_generator = $token_generator;
}
public function signup($data)
{
$response = [];
$access_token = $this->token_generator->generate(32);
dd($access_token);
$user = User::create($data);
$response['user_id'] = $user->_id;
$response[''];
}
}
和
class UserController extends Controller
{
public function store(Request $request, RUser $ruser)
{
$this->request = $request;
$payload = json_decode($this->request->getContent());
if($this->validateJson('user.create', $payload)) {
$validator = Validator::make((array) $payload, User::$rules);
if ($validator->fails()) {
$messages = $validator->errors();
return $this->sendResponse(false, $messages);
}
$ruser->signup($payload);
return $this->sendResponse(true, $response);
}
}
}
要在自己实例化类时触发外部依赖注入,需要调用Illuminate''Foundation''Application实例的make()
方法,如下所示:
$fooBar = $this->app->make('FooBar');
参见Laravel文档
我认为您对Facades和依赖注入的使用感到困惑。你应该在这里遵循的是依赖注入,据我所知,你可以在这里直接使用这个类,它将毫无问题地工作。要清楚地知道什么时候使用facade,什么时候使用依赖注入,请检查这个链接