在默认的用户注册方法中(RegisterController@create)使用依赖注入报错
- laravel 6.4
- php 7.3
我想在用户注册的时候生成默认的头像,所以用了 Identicon 这个生成头像开源项目。并且参考 laravel-identicon 添加了 ServiceProvider 以及 Facade。
我在其他控制器中可以这样正常注入,但是不知道为什么在这个 create 方法里会报一个这样的错:
Symfony\Component\Debug\Exception\FatalThrowableError
Argument 1 passed to App\Http\Controllers\Auth\RegisterController::create() must be an instance of Identicon\Identicon, array given
User::create() 方法怎么就变成需要 Identicon 实例了呢?
以下是 create 方法主要源码:
# app/Http/Controllers/Auth/RegisterController.php
protected function create(Identicon $identicon, array $data) {
.
.
$user = User::create([
'name' => $data['name'],
'email' => $data['email'],
'password' => Hash::make($data['password']),
]);
$base64_img = $identicon->getImageData($data['email'], 100, null,'#f0f0f0', 10);
.
.
}
ServiceProvider 以及 Facade 完整源码:
# app/Providers/IdenticonServiceProvider.php
class IdenticonServiceProvider extends ServiceProvider {
protected $defer = false;
public function register() {
$method = version_compare(Application::VERSION, '5.2', '>=') ? 'singleton' : 'bindShared';
$this->app->$method(Identicon::class, function ($app) {
return new Identicon;
});
}
public function provides() {
return ['identicon'];
}
}
# app/Facades/Identicon.php
class Identicon extends Facade {
protected static function getFacadeAccessor() {
return 'identicon';
}
}
这样是可以运行通过的:
public function test(Identicon $identicon)
{
$url = $identicon->getImageDataUri('blahblah', 150, null, '#f0f0f0', 10);
return "<img src='$url' style='border-radius: 50%'>";
}
如果有谁有思路的话可以提示一下吗,User::create() 方法为啥会报错呀?
推荐文章: