php - 如何在 Laravel Facades 中传递依赖项?
问题描述
我有一个名为 Helper 的 Laravel Facade,它具有对外部存储库的构造函数依赖注入。但我无法通过门面服务提供商传递它的依赖关系。
这是 Helper.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;
}
}
这是我在 FacadesServiceProviders.php 文件中所做的
<?php
namespace App\Providers;
use Illuminate\Support\ServiceProvider;
use App\Repositories\PropertyUpload\PropertyUploadRepository;
class FacadesServiceProviders extends ServiceProvider
{
/**
* Bootstrap the application services.
*
* @return void
*/
public function boot()
{
//
}
/**
* Register the application services.
*
* @return void
*/
public function register()
{
$this->app->bind('helper', function(PropertyUploadRepositoryInterface $propertyUploadRepository){
return new \App\Helpers\Helper($propertyUploadRepository);
});
}
}
但是现在我收到了这个错误
Symfony\Component\Debug\Exception\FatalThrowableError (E_RECOVERABLE_ERROR)
类型错误:传递给 App\Providers\FacadesServiceProviders::App\Providers{closure}() 的参数 1 必须是 App\Providers\PropertyUploadRepositoryInterface 的实例,给定的 Illuminate\Foundation\Application 实例,
如果我删除了构造函数依赖项,我的助手门面工作正常。所以配置门面没有错误。
我的问题是如何在上面的 Laravel 服务提供者中传递构造函数依赖项?
如果有人以前有过这种情况的经验,请帮助我。
解决方案
只需绑定类本身并让 Laravel 处理实例化,它将使用反射来确定依赖关系。
$this->app->bind('helper', \App\Helpers\Helper::class);
当然,这假设您已经将一个具体的类绑定到接口 PropertyUploadRepositoryInterface 以便 Laravel 可以注入正确的依赖项。
推荐阅读
- list - 在 Raku 的列表中查找第一次出现的 1 位数字
- docker - 在 Window 上安装 ingress-nginx 的问题(不是 minikube)
- node.js - 在发送到 api 响应之前修改 mongodb 记录
- javascript - 使用 typescript 访问 react 中的 json 对象
- lua - 使用 string.gsub 打印“\48\49”时如何将“\48\49”转换为“01”?
- heroku - 如何在 Heroku 中安装 maxima
- r - 如何计算随机样本的cv函数
- python - Tensorflow:从类标签创建 y 索引
- c++ - 如何在复杂度 O(n) 中解决单调数组问题?
- node.js - 如何在测试套件中只模拟一次函数?