តើ FOSUserBundle នៅក្នុង Symfony ជាអ្វី?

Symfony Security component ផ្ដល់នូវ framework ដែលមានសុវត្ថិភាពខ្ពស់និងអាចបត់បែនគ្រប់កាលៈទេសៈ ដែលអាចធ្វើការ load users ពី configuration, database, រឺក៏អ្វីផ្សេងទៀតដែលអ្នកនឹកស្រមៃចង់បាន។ FOSUserBundle បង្កើតឡើងដើម្បីរក្សាទុក users ក្នុង database អោយកាន់តែងាយស្រួលនិងរហ័ស។

១ តម្រូវការប្រព័ន្ធ៖

ជំនាន់នៃ bundle ទាមទារអោយមាន Symfony 2.1+ ។ ប្រសិនបើអ្នកកំពុងប្រើប្រាស់ Symfony 2.0.x, សូមផ្លាស់ប្ដូរនូវ bundle ទៅជំនាន់ 1.2.x ។

២ ការបកប្រែ រឺ Translations៖

សូមធ្វើការបើក translator ក្នុង config ដើម្បីប្រើប្រាស់នៅ អត្ថបទដើមដែលផ្ដល់អោយនៅក្នុង bundle ។

fos1

៣ របៀបតម្លើង៖

របៀបតម្លើងមាន ៧ ដំណាក់កាល ដូចខាងក្រោម៖

ដំណាក់កាលទី១៖ ដោនឡូដ FOSUserBundle ដោយប្រើប្រាស់ composer

fos2

Composer នឹងតម្លើង bundle ក្នុង project vendor/friendsofsymfony/user-bundle directory ហើយបើអ្នកជួបនូវកំហុសនៃការខ្វះខាតណាមួយក្នុងពេលតម្លើងដែលទាក់ទងនឹង configuration ប៉ារ៉ាម៉ែតទ័រ ដូចជា The child node “db_driver” at path “fos_user” must be configured អ្នកត្រូវបញ្ចប់នូវការ configuration ក្នុងដំណាក់កាលទី៥ជាមុនសិន បន្ទាប់មកធ្វើដំណើរការដំណាក់កាលទី១ម្ដងទៀត។

ដំណាក់កាលទី២៖ បើកនូវ Bundle

ធ្វើការបើក bundle ក្នុង kernel

fos3

ដំណាក់កាលទី៣៖ បង្កើត User Class របស់អ្នក

Bundle ផ្ដល់នូវ base classes ដែលធ្វើការកំណត់រួចជាស្រេចសម្រាប់ fields ដើម្បីធ្វើអោយវាមានភាពងាយស្រួលក្នុងការបង្កើត entity។ នេះជារបៀបប្រើវា៖

ទី១៖ extend base User class (ពី Model folder ប្រសិនបើអ្នកប្រើប្រាស់នូវ doctrine variants រឺក៏ Propel សម្រាប់ propel 1.x)

ទី២៖ កំណត់ id field។ វាត្រូវបានការពារដូចជា inherited ពី parent class។

នេះជាឧទាហរណ៏៖

ក Doctrine ORM User class

ប្រសិនបើអ្នកព្យាយាមប្រើ users របស់អ្នកតាមរយៈ Doctrine ORM នោះ User class របស់អ្នកត្រូវស្ថិតក្នុង Entity namespace នៃ bundle របស់អ្នកហើយវាមានលក្ខណៈដូចខាងក្រោម៖

fos4

ខ MongoDB User class

ប្រសិនបើអ្នកចង់ប្រើ users តាមរយៈ Doctrine MongoDB ODM ដូចនេះ User class ត្រូវស្ថិតក្នុង Document namespace នៃ bundle ហើយវាមានលក្ខណៈដូចខាងក្រោម៖

fos5

គ CouchDB User class

ប្រសិនបើអ្នកចង់ប្រើ users តាមរយៈ Doctrine CouchDB ODM ដូចនេះ User class ត្រូវស្ថិតក្នុង CouchDocument namespace នៃ bundle ហើយវាមានលក្ខណៈដូចខាងក្រោម៖

fos6

ឃ Propel 1.x User class

ប្រសិនបើអ្នកមិនចង់បន្ថែមតក្ករបស់អ្នកទៅក្នុង user class របស់អ្នក, អ្នកអាចប្រើ FOS\UserBundle\Propel\User ដូច user class ដែរហើយអ្នកមិនអាចបង្កើត class ផ្សេងទៀតបានទេ។ ប្រសិនបើអ្នកចង់បន្ថែម fields របស់អ្នកនោះអ្នកអាច extend the model class ដោយធ្វើការ overriding (លុប) database schema ។ ដោយគ្រាន់តែចម្លង (copy) Resources/config/propel/schema.xml file ទៅកាន់ app/Resources/FOSUserBundle/config/propel/schema.xml ហើយធ្វើការកែប្រែវាទៅតាមអ្វីដែលអ្នកត្រូវការបាន។

ដំណាក់កាលទី៤៖ Configure security.yml នៃ application របស់អ្នក

