Compatible con PHP8 y compositor 2
Symfony potente tablero y administrador. Desarrollado con Symfony 5 , Vue 3 , marco Bootstrap 5 .
No se hicieron cambios en la estructura Symfony, se utiliza la estructura actual del directorio. Se ha creado un espacio de nombres personalizado para administrador. Este campo se utiliza para todas las operaciones de administrador.
La interfaz está diseñada para responder usando Twitter Bootstrap. Se intentó utilizar la menor dependencia posible.
Descargar pDadmin
composer create-project appaydin/pd-admin pdadmin
Crear y configurar el archivo .env
.
Crear esquemas de base de datos
bin/console doctrine:schema:create --force
Ejecutar el servidor web incorporado
symfony server:start --no-tls -d
Instalar y construir activos
yarn install
yarn run build
Corre el proceso de recompensa
pm2 start
# Manuel
# bin/console messenger:consume -vv
# bin/console schedule:run
Hay PD-User para la gestión de usuarios. Todas las configuraciones están en el archivo config/paquetes/pd_user.yaml .
bin/console user:create
bin/console user:changepassword
bin/console user:role
Se utiliza el inicio de sesión del usuario para lenguaje múltiple. Cada usuario puede elegir su propio idioma. Cuando inicia sesión, se redirige automáticamente.
Se pueden agregar nuevos idiomas desde la configuración del núcleo. Necesitas traducir manualmente para el nuevo idioma.
SensioFrameWorkExTrabundle se usa con el componente de seguridad Symfony. Hay tres roles de usuario predeterminados.
Role_super_admin tiene una autoridad completa. Las autoridades de Role_User se pueden restringir y el acceso al panel se puede desactivar en el archivo Security.yaml .
La configuración del sistema se almacena en la base de datos. Todas las configuraciones se pueden usar como parámetros después del ensamblaje del contenedor. Dado que todas las configuraciones se compilan con el contenedor, no crea ninguna carga adicional en el sistema. La configuración se puede configurar utilizando formularios Symfony y agregar al menú Configuración en el exterior a través del sistema "Evento de menú". Borrar el caché después de los cambios a la configuración del sistema, de lo contrario, la nueva configuración no estará habilitada.
Para configuraciones generales, puede agregarlo a SRC/Admin/Forms/System/GeneralForm
Agregue el nuevo menú a la configuración :
<?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 ;
}
}
Widget System fue creado con Symfony "EventDispatcher Component". Tiene una estructura ajustable para cada usuario y se puede diseñar especialmente con motor de "plantilla de twig". Para más información, visite PD-Widget
Crear un nuevo widget de administrador:
<?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 ;
})
);
}
}
El sistema de menú fue creado con Symfony "EventDispatcher Component". Para cada menú creado, el evento se genera de forma predeterminada, se puede desactivar mediante la configuración del menú. Para obtener más información, visite el PD-Menu
Crear menú:
<?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 ;
}
}