handler, 'getPresenter']); return call_user_func([$presenter, 'renderAddForm'], $widgetType); } /** * Create new instance of given widget type * * @param NewWidgetRequest $request * @param $type * * @return \Illuminate\Http\RedirectResponse */ public function postNew(NewWidgetRequest $request, $type) { $widgetType = WidgetType::findOrFail($type); // create new widget $widget = new Widget(); $widget->widget_type_handler = $widgetType->handler; $widget->user_id = Auth::user()->id; $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([$widgetType->handler, 'save'], $widget, $request); } catch (MissingParameterException $e) { // user omitted some value return $this->invalidWidget($type, $e->getMessage()); } catch (\Exception $e) { // something went wrong return $this->invalidWidget($type, trans('admin/widgets.cannotSave', ['exception' => $e->getMessage()])); } // save into database $widget->save(); // redirect with success notification return redirect() ->route('widgets.new', ['type' => $type]) ->with('success', trans('admin/widgets.successfullyCreated')); } private function invalidWidget($widgetType, $error) { return redirect() ->route('widgets.new', ['type' => $widgetType]) ->withInput() ->with('error', $error); } }