/** * Set the form model object from the builder's model. */ public function handle() { $entry = $this->builder->getEntry(); $repository = $this->builder->getRepository(); /* * If the entry is null or an ID and the * model is an instance of FormModelInterface * then use the model to fetch the entry * or create a new one. */ if (is_numeric($entry) || $entry === null) { if ($repository instanceof FormRepositoryInterface) { $this->builder->setFormEntry($repository->findOrNew($entry)); return; } } /* * If the entry is a plain 'ole * object then just use it as is. */ if (is_object($entry)) { $this->builder->setFormEntry($entry); return; } /* * Whatever it is - just use it. */ $this->builder->setFormEntry($entry); }
/** * Handle the command. * * @param Container $container */ public function handle(Container $container) { /* * Set the default options handler based * on the builder class. Defaulting to * no handler. */ if (!$this->builder->getRepository()) { $model = $this->builder->getFormModel(); $entry = $this->builder->getEntry(); $form = $this->builder->getForm(); $repository = str_replace('FormBuilder', 'FormRepository', get_class($this->builder)); if (!$this->builder->getRepository() && class_exists($repository)) { $this->builder->setRepository($container->make($repository, compact('form', 'model'))); } elseif (!$this->builder->getRepository() && $model instanceof EntryModel) { $this->builder->setRepository($container->make(EntryFormRepository::class, compact('form', 'model'))); } elseif (!$this->builder->getRepository() && $model instanceof EloquentModel) { $this->builder->setRepository($container->make(EloquentFormRepository::class, compact('form', 'model'))); } elseif (!$this->builder->getRepository() && $entry instanceof EntryModel) { $this->builder->setRepository($container->make(EntryFormRepository::class, ['form' => $form, 'model' => $entry])); } elseif (!$this->builder->getRepository() && $entry instanceof EloquentModel) { $this->builder->setRepository($container->make(EloquentFormRepository::class, ['form' => $form, 'model' => $entry])); } } }
/** * Set the form model object from the builder's model. * * @param SetDefaultParameters $command */ public function handle() { /* * Set the form mode according * to the builder's entry. */ if (!$this->builder->getFormMode()) { $this->builder->setFormMode($this->builder->getFormEntryId() || $this->builder->getEntry() ? 'edit' : 'create'); } /* * Next we'll loop each property and look for a handler. */ $reflection = new \ReflectionClass($this->builder); /* @var \ReflectionProperty $property */ foreach ($reflection->getProperties(\ReflectionProperty::IS_PROTECTED) as $property) { if (in_array($property->getName(), $this->skips)) { continue; } /* * If there is no getter then skip it. */ if (!method_exists($this->builder, $method = 'get' . ucfirst($property->getName()))) { continue; } /* * If the parameter already * has a value then skip it. */ if ($this->builder->{$method}()) { continue; } /* * Check if we can transform the * builder property into a handler. * If it exists, then go ahead and use it. */ $handler = str_replace('FormBuilder', 'Form' . ucfirst($property->getName()), get_class($this->builder)); if (class_exists($handler)) { /* * Make sure the handler is * formatted properly. */ if (!str_contains($handler, '@')) { $handler .= '@handle'; } $this->builder->{'set' . ucfirst($property->getName())}($handler); continue; } /* * If the handler does not exist and * we have a default handler, use it. */ if ($default = array_get($this->defaults, $property->getName())) { $this->builder->{'set' . ucfirst($property->getName())}($default); } } }
/** * Handle the form. */ public function handle() { $form = $this->builder->getForm(); $model = $this->builder->getModel(); $entry = $this->builder->getEntry(); /* * If the model is already instantiated * then use it as is. */ if (is_object($model)) { $form->setModel($model); return; } /* * If no model is set, fist try * guessing the model based on the entry. */ if ($model === null && $entry instanceof EntryInterface) { $stream = $entry->getStream(); $this->builder->setModel($stream->getEntryModel()); return; } /* * If no model is set, try guessing the * model based on best practices. */ if ($model === null) { $parts = explode('\\', str_replace('FormBuilder', 'Model', get_class($this->builder))); unset($parts[count($parts) - 2]); $model = implode('\\', $parts); $this->builder->setModel($model); } /* * If the model does not exist or * is disabled then skip it. */ if (!$model || !class_exists($model)) { $this->builder->setModel(null); return; } /* * Set the model on the form! */ $form->setModel(app($model)); }