サポートされたPHP8および作曲家2
Symfony強力なダッシュボードと管理者。 Symfony 5 、 Vue 3 、 Bootstrap 5フレームワークで開発されました。
Symfony構造に変更は行われませんでした。現在のディレクトリ構造が使用されます。管理者用のカスタムネームスペースが作成されました。このフィールドは、すべての管理者操作に使用されます。
インターフェイスは、Twitter Bootstrapを使用してレスポンシブになるように設計されています。使用するために最小限の依存関係を試されました。
pdadminをダウンロードしてください
composer create-project appaydin/pd-admin pdadmin
.env
ファイルを作成して構成します。
データベーススキーマを作成します
bin/console doctrine:schema:create --force
組み込みのWebサーバーを実行します
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セキュリティコンポーネントで使用されます。 3つのデフォルトのユーザーロールがあります。
role_super_adminには完全な権限があります。役割_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コンポーネント」で作成されました。ユーザーごとに調整可能な構造があり、「Twigテンプレート」エンジンで特別に設計できます。詳細については、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コンポーネント」で作成されました。作成されたメニューごとに、イベントはデフォルトで生成され、メニュー構成でオフにできます。詳細については、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 ;
}
}