#php #laravel #laravel-nova
#php #laravel #laravel-nova
Вопрос:
Я использую шаблон репозитория Laravel для управления своими ресурсами, и мне было интересно, как я могу использовать интерфейс внутри действия Nova? Поскольку невозможно создать экземпляр интерфейса, мне было интересно, как я могу использовать свои интерфейсы в своем действии?
В моем конструкторе контроллера я создаю свой репозиторий, а затем могу использовать его в своих функциях, но я не могу понять, как сделать то же самое внутри действия Laravel.
Есть идеи, как я мог бы это сделать?
Пример в моем контроллере
private $myRepository;
public function __construct(
MyRepositoryInterface $myRepository,
)
{
$this->myRepository = $myRepository;
}
А затем внутри функции я могу сделать что-то вроде
public function destroy($id)
{
$this->myRepository->delete($id);
return response()->json( array("message" => "success") );
}
Теперь в моем действии Nova я пытаюсь сделать вот что
public function handle(ActionFields $fields, Collection $models)
{
foreach ($models as $model)
{
$myRepository = new MyRepositoryInterface(); // This doesn't work obviously
$myRepository->customManipulation($model->id);
$this->markAsFinished($model);
}
}
Есть идеи, как я мог бы использовать свои репозитории?
Спасибо!
Комментарии:
1.
MyRepository
Реализует лиMyRepositoryInterface
интерфейс? Вы говорите, чтоnew MyRepository()
это не работает, но это всего лишь конструктор, поэтому он не должен завершаться сбоем, еслиMyRepository
это класс, а это не такthrow
.
Ответ №1:
Вы можете сделать $myRepository = App::make(MyRepositoryInterface::class);
, IoC разрешит это и создаст экземпляр экземпляра класса.
Я предполагаю, что вы уже привязали класс к интерфейсу:
App::bind('MyRepositoryInterface', 'MyRepository');