modules init/deactivate, modules migrations

This commit is contained in:
2024-09-23 12:50:50 +03:00
parent f20ba63277
commit 9e2f7cd9e3
20 changed files with 304 additions and 32 deletions

View File

@ -21,7 +21,7 @@ class Menu extends Model
const ACTIVE_STATUS = 1;
protected $table = 'menu';
protected $fillable = ['parent_id', 'icon_file', 'icon_font', 'label', 'url', 'status'];
protected $fillable = ['parent_id', 'icon_file', 'icon_font', 'label', 'url', 'status', 'slug'];
protected array $dates = ['deleted_at'];
public static function labels(): array
@ -33,6 +33,7 @@ class Menu extends Model
'icon_font' => 'Иконка',
'url' => 'URL',
'status' => 'Статус',
'slug' => 'Slug',
];
}

View File

@ -5,12 +5,14 @@ namespace kernel\modules\menu\models\forms;
use kernel\FormModel;
/**
* @property $parent_id
* @property $icon_file
* @property $icon_font
* @property $label
* @property $url
* @property $status
* @property int $parent_id
* @property string $icon_file
* @property string $icon_font
* @property string $label
* @property string $url
* @property int $status
* @property string $slug
* @property string $parent_slug
*/
class CreateMenuForm extends FormModel
{
@ -22,7 +24,9 @@ class CreateMenuForm extends FormModel
'icon_font' => '',
'label' => 'required|min-str-len:1|max-str-len:50',
'url' => 'required|min-str-len:1',
'status' => ''
'status' => '',
'slug' => 'required|min-str-len:1|max-str-len:50',
'parent_slug' => ''
];
}
}

View File

@ -2,8 +2,11 @@
namespace kernel\modules\menu\service;
use Exception;
use kernel\FormModel;
use kernel\helpers\Debug;
use kernel\models\Menu;
use kernel\modules\menu\models\forms\CreateMenuForm;
use kernel\Request;
class MenuService
@ -11,12 +14,13 @@ class MenuService
public function create(FormModel $form_model): false|Menu
{
$model = new Menu();
$model->parent_id = $form_model->getItem('parent_id');
$model->parent_id = $form_model->getItem('parent_id') ?? 0;
$model->icon_file = $form_model->getItem('icon_file');
$model->icon_font = $form_model->getItem('icon_font');
$model->label = $form_model->getItem('label');
$model->url = $form_model->getItem('url');
$model->status = $form_model->getItem('status');
$model->status = $form_model->getItem('status') ?? 1;
$model->slug = $form_model->getItem('slug');
if ($model->save()){
return $model;
}
@ -24,6 +28,39 @@ class MenuService
return false;
}
/**
* @throws Exception
*/
public function createItem(array $item): false|Menu
{
$model = new CreateMenuForm();
$model->load($item);
if (!$model->validate()){
throw new Exception('Ошибка создания пункта меню');
}
if ($model->getItem("parent_slug")){
$parent = $this->getBySlug($model->getItem("parent_slug"));
if ($parent){
$model->setItem("parent_id", $parent->id);
}
else {
$model->setItem("parent_id", 0);
}
}
return $this->create($model);
}
public function removeItemBySlug(string $slug)
{
return Menu::where("slug", $slug)->delete();
}
public function getBySlug(string $slug)
{
return Menu::where("slug", $slug)->first();
}
public function update(FormModel $form_model, Menu $menuItem): false|Menu
{
$menuItem->parent_id = $form_model->getItem('parent_id');
@ -32,6 +69,7 @@ class MenuService
$menuItem->label = $form_model->getItem('label');
$menuItem->url = $form_model->getItem('url');
$menuItem->status = $form_model->getItem('status');
$menuItem->slug = $form_model->getItem('slug');
if ($menuItem->save()){
return $menuItem;
}

View File

@ -48,6 +48,13 @@ $form->field(class: \itguild\forms\inputs\TextInput::class, name: "url", params:
->setLabel("URL")
->render();
$form->field(class: \itguild\forms\inputs\TextInput::class, name: "slug", params: [
'class' => "form-control",
'value' => $model->slug ?? ''
])
->setLabel("Slug")
->render();
$form->field(class: \itguild\forms\inputs\Select::class, name: "status", params: [
'class' => "form-control",
'value' => $model->status ?? '1'