
सभी का अभिवादन। यह लेख सिम्फनी 4 और सोनाटा एडमिन के बारे में बात करेगा।
स्थापना प्रक्रिया के दौरान, मुझे दस्तावेज़ीकरण में बहुत अधिक अशुद्धियों का सामना करना पड़ा और स्वयं प्रलेखन कई स्थानों पर बिखर गया। यहां मैं पूरी प्रक्रिया पर विचार करूंगा, परियोजना के निर्माण से प्रमाणीकरण के साथ प्राधिकरण तक।
सेटिंग्स के कुछ हिस्सों को आधिकारिक दस्तावेज से लिया गया था, कुछ गिटहब पर टिप्पणियों से लिया गया था, जहां स्थापना समस्याओं पर चर्चा की गई थी। संभावित नुकसान और उनके आसपास के रास्ते भी चित्रित किए गए हैं।
सिम्फनी प्रोजेक्ट बनाना
$ composer create-project symfony/skeleton sonatademo
$ cd sonatademo
सिम्फनी एंबेडेड वेब सर्वर का उपयोग करने के लिए, आपको सिम्फनी क्लाइंट स्थापित करना होगा।
हम शुरू करते हैं।
$ symfony serve
हम http://127.0.0.1:8000/ लिंक का अनुसरण करते हैं और हम मानक सिम्फनी अभिवादन प्राप्त करेंगे। तो सब कुछ सही ढंग से काम करता है।

सोनाटा व्यवस्थापक स्थापित करें
$ composer require sonata-project/admin-bundle
सोनाटा एडमिन और डी.बी.
डेटाबेस के साथ बातचीत करने के लिए, आपको तीन पुस्तकालयों में से एक को स्थापित करने की आवश्यकता है:
इस लेख में मैं SonataDoctrineORMAdminBundle
का उपयोग कर रहा SonataDoctrineORMAdminBundle
, जो MySQL
या Sqlite
साथ काम करने के लिए पर्याप्त है।
SonataDoctrineORMAdminBundle
स्थापित करें।
$ composer require sonata-project/doctrine-orm-admin-bundle
अब Sqlite
साथ काम को कॉन्फ़िगर करते हैं।
.Env फ़ाइल खोलें और अनुभाग में ###> doctrine/doctrine-bundle ###
परिवर्तन DATABASE_URL
।
DATABASE_URL="sqlite:///%kernel.project_dir%/var/data.db"
चूंकि सिम्फनी फ्लेक्स स्थापना के दौरान हमारे लिए लगभग सभी काम करता है, इसलिए अंतिम परिणाम प्राप्त करने के लिए कुछ हेरफेर करने के लिए रहता है।
# config/packages/framework.yaml framework: translator: { fallbacks: ['en'] }
हम बाहर ले जाते हैं
$ composer dump-env dev
अब हम http://127.0.0.1:8000/admin लिंक का अनुसरण करते हैं और हम एक खाली मानक प्रशासनिक इंटरफ़ेस देखते हैं।

इकाई निर्माण
उदाहरण के लिए, एक-से-कई संबंधों से जुड़ी दो संस्थाएँ बनाते हैं।
<?php
<?php
हम डेटाबेस के साथ सिंक्रनाइज़ करते हैं।
bin/console doctrine:schema:create
सोनाटा एडमिन के लिए इकाई विन्यास
प्रत्येक इकाई के लिए यह आवश्यक है कि वह सोनाटा एडमिन के काम करने के तरीके के विवरण के साथ एक अलग फाइल बनाए।
<?php
<?php
इन वर्गों को service.yaml
में वर्णित किया जाना चाहिए।
# config/service.yaml services: ... App\Admin\CityAdmin: arguments: [~, App\Entity\City, ~] tags: - { name: sonata.admin, manager_type: orm, label: City } App\Admin\AddressAdmin: arguments: [~, App\Entity\Address, ~] tags: - { name: sonata.admin, manager_type: orm, label: Address }
यदि प्रशासनिक भाग में प्रवेश करते समय त्रुटियां होती हैं, उदाहरण Unable to generate a URL for the named route
, तो आपको एप्लिकेशन कैश को साफ़ करने और फिर से प्रयास करने की आवश्यकता है।
bin/console cache:clear
अब, यदि आप लिंक http://127.0.0.1:8000/admin पर क्लिक करते हैं, तो हम दो तत्वों की एक सूची देखेंगे Address
और City
, जहां आप सूची देख सकते हैं और नई इकाइयां बना सकते हैं।

