modules init/deactivate, modules migrations
This commit is contained in:
@ -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',
|
||||
];
|
||||
}
|
||||
|
||||
|
@ -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' => ''
|
||||
];
|
||||
}
|
||||
}
|
@ -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;
|
||||
}
|
||||
|
@ -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'
|
||||
|
@ -2,13 +2,29 @@
|
||||
|
||||
namespace kernel\modules\post;
|
||||
|
||||
use kernel\helpers\Debug;
|
||||
use kernel\Module;
|
||||
use kernel\modules\menu\service\MenuService;
|
||||
|
||||
class PostModule extends Module
|
||||
{
|
||||
|
||||
public function init()
|
||||
public MenuService $menuService;
|
||||
public function __construct()
|
||||
{
|
||||
// TODO: Implement init() method.
|
||||
$this->menuService = new MenuService();
|
||||
}
|
||||
|
||||
public function init(): void
|
||||
{
|
||||
$this->menuService->createItem([
|
||||
"label" => "Посты",
|
||||
"url" => "/admin/post",
|
||||
"slug" => "post",
|
||||
]);
|
||||
}
|
||||
|
||||
public function deactivate(): void
|
||||
{
|
||||
$this->menuService->removeItemBySlug("post");
|
||||
}
|
||||
}
|
@ -4,5 +4,8 @@
|
||||
"author": "ITGuild",
|
||||
"slug": "post",
|
||||
"description": "Post module",
|
||||
"module_class": "PostModule"
|
||||
"module_class": "kernel\\modules\\post\\PostModule",
|
||||
"module_class_file": "{KERNEL_MODULES}/post/PostModule.php",
|
||||
"routs": "routs/post.php",
|
||||
"migration_path": "migrations"
|
||||
}
|
@ -0,0 +1,29 @@
|
||||
<?php
|
||||
|
||||
use Illuminate\Database\Migrations\Migration;
|
||||
use Illuminate\Database\Schema\Blueprint;
|
||||
use Illuminate\Support\Facades\Schema;
|
||||
|
||||
return new class extends Migration
|
||||
{
|
||||
/**
|
||||
* Run the migrations.
|
||||
*/
|
||||
public function up(): void
|
||||
{
|
||||
\kernel\App::$db->schema->create('post', function (Blueprint $table) {
|
||||
$table->increments('id');
|
||||
$table->text('content')->nullable(false);
|
||||
$table->integer('user_id');
|
||||
$table->timestamps();
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
* Reverse the migrations.
|
||||
*/
|
||||
public function down(): void
|
||||
{
|
||||
\kernel\App::$db->schema->dropIfExists('post');
|
||||
}
|
||||
};
|
20
kernel/modules/post/routs/post.php
Normal file
20
kernel/modules/post/routs/post.php
Normal file
@ -0,0 +1,20 @@
|
||||
<?php
|
||||
|
||||
use app\controllers\MainController;
|
||||
use kernel\App;
|
||||
use kernel\modules\admin_themes\controllers\AdminThemeController;
|
||||
use Phroute\Phroute\RouteCollector;
|
||||
|
||||
|
||||
App::$collector->group(["prefix" => "admin"], function (RouteCollector $router){
|
||||
App::$collector->group(["prefix" => "post"], function (RouteCollector $router){
|
||||
App::$collector->get('/', [\kernel\modules\post\controllers\PostController::class, 'actionIndex']);
|
||||
App::$collector->get('/page/{page_number}', [\kernel\modules\post\controllers\PostController::class, 'actionIndex']);
|
||||
App::$collector->get('/create', [\kernel\modules\post\controllers\PostController::class, 'actionCreate']);
|
||||
App::$collector->post("/", [\kernel\modules\post\controllers\PostController::class, 'actionAdd']);
|
||||
App::$collector->get('/{id}', [\kernel\modules\post\controllers\PostController::class, 'actionView']);
|
||||
App::$collector->any('/update/{id}', [\kernel\modules\post\controllers\PostController::class, 'actionUpdate']);
|
||||
App::$collector->any("/edit/{id}", [\kernel\modules\post\controllers\PostController::class, 'actionEdit']);
|
||||
App::$collector->get('/delete/{id}', [\kernel\modules\post\controllers\PostController::class, 'actionDelete']);
|
||||
});
|
||||
});
|
@ -3,13 +3,46 @@
|
||||
namespace kernel\modules\user;
|
||||
|
||||
use kernel\Module;
|
||||
use kernel\modules\menu\service\MenuService;
|
||||
|
||||
class UserModule extends Module
|
||||
{
|
||||
|
||||
|
||||
public function init()
|
||||
public MenuService $menuService;
|
||||
public function __construct()
|
||||
{
|
||||
// TODO: Implement init() method.
|
||||
$this->menuService = new MenuService();
|
||||
}
|
||||
|
||||
/**
|
||||
* @throws \Exception
|
||||
*/
|
||||
public function init(): void
|
||||
{
|
||||
$this->menuService->createItem([
|
||||
"label" => "Пользователи",
|
||||
"url" => "/admin/user",
|
||||
"slug" => "user",
|
||||
]);
|
||||
$this->menuService->createItem([
|
||||
"label" => "Список",
|
||||
"url" => "/admin/user",
|
||||
"slug" => "user_list",
|
||||
"parent_slug" => "user",
|
||||
]);
|
||||
$this->menuService->createItem([
|
||||
"label" => "Создать",
|
||||
"url" => "/admin/user/create",
|
||||
"slug" => "user_create",
|
||||
"parent_slug" => "user",
|
||||
]);
|
||||
}
|
||||
|
||||
public function deactivate(): void
|
||||
{
|
||||
$this->menuService->removeItemBySlug("user_create");
|
||||
$this->menuService->removeItemBySlug("user_list");
|
||||
$this->menuService->removeItemBySlug("user");
|
||||
}
|
||||
}
|
@ -4,6 +4,7 @@
|
||||
"author": "ITGuild",
|
||||
"slug": "user",
|
||||
"description": "User module",
|
||||
"module_class": "UserModule",
|
||||
"module_class": "kernel\\modules\\user\\UserModule",
|
||||
"module_class_file": "{KERNEL_MODULES}/user/UserModule.php",
|
||||
"routs": "routs/user.php"
|
||||
}
|
Reference in New Issue
Block a user