first commit
This commit is contained in:
188
modules/Develop/Support/Generate/Create/FrontForm.php
Normal file
188
modules/Develop/Support/Generate/Create/FrontForm.php
Normal file
@@ -0,0 +1,188 @@
|
||||
<?php
|
||||
|
||||
// +----------------------------------------------------------------------
|
||||
// | CatchAdmin [Just Like ~ ]
|
||||
// +----------------------------------------------------------------------
|
||||
// | Copyright (c) 2017~2021 https://catchadmin.com All rights reserved.
|
||||
// +----------------------------------------------------------------------
|
||||
// | Licensed ( https://github.com/JaguarJack/catchadmin-laravel/blob/master/LICENSE.md )
|
||||
// +----------------------------------------------------------------------
|
||||
// | Author: JaguarJack [ njphper@gmail.com ]
|
||||
// +----------------------------------------------------------------------
|
||||
declare(strict_types=1);
|
||||
|
||||
namespace Modules\Develop\Support\Generate\Create;
|
||||
|
||||
use Catch\CatchAdmin;
|
||||
use Illuminate\Support\Facades\File;
|
||||
use Illuminate\Support\Str;
|
||||
|
||||
class FrontForm extends Creator
|
||||
{
|
||||
/**
|
||||
* @var string
|
||||
*/
|
||||
protected string $label = '{label}';
|
||||
|
||||
/**
|
||||
* @var string
|
||||
*/
|
||||
protected string $prop = '{prop}';
|
||||
|
||||
/**
|
||||
* @var string
|
||||
*/
|
||||
protected string $modelValue = '{model-value}';
|
||||
|
||||
/**
|
||||
* @var string
|
||||
*/
|
||||
protected string $table = '{table}';
|
||||
|
||||
/**
|
||||
* @var string
|
||||
*/
|
||||
protected string $search = '{search}';
|
||||
|
||||
/**
|
||||
* @var string
|
||||
*/
|
||||
protected string $api = '{api}';
|
||||
|
||||
/**
|
||||
* @var string
|
||||
*/
|
||||
protected string $formItems = '{formItems}';
|
||||
|
||||
/**
|
||||
* @var string
|
||||
*/
|
||||
protected string $paginate = '{paginate}';
|
||||
|
||||
/**
|
||||
* @var string
|
||||
*/
|
||||
protected string $useList = '{useList}';
|
||||
|
||||
|
||||
/**
|
||||
* @var array
|
||||
*/
|
||||
protected array $structures;
|
||||
|
||||
/**
|
||||
* @param string $controller
|
||||
*/
|
||||
public function __construct(protected readonly string $controller)
|
||||
{
|
||||
}
|
||||
|
||||
/**
|
||||
* get content
|
||||
*
|
||||
* @return string
|
||||
*/
|
||||
public function getContent(): string
|
||||
{
|
||||
// TODO: Implement getContent() method.
|
||||
return Str::of(File::get($this->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;
|
||||
}
|
||||
}
|
Reference in New Issue
Block a user