प्राधिकरण और प्रमाणीकरण
सबसे पहले, एक उपयोगकर्ता इकाई बनाएं।
<?php
और उसी समय उपयोगकर्ता समूह का सार बनाएं।
<?php
बाद हम Twig को एक टेम्पलेट इंजन के रूप में कॉन्फ़िगर करते हैं।
framework: ... templating: engines: ['twig']
वर्तमान में सिम्फनी फ्लेक्स और FOSUserBundle के साथ समस्याएं हैं। अधिक जानकारी के लिए, लिंक # 2562 , # 2708 और # 2801 देखें ।
हालांकि इन समस्याओं का समाधान नहीं किया जाता है, आपको Sonata User Bundle
स्थापित करने से पहले कुछ अतिरिक्त जोड़तोड़ करने की आवश्यकता है।
# config/service.yaml services: ... mailer: alias: fos_user.mailer.noop public: true
# config/packages/fos_user.yaml fos_user: db_driver: orm firewall_name: main user_class: App\Entity\User registration: confirmation: enabled: false from_email: address: '%env(MAILER_USER_ADDRESS)%' sender_name: '%env(MAILER_USER_NAME)%' service: user_manager: sonata.user.orm.user_manager mailer: 'fos_user.mailer.noop' group: group_class: App\Entity\Group group_manager: sonata.user.orm.group_manager
जिसके बाद, आप बंडल को स्थापित कर सकते हैं।
$ composer require sonata-project/user-bundle
ACL सेटअप
सिम्फनी 4 में, ACL को एक अलग symfony/acl-bundle
में स्थानांतरित किया गया। इसलिए, इसे अलग से स्थापित किया जाना चाहिए।
composer require symfony/acl-bundle
# config/packages/sonata_user.yaml sonata_user: security_acl: true manager_type: orm
# config/packages/acl.yaml acl: connection: default
सिद्धांत का विन्यास
# config/packages/doctrine.yaml doctrine: orm: mappings: SonataUserBundle: ~ FOSUserBundle: ~
मेल के साथ काम सेट करना
चूंकि इस लेख के ढांचे के भीतर मेल के साथ काम पर विचार नहीं किया गया है, इसलिए हम वास्तविक सेवा के बजाय एक स्टब का संकेत देंगे।
# config/packages/sonata_user.yaml sonata_user: mailer: fos_user.mailer.noop
सोनाटा एडमिन में यूजर बंडल इंटीग्रेशन
# config/routes.yaml sonata_user_admin_security: resource: '@SonataUserBundle/Resources/config/routing/admin_security.xml' prefix: /admin sonata_user_admin_resetting: resource: '@SonataUserBundle/Resources/config/routing/admin_resetting.xml' prefix: /admin/resetting
# config/packages/security.yaml security: encoders: FOS\UserBundle\Model\UserInterface: sha512 providers: fos_userbundle: id: fos_user.user_provider.username role_hierarchy: ROLE_ADMIN: [ROLE_USER, ROLE_SONATA_ADMIN] ROLE_SUPER_ADMIN: [ROLE_ADMIN, ROLE_ALLOWED_TO_SWITCH] firewalls: dev: pattern: ^/(_(profiler|wdt)|css|images|js)/ security: false # -> custom firewall for the admin area of the URL admin: pattern: /admin(.*) context: user form_login: provider: fos_userbundle login_path: /admin/login use_forward: false check_path: /admin/login_check failure_path: null logout: path: /admin/logout target: /admin/login anonymous: true # -> end custom configuration # default login area for standard users # This firewall is used to handle the public login area # This part is handled by the FOS User Bundle main: pattern: .* context: user form_login: provider: fos_userbundle login_path: /login use_forward: false check_path: /login_check failure_path: null logout: true anonymous: true access_control: # Admin login page needs to be accessed without credential - { path: ^/admin/login$, role: IS_AUTHENTICATED_ANONYMOUSLY } - { path: ^/admin/logout$, role: IS_AUTHENTICATED_ANONYMOUSLY } - { path: ^/admin/login_check$, role: IS_AUTHENTICATED_ANONYMOUSLY } - { path: ^/admin/resetting, role: IS_AUTHENTICATED_ANONYMOUSLY } # Secured part of the site # This config requires being logged for the whole site and having the admin role for the admin part. # Change these rules to adapt them to your needs - { path: ^/admin/, role: [ROLE_ADMIN, ROLE_SONATA_ADMIN] } - { path: ^/.*, role: IS_AUTHENTICATED_ANONYMOUSLY }
# config/packages/sonata_user.yaml sonata_user: ... class: user: App\Entity\User group: App\Entity\Group
अब आप ACL और डेटाबेस को अपडेट कर सकते हैं।
$ bin/console acl:init
$ php bin/console doctrine:schema:update --force
एक सुपर उपयोगकर्ता बनाएँ। नाम demo
और पासवर्ड demo
निर्दिष्ट करें।
$ bin/console fos:user:create --super-admin Please choose a username:demo Please choose an email:demo@demo.com Please choose a password: Created user demo
एसीएल के साथ-साथ हमारे व्यवस्थापक वर्गों को सही ढंग से कॉन्फ़िगर करने के लिए, आपको सेटिंग्स में बदलाव करने की आवश्यकता है।
sonata_admin: ... security: handler: sonata.admin.security.handler.acl
निम्नलिखित चलाने के बाद:
$ bin/console sonata:admin:setup-acl Starting ACL AdminBundle configuration > install ACL for App\Admin\AddressAdmin - add role: ROLE_APP\ADMIN\ADDRESSADMIN_GUEST, permissions: ["LIST"] - add role: ROLE_APP\ADMIN\ADDRESSADMIN_STAFF, permissions: ["LIST","CREATE"] - add role: ROLE_APP\ADMIN\ADDRESSADMIN_EDITOR, permissions: ["OPERATOR","EXPORT"] - add role: ROLE_APP\ADMIN\ADDRESSADMIN_ADMIN, permissions: ["MASTER"] > install ACL for App\Admin\CityAdmin - add role: ROLE_APP\ADMIN\CITYADMIN_GUEST, permissions: ["LIST"] - add role: ROLE_APP\ADMIN\CITYADMIN_STAFF, permissions: ["LIST","CREATE"] - add role: ROLE_APP\ADMIN\CITYADMIN_EDITOR, permissions: ["OPERATOR","EXPORT"] - add role: ROLE_APP\ADMIN\CITYADMIN_ADMIN, permissions: ["MASTER"] > install ACL for sonata.user.admin.user - add role: ROLE_SONATA_USER_ADMIN_USER_GUEST, permissions: ["LIST"] - add role: ROLE_SONATA_USER_ADMIN_USER_STAFF, permissions: ["LIST","CREATE"] - add role: ROLE_SONATA_USER_ADMIN_USER_EDITOR, permissions: ["OPERATOR","EXPORT"] - add role: ROLE_SONATA_USER_ADMIN_USER_ADMIN, permissions: ["MASTER"] > install ACL for sonata.user.admin.group - add role: ROLE_SONATA_USER_ADMIN_GROUP_GUEST, permissions: ["LIST"] - add role: ROLE_SONATA_USER_ADMIN_GROUP_STAFF, permissions: ["LIST","CREATE"] - add role: ROLE_SONATA_USER_ADMIN_GROUP_EDITOR, permissions: ["OPERATOR","EXPORT"] - add role: ROLE_SONATA_USER_ADMIN_GROUP_ADMIN, permissions: ["MASTER"]
अब, जब आप http://127.0.0.1:8000/admin पते पर जाने का प्रयास करते हैं , तो हम http://127.0.0.1:8000/admin/login पर पुनर्निर्देशित हो जाएंगे।

डेमो / डेमो दर्ज करें और प्रशासनिक भाग में प्राप्त करें।

परिणाम
सभी जोड़तोड़ के बाद, हमें सोनाटा उपयोगकर्ता + एसीएल का उपयोग करके प्रमाणीकरण और प्राधिकरण के साथ सिम्फनी 4 पर सोनाटा एडमिन का एक प्रशासनिक हिस्सा मिला।
आप सभी का धन्यवाद। यदि आपके पास प्रश्न और टिप्पणियां हैं, तो मैं उन्हें टिप्पणियों में सुनूंगा।