getFormStub()))->replace($this->formItems, $this->getFormContent())->toString(); } /** * get file * * @return string */ public function getFile(): string { // TODO: Implement getFile() method. return CatchAdmin::makeDir(CatchAdmin::getModuleViewsPath($this->module).Str::of($this->controller)->replace('Controller', '')->lcfirst()).DIRECTORY_SEPARATOR.'create.vue'; } /** * get form content * * @return string */ protected function getFormContent(): string { $form = Str::of(''); $formComponents = $this->formComponents(); foreach ($this->structures as $structure) { if ($structure['label'] && $structure['form_component'] && $structure['form']) { if (isset($formComponents[$structure['form_component']])) { $form = $form->append( Str::of($formComponents[$structure['form_component']]) ->replace( [$this->label, $this->prop, $this->modelValue], [$structure['label'], $structure['field'], sprintf('formData.%s', $structure['field'])] ) ); } } } return $form->trim(PHP_EOL)->toString(); } /** * form components * * @return array */ protected function formComponents(): array { $components = []; foreach (File::glob( $this->getFormItemStub() ) as $stub) { $components[File::name($stub)] = File::get($stub); } return $components; } /** * get formItem stub * * @return string */ protected function getFormItemStub(): string { return dirname(__DIR__).DIRECTORY_SEPARATOR.'stubs' .DIRECTORY_SEPARATOR.'vue'.DIRECTORY_SEPARATOR .'formItems'.DIRECTORY_SEPARATOR.'*.stub'; } /** * get form stub * * @return string */ public function getFormStub(): string { return dirname(__DIR__).DIRECTORY_SEPARATOR.'stubs' .DIRECTORY_SEPARATOR.'vue'.DIRECTORY_SEPARATOR.'form.stub'; } /** * set structures * * @param array $structures * @return $this */ public function setStructures(array $structures): static { $this->structures = $structures; return $this; } }