如何在Laravel Facades中传递依赖关系?

时间:2018-07-24 11:12:20

标签: php laravel

我有一个名为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中传递构造函数依赖项?

如果有人以前有过这种情况的经验,请帮助我。

2 个答案:

答案 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()将对该类使用实时外观。