PHP8 et compositeur pris en charge
Symfony puissant tableau de bord et admin. Développé avec Symfony 5 , Vue 3 , Bootstrap 5 Framework.
Aucune modification n'a été apportée à la structure Symfony, la structure du répertoire actuel est utilisée. Un espace de noms personnalisé pour Admin a été créé. Ce champ est utilisé pour toutes les opérations d'administrateur.
L'interface est conçue pour être réactive à l'aide de Twitter Bootstrap. La dépendance la moins possible a été essayée d'être utilisée.
Télécharger Pdadmin
composer create-project appaydin/pd-admin pdadmin
Créez et configurez le fichier .env
.
Créer des schémas de base de données
bin/console doctrine:schema:create --force
Exécuter le serveur Web intégré
symfony server:start --no-tls -d
Installer et construire des actifs
yarn install
yarn run build
Exécuter le processus de dos
pm2 start
# Manuel
# bin/console messenger:consume -vv
# bin/console schedule:run
Il existe un utilisateur PD pour la gestion des utilisateurs. Tous les paramètres sont dans le fichier config / packages / pd_user.yaml .
bin/console user:create
bin/console user:changepassword
bin/console user:role
La connexion de l'utilisateur pour le langage multiple est utilisée. Chaque utilisateur peut choisir sa propre langue. Lorsque vous vous connectez, vous êtes automatiquement redirigé.
De nouvelles langues peuvent être ajoutées à partir des paramètres du noyau. Vous devez traduire manuellement pour la nouvelle langue.
Sensioframeworkextrabundle est utilisé avec le composant de sécurité Symfony. Il y a trois rôles utilisateur par défaut.
Role_Super_Admin a pleinement l'autorité. Les autorités Role_User peuvent être restreintes et l'accès au panneau peut être désactivé dans le fichier Security.yaml .
Les paramètres du système sont stockés dans la base de données. Tous les paramètres peuvent être utilisés comme paramètres après assemblage des conteneurs. Étant donné que tous les paramètres sont compilés avec le conteneur, il ne crée aucune charge supplémentaire sur le système. Les paramètres peuvent être configurés à l'aide de formulaires Symfony et ajoutés au menu Paramètres de l'extérieur via le système "Menu Event". Effacer le cache après les modifications des paramètres du système, sinon les nouveaux paramètres ne seront pas activés.
Pour les paramètres généraux, vous pouvez l'ajouter à SRC / Admin / Forms / System / GeneralForm
Ajouter un nouveau menu aux paramètres :
<?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 ;
}
}
Le système de widget a été créé avec Symfony "EventDispatcher composant". Il a une structure réglable pour chaque utilisateur et il peut être spécialement conçu avec le moteur "modèle de brindille". Pour plus d'informations, visitez Pd-widget
Créer un nouveau widget d'administration:
<?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 ;
})
);
}
}
Le système de menu a été créé avec Symfony "EventDispatcher composant". Pour chaque menu créé, l'événement est généré par défaut, peut être désactivé par la configuration du menu. Pour plus d'informations, visitez le pd-menu
Créer un 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 ;
}
}