我有一个名为Helper的Laravel Facade,它具有对外部存储库的构造函数依赖项注入。但是我无法通过Facades服务提供商传递它的依赖关系。
这是Helper.php的代码
"dependencies": {
"angular2-text-mask": "^8.0.3",
"my-published-module": "http://my-custom-npm-registry.com/my-published-module"
},
这是我在FacadesServiceProviders.php文件中所做的
<?php
namespace App\Helpers;
use App\Repositories\PropertyUpload\PropertyUploadRepositoryInterface;
class Helper
{
/**
* @var PropertyUploadRepositoryInterface
*/
protected $propertyUploadRepo;
/**
* Create a new controller instance.
*
* @return void
*/
public function __construct(
PropertyUploadRepositoryInterface $propertyUploadRepository
)
{
$this->propertyUploadRepo = $propertyUploadRepository;
}
/**
* Get property Cover Photo
*
* @param int $property_id
* @return string $img_url
*/
public function getPropertyCoverPhoto($property_id)
{
$property_uploads = $this->propertyUploadRepo->findBy(['property_id' => $property_id, 'status' => 1]);
return $property_uploads;
}
}
但是现在我收到了这个错误
Symfony \组件\调试\异常\ FatalThrowableError (E_RECOVERABLE_ERROR)
类型错误:参数1传递给 App \ Providers \ FacadesServiceProviders :: App \ Providers {closure}()必须 是App \ Providers \ PropertyUploadRepositoryInterface的实例, 给定的Illuminate \ Foundation \ Application实例,
如果我删除了构造函数依赖项,则My Helper外观可以正常工作。因此,在配置外观方面没有错误。
我的问题是如何在上面的Laravel Service Provider中传递构造函数依赖项?
如果有人以前有过这种情况的经验,请帮助我。
答案 0 :(得分:3)
只需绑定类本身并让Laravel处理实例化,它将使用反射来确定依赖项。
$this->app->bind('helper', \App\Helpers\Helper::class);
当然,这假设您已将具体类绑定到接口PropertyUploadRepositoryInterface,以便Laravel可以注入正确的依赖项。
答案 1 :(得分:2)
另外:
除非需要绑定,否则不需要绑定。您的外观可以访问名为App\Helpers\Helper
的绑定,并且可以毫无问题地解决它(只要可以从容器中解析App\Helpers\Helper
)。
protected static function getFacadeAccessor()
{
return \App\Helpers\Helper::class;
}
然后,最重要的是,您甚至不需要制作Facade就可以使用Facade。
\Facades\App\Helpers\Helper::randomMethods()
将对该类使用实时外观。