Livewire, Laravel — могу ли я вызвать метод сохранения контроллера из компонента Livewire?

#laravel #methods #laravel-livewire

#laravel #методы #laravel-livewire

Вопрос:

У меня есть контроллер Laravel с методом ‘store’. т.е. store (запрос $request).

Для представления я хочу внедрить компонент livewire, а затем использовать существующий метод ‘store’ контроллера (за кулисами) из метода компонента livewire. Возможно ли это? В настоящее время я сталкиваюсь с проблемой отсутствия объекта запроса, поскольку я больше не выполняю вызов из существующего маршрута / просмотра (т. Е. POST / orders).

 public function oms_order()
// this method provides the POST /orders leveraging 
// ControllersOrderController@store
{
    $this->refId = app('AppHttpControllersOrderController')->store($this->jsonOrder);
}
 

Аргумент 1, переданный в App Http Controllers OrderController::store() должен быть экземпляром IlluminateHttp Request, задан null, вызывается в D:xampphtdocsjadelivewire_hppappHttpLivewireOms.php в строке 26

Я могу удалить ‘Request $ request’ из метода store, но тогда это нарушает стандартный маршрут Laravel POST / orders.

Я надеялся использовать существующее приложение laravel в качестве серверной части / API и добавить бит livewire для демонстрации. Любые советы приветствуются.

Комментарии:

1. попробуйте store(IlluminateHttpRequest $this->jsonOrder);

2. попробуйте app(OrderController::class)->store(request(), $this->jsonOrder)

Ответ №1:

Я не думаю, что лучше всего вызывать функцию контроллера из другого класса. Если вам нужна возможность повторного использования, я предлагаю провести рефакторинг кода, создав отдельный класс с методом store, который принимает только требуемые атрибуты и сохраняет запись. Затем вы можете использовать этот метод в нескольких местах. Это также проще тестировать. Трудно дать точный ответ, прежде чем увидеть ваш метод store.