รองรับ PHP8 และนักแต่งเพลง 2
Symfony Dashboard & Admin พัฒนาด้วย Symfony 5 , Vue 3 , Bootstrap 5 Framework
ไม่มีการเปลี่ยนแปลงใด ๆ กับโครงสร้าง symfony จะใช้โครงสร้างไดเรกทอรีปัจจุบัน มีการสร้างเนมสเปซที่กำหนดเองสำหรับผู้ดูแลระบบ ฟิลด์นี้ใช้สำหรับการดำเนินงานของผู้ดูแลระบบทั้งหมด
อินเทอร์เฟซได้รับการออกแบบให้ตอบสนองโดยใช้ Twitter Bootstrap การพึ่งพาที่เป็นไปได้น้อยที่สุดคือพยายามใช้
ดาวน์โหลด pdadmin
composer create-project appaydin/pd-admin pdadmin
สร้างและกำหนดค่าไฟล์. .env
สร้างแผนผังฐานข้อมูล
bin/console doctrine:schema:create --force
เรียกใช้เว็บเซิร์ฟเวอร์ในตัว
symfony server:start --no-tls -d
ติดตั้งและสร้างสินทรัพย์
yarn install
yarn run build
เรียกใช้กระบวนการย้อนกลับ
pm2 start
# Manuel
# bin/console messenger:consume -vv
# bin/console schedule:run
มีผู้ใช้ PD สำหรับการจัดการผู้ใช้ การตั้งค่าทั้งหมดอยู่ในไฟล์ config/packages/pd_user.yaml
bin/console user:create
bin/console user:changepassword
bin/console user:role
ใช้การเข้าสู่ระบบของผู้ใช้สำหรับหลายภาษา ผู้ใช้แต่ละคนสามารถเลือกภาษาของตนเองได้ เมื่อคุณเข้าสู่ระบบคุณจะถูกเปลี่ยนเส้นทางโดยอัตโนมัติ
สามารถเพิ่มภาษาใหม่ได้จากการตั้งค่าเคอร์เนล คุณต้องแปลด้วยตนเองสำหรับภาษาใหม่
Sensioframeworkextrabundle ใช้กับองค์ประกอบความปลอดภัยของ Symfony มีสามบทบาทผู้ใช้เริ่มต้น
ROLE_SUPER_ADMIN มีอำนาจเต็มรูปแบบ เจ้าหน้าที่ ROLE_USER สามารถถูก จำกัด ได้และสามารถปิดการเข้าถึงพาเนลในไฟล์ Security.yaml
การตั้งค่าระบบจะถูกเก็บไว้ในฐานข้อมูล การตั้งค่าทั้งหมดสามารถใช้เป็นพารามิเตอร์หลังจากชุดประกอบคอนเทนเนอร์ เนื่องจากการตั้งค่าทั้งหมดถูกรวบรวมด้วยคอนเทนเนอร์จึงไม่ได้สร้างโหลดเพิ่มเติมใด ๆ ในระบบ การตั้งค่าสามารถกำหนดค่าได้โดยใช้แบบฟอร์ม symfony และเพิ่มลงในเมนูการตั้งค่าจากภายนอกผ่านระบบ "Event Event" ล้างแคชหลังจากการเปลี่ยนแปลงการตั้งค่าระบบมิฉะนั้นการตั้งค่าใหม่จะไม่ถูกเปิดใช้งาน
สำหรับการตั้งค่าทั่วไปคุณสามารถเพิ่มลงใน src/admin/forms/system/generalform
เพิ่มเมนูใหม่ลงในการตั้งค่า :
<?php
//src/Admin/Menu/SettingsMenu.php
namespace App Admin Menu ;
use Pd MenuBundle Builder ItemInterface ;
use Pd MenuBundle Builder Menu ;
class SettingsMenu extends Menu
{
public function createMenu ( array $ options = []): ItemInterface
{
// Create Root Item
$ menu = $ this -> createRoot ( ' settings_menu ' )-> setChildAttr ([
' class ' => ' nav nav-pills ' ,
' data-parent ' => ' admin_config_general ' ,
]);
// Create Menu Items
$ menu -> addChild ( ' nav_config_general ' )
-> setLabel ( ' nav_config_general ' )
-> setRoute ( ' admin_config_general ' )
-> setLinkAttr ([ ' class ' => ' nav-item ' ])
-> setRoles ([ ' ROLE_CONFIG_GENERAL ' ])
// Email
-> addChildParent ( ' nav_config_email ' )
-> setLabel ( ' nav_config_email ' )
-> setRoute ( ' admin_settings_email ' )
-> setLinkAttr ([ ' class ' => ' nav-item ' ])
-> setRoles ([ ' ROLE_SETTINGS_EMAIL ' ]);
return $ menu ;
}
}
ระบบวิดเจ็ตถูกสร้างขึ้นด้วย Symfony "EventDispatcher Component" มันมีโครงสร้างที่ปรับได้สำหรับผู้ใช้แต่ละคนและสามารถออกแบบเป็นพิเศษด้วยเอ็นจิ้น "Twig Template" สำหรับข้อมูลเพิ่มเติมโปรดเยี่ยมชม PD-Widget
สร้างวิดเจ็ตผู้ดูแลระบบใหม่:
<?php
//src/Admin/Widgets/AccountWidget.php
namespace App Admin Widgets ;
use Pd WidgetBundle Builder Item ;
use Pd WidgetBundle Event WidgetEvent ;
use Doctrine ORM EntityManagerInterface ;
use Symfony Component HttpFoundation Request ;
class AccountWidget
{
private $ entityManager ;
public function __construct ( EntityManagerInterface $ entityManager )
{
$ this -> entityManager = $ entityManager ;
}
/**
* Build Widgets.
*
* @param WidgetEvent $event
*/
public function builder ( WidgetEvent $ event )
{
// Get Widget Container
$ widgets = $ event -> getWidgetContainer ();
// Add Widgets
$ widgets
-> addWidget (( new Item ( ' user_statistics ' , 3600 ))
-> setGroup ( ' admin ' ) // Widget Adds to "Admin" Group
-> setName ( ' widget_user_statistics.name ' )
-> setDescription ( ' widget_user_statistics.description ' )
-> setTemplate ( ' @Admin/Widget/userStatistics.html.twig ' )
-> setRole ([ ' ROLE_WIDGET_USERSTATISTICS ' ])
-> setConfigProcess ( function ( Request $ request ) {
/**
* Controller for Widget Settings
* The return value is stored in the user specific database
*/
if ( $ type = $ request -> get ( ' type ' )) {
switch ( $ type ) {
case ' 1week ' :
return [ ' type ' => ' 1week ' ];
case ' 1month ' :
return [ ' type ' => ' 1month ' ];
case ' 3month ' :
return [ ' type ' => ' 3month ' ];
}
}
return false ;
})
-> setData ( function ( $ config ) {
/**
* The return value can be used in the twig template.
* The function will not execute unless you call it in the template.
* You can use the database operations here.
*/
// Set Default Config
if (! isset ( $ config [ ' type ' ])) {
$ config [ ' type ' ] = ' 1week ' ;
}
// Create Statistics Data
if ( $ config [ ' type ' ] === ' 1month ' ) {
$ data = [ ' chartDay ' => ' 7 ' ];
// Create Data
} else if ( $ config [ ' type ' ] === ' 1month ' ) {
$ data = [ ' chartDay ' => ' 30 ' ];
} else {
$ data = [ ' chartDay ' => ' 90 ' ];
}
return $ data ;
})
);
}
}
ระบบเมนูถูกสร้างขึ้นด้วย Symfony "EventDispatcher Component" สำหรับแต่ละเมนูที่สร้างขึ้นเหตุการณ์จะถูกสร้างขึ้นตามค่าเริ่มต้นสามารถปิดโดยการกำหนดค่าเมนู สำหรับข้อมูลเพิ่มเติมโปรดเยี่ยมชม PD-Menu
สร้างเมนู:
<?php
// src/Admin/Menu/MainNav.php
namespace App Admin Menu ;
use Pd MenuBundle Builder ItemInterface ;
use Pd MenuBundle Builder Menu ;
class MainNav extends Menu
{
public function createMenu ( array $ options = []): ItemInterface
{
// Create ROOT Menu
$ menu = $ this -> createRoot ( ' main_menu ' , true ); // Event enabled
// Create Dashboard
$ menu -> addChild ( ' nav_dashboard ' , 1 )
-> setLabel ( ' nav_dashboard ' )
-> setRoute ( ' admin_dashboard ' )
-> setRoles ([ ' ROLE_DASHBOARD ' ])
-> setExtra ( ' label_icon ' , ' dashboard ' );
/*
* Create Account Section
*/
$ menu
-> addChild ( ' nav_account ' , 5 )
-> setLabel ( ' nav_account ' )
-> setRoute ( ' admin_account_list ' )
-> setRoles ([ ' ROLE_ACCOUNT_LIST ' ])
-> setExtra ( ' label_icon ' , ' people ' )
// Account List
-> addChild ( ' nav_account ' , 1 )
-> setLabel ( ' nav_account ' )
-> setRoute ( ' admin_account_list ' )
-> setRoles ([ ' ROLE_ACCOUNT_LIST ' ])
// Group List
-> addChildParent ( ' nav_group ' , 2 )
-> setLabel ( ' nav_group ' )
-> setRoute ( ' admin_account_group_list ' )
-> setRoles ([ ' ROLE_GROUP_LIST ' ]);
return $ menu ;
}
}