widget_type_handler, 'getPresenter']); return call_user_func([$presenter, 'renderEditForm'], $widget); } public function postEdit(EditWidgetRequest $request, $widget) { // create new widget $widget = Widget::findOrFail($widget); // update name $widget->name = $request->name; // save description if available if (isset($request->description)) { $widget->description = $request->description; } // try to save this widget try { $widget = call_user_func([$widget->widget_type_handler, 'save'], $widget, $request); } catch (MissingParameterException $e) { // user omitted some value return $this->invalidWidget($e->getMessage()); } catch (\Exception $e) { // something went wrong return $this->invalidWidget(trans('admin/widgets.cannotSave', ['exception' => $e->getMessage()])); } // save into database $widget->save(); // fire event with editing widget Event::fire(new \App\Events\EditWidget($widget)); // redirect with success notification return redirect() ->route('widgets.overview') ->with('success', trans('admin/widgets.successfullyEdited')); } private function invalidWidget($error) { return redirect() ->route('widgets.overview') ->withInput() ->with('error', $error); } }