مدعوم PHP8 و Composer 2
Symfony Strong Dashboard & Admin. تم تطويره مع Symfony 5 ، Vue 3 ، Footstrap 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 لإدارة المستخدم. جميع الإعدادات في ملف التكوين/الحزم/ملف pd_user.yaml .
bin/console user:create
bin/console user:changepassword
bin/console user:role
يتم استخدام تسجيل دخول المستخدم للغة المتعددة. يمكن لكل مستخدم اختيار لغته الخاصة. عند تسجيل الدخول ، يتم إعادة توجيهك تلقائيًا.
يمكن إضافة لغات جديدة من إعدادات kernel. تحتاج إلى ترجمة يدويًا للغة الجديدة.
يتم استخدام SensioframeworkextraBundle مع مكون أمان Symfony. هناك ثلاثة أدوار للمستخدم الافتراضية.
rob_super_admin لديه سلطة كاملة. يمكن تقييد سلطات rob_user ويمكن إيقاف الوصول إلى اللوحة في ملف Security.yaml .
يتم تخزين إعدادات النظام في قاعدة البيانات. يمكن استخدام جميع الإعدادات كمعلمات بعد تجميع الحاوية. نظرًا لأن جميع الإعدادات يتم تجميعها باستخدام الحاوية ، فإنها لا تنشئ أي تحميل إضافي على النظام. يمكن تكوين الإعدادات باستخدام نماذج Symfony وإضافتها إلى قائمة الإعدادات من الخارج عبر نظام "حدث القائمة". امسح ذاكرة التخزين المؤقت بعد التغييرات على إعدادات النظام ، وإلا فلن يتم تمكين الإعدادات الجديدة.
للإعدادات العامة ، يمكنك إضافتها إلى 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 ;
}
}