fos7

នៅក្រោម provider section អ្នកកំពុងធ្វើអោយ bundle’s packaged user provider service នៅទំនេរ តាមរយៈឈ្មោះក្រៅ fos_userbundle ។ id នៃ bundle user provider service គឺ fos_user.user_provider.username

បន្ទាប់ទៀតគឺមើលទៅលើ firewalls section ។ ពេលនេះយើងបានប្រកាស firewall មួយឈ្មោះថា main ។ចំពោះ form_login គឺអ្នកបានប្រាប់ទៅ Symfony Framework ថា រាល់ពេលនៃការស្នើរគឺ firewall នេះហើយជាអ្នកដឹកនាំអំពី អ្វីដែលអ្នកប្រើប្រាស់ត្រូវការទៅកាន់ authenticate របស់គេ ហើយអ្នកប្រើប្រាស់នឹងឆ្ពោះទៅកាន់ ទម្រង់មួយដែលគាត់នឹងមានសិទ្ធបញ្ចូលនូវលិខិតសម្គាល់របស់គាត់។

ចំណែកឯ access_control section គឺជាកន្លែងដែលអ្នកអាចកំណត់នូវលិខិតសម្គាល់សំខាន់ៗរបស់អ្នកប្រើប្រាស់ដែលព្យាយាមចូលទៅកាន់ទីតាំងជាក់លាក់ណាមួយនៃ application ។ bundle ទាមទារនូវ login form និង route ទាំងអស់ត្រូវបានប្រើដើម្បីបង្កើត user និង reset លេខសម្ងាត់ដែលទំនេរទៅកាន់ unauthenticated users ប៉ុន្តែការប្រើប្រាស់ដូចទៅនឹង firewall នៃទំព័រដែលអ្នកត្រូវការអោយមានសុវត្ថិភាពជាមួយនឹង bundle។ នេះជាអ្វីដែលអ្នកត្រូវច្បាស់ថា ការស្នើរផ្សេងទៀតគឺត្រូវទៅនឹង /login pattern រឺក៏ /register រឺក៏ /resetting ហើយអ្នកក៏ត្រូវច្បាស់ថាការស្នើរសុំចាប់ផ្ដើមជាមួយនឹង /admin ដែលនឹងទាមទារនូវ អ្នកប្រើប្រាស់ដែលមានសិទ្ធជា ROLE_ADMIN

ដំណាក់កាលទី៥៖ Configure នូវ FOSUserBundle

ពេលនេះអ្នកបាន configured security.yml នៃ application របស់អ្នកបានត្រឹមត្រូវហើយដើម្បីធ្វើការជាមួយនឹង FOSUserBundle ដូចនេះបន្ទាប់មកទៀតគឺអ្នកត្រូវ configure the bundle ដើម្បីធ្វើការជាមួយនឹងតម្រូវការជាក់លាក់ណាមួយនៃ application របស់អ្នក។ សូមធ្វើការបន្ថែម configuration ដូចខាងក្រោមទៅកាន់ config.yml file ដែលអាស្រ័យទៅលើ ប្រភេទនៃ datastore ណាមួយដែលអ្នកកំពុងតែប្រើ។

fos8

ដើម្បីប្រើប្រាស់ bundle គឺទាមទារអោយមានការ configure តម្លៃចំនួន៣តែប៉ុណ្ណោះ៖

ទី១ គឺប្រភេទនៃ datastore ដែលអ្នកកំពុងតែប្រើដូចជា orm, mongodb, couchdb រឺក៏ propel

ទី២ គឺឈ្មោះ firewall ដែលអ្នកបាន configure ក្នុងដំណាក់កាលទី៤

ទី៣ គឺ class name (FQCN) នៃ User class ដែលអ្នកបានបង្កើតក្នុងដំណាក់កាលទី៣

ដំណាក់កាលទី៦៖ បញ្ចូល (import) FOSUserBundle routing

fos9

ដំណាក់កាលទី៧៖ Update database schema របស់អ្នក

ពេលនេះ bundle គឺ configure រួចរាល់ហើយ ដូចនេះរឿងចុងក្រោយដែលអ្នកត្រូវធ្វើនោះគឺ update database schema របស់អ្នកព្រោះអ្នកបានបន្ថែមនូវ entity ថ្មីមួយ នៅក្នុង User class ដែលអ្នកបានបង្កើតក្នុងដំណាក់ទី៤។

សម្រាប់ ORM សូមវាយ command ដូចខាងក្រោម៖

fos10

សម្រាប់ MongoDB users អ្នកអាចវាយ command ដើម្បីបង្កើត indexes

fos11

សម្រាប់ Propel 1 users អ្នកត្រូវតម្លើង TypehintableBehavior មុននឹងបង្កើត model របស់អ្នក

fos12

អ្នកអាច វាយ command ដូចខាងក្រោមដើម្បីបង្កើត model

fos13

ពេលនេះអ្នកអាច ចូលទៅកាន់ http://app.com/app_dev.php/login