/** * Makes a widget object from a form field object. */ protected function makeFormWidget($field) { if ($field->type != 'widget') { return null; } if (isset($this->formWidgets[$field->fieldName])) { return $this->formWidgets[$field->fieldName]; } $widgetConfig = $this->makeConfig($field->config); $widgetConfig->alias = $this->alias . studly_case(Str::evalHtmlId($field->fieldName)); $widgetConfig->sessionKey = $this->getSessionKey(); $widgetName = $widgetConfig->widget; $widgetClass = $this->widgetManager->resolveFormWidget($widgetName); if (!class_exists($widgetClass)) { throw new ApplicationException(Lang::get('backend::lang.widget.not_registered', ['name' => $widgetClass])); } $widget = new $widgetClass($this->controller, $this->model, $field, $widgetConfig); return $this->formWidgets[$field->fieldName] = $widget; }
/** * Makes a widget object from a form field object. * * @param $field * @return \Backend\Traits\FormWidgetBase|null */ protected function makeFormFieldWidget($field) { if ($field->type !== 'widget') { return null; } if (isset($this->formWidgets[$field->fieldName])) { return $this->formWidgets[$field->fieldName]; } $widgetConfig = $this->makeConfig($field->config); $widgetConfig->alias = $this->alias . studly_case(HtmlHelper::nameToId($field->fieldName)); $widgetConfig->sessionKey = $this->getSessionKey(); $widgetConfig->previewMode = $this->previewMode; $widgetConfig->model = $this->model; $widgetConfig->data = $this->data; $widgetName = $widgetConfig->widget; $widgetClass = $this->widgetManager->resolveFormWidget($widgetName); if (!class_exists($widgetClass)) { throw new ApplicationException(Lang::get('backend::lang.widget.not_registered', ['name' => $widgetClass])); } $widget = $this->makeFormWidget($widgetClass, $field, $widgetConfig); /* * If options config is defined, request options from the model. */ if (isset($field->config['options'])) { $field->options(function () use($field) { $fieldOptions = $field->config['options']; if ($fieldOptions === true) { $fieldOptions = null; } $fieldOptions = $this->getOptionsFromModel($field, $fieldOptions); return $fieldOptions; }); } return $this->formWidgets[$field->fieldName] = $widget; }