У меня есть фасад Laravel с именем Helper, у которого есть инъекция зависимостей конструктора во внешний репозиторий. Но я не могу передать его зависимость через поставщика услуг фасадов.
Вот код для 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)
Type error: Argument 1 passed to App\Providers\FacadesServiceProviders::App\Providers{closure}() must be an instance of App\Providers\PropertyUploadRepositoryInterface, instance of Illuminate\Foundation\Application given,
Если я удалил зависимость конструктора, фасады My Helper будут работать нормально. Так что ошибки в настройке фасада нет.
Мой вопрос: как передать зависимость конструктора вышеупомянутого поставщика услуг Laravel?
Если кто-то уже сталкивался с этой ситуацией, пожалуйста, помогите мне.






Просто свяжите сам класс и позвольте Laravel обработать экземпляр, он будет использовать отражение для определения зависимостей.
$this->app->bind('helper', \App\Helpers\Helper::class);
Это, конечно, при условии, что вы связали конкретный класс с интерфейсом PropertyUploadRepositoryInterface, чтобы Laravel мог внедрить правильную зависимость.
Кроме того:
Вам не нужна привязка, если вы не хотите ее иметь. Ваш фасад может просто получить доступ к привязке с именем App\Helpers\Helper, и он без проблем разрешит ее (при условии, что App\Helpers\Helper может быть разрешен из контейнера).
protected static function getFacadeAccessor()
{
return \App\Helpers\Helper::class;
}
Кроме того, вам даже не нужно делать фасад, чтобы использовать фасад.
\Facades\App\Helpers\Helper::randomMethods() будет использовать фасад реального времени для этого класса.