Install FOS User in Symfony 2
After finished the tutorial I needed a user Bundle, the FOS Bundle (Friend of Symfony) is for Symfony 2 what SfGuardUser was for Symfony 1, so we gonna continue the tutorial started in the previous post.
Installing the bunddles:
1 2 | composer require sonata-project/user-bundle --no-update composer update |
Add to your registerbundles function in the AppKernel class
1 2 3 | new FOSUserBundleFOSUserBundle(), new SonataUserBundleSonataUserBundle('FOSUserBundle'), new ApplicationSonataUserBundleApplicationSonataUserBundle(), |
Add to the config.yml
1 2 3 4 5 6 7 8 9 10 11 12 | sonata_user: security_acl: true manager_type: orm # can be orm or mongodb fos_user: db_driver: orm # can be orm or odm firewall_name: main user_class: ApplicationSonataUserBundleEntityUser group: group_class: ApplicationSonataUserBundleEntityGroup group_manager: sonata.user.orm.group_manager # If you're using doctrine orm (use sonata.user.mongodb.user_manager for mongodb) service: user_manager: sonata.user.orm.user_manager # If you're using doctrine orm (use sonata.user.mongodb.group_manager for mongodb) |
In the config.yml, add to the doctrine configuration under the dbal option the types lines
1 2 | types: json: SonataDoctrineTypesJsonType |
Change the security.yml for this one
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 | security: encoders: FOSUserBundleModelUserInterface: sha512 acl: connection: default role_hierarchy: ROLE_ADMIN: [ROLE_USER, ROLE_SONATA_ADMIN] ROLE_SUPER_ADMIN: [ROLE_ADMIN, ROLE_ALLOWED_TO_SWITCH] SONATA: - ROLE_SONATA_PAGE_ADMIN_PAGE_EDIT # if you are using acl then this line must be commented providers: fos_userbundle: id: fos_user.user_manager firewalls: # Disabling the security for the web debug toolbar, the profiler and Assetic. 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 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 default: anonymous: ~ access_control: # URL of FOSUserBundle which need to be available to anonymous users - { path: ^/login$, role: IS_AUTHENTICATED_ANONYMOUSLY } - { path: ^/register, role: IS_AUTHENTICATED_ANONYMOUSLY } - { path: ^/resetting, role: IS_AUTHENTICATED_ANONYMOUSLY } # Admin login page needs to be access without credential - { path: ^/admin/login$, role: IS_AUTHENTICATED_ANONYMOUSLY } - { path: ^/admin/logout$, role: IS_AUTHENTICATED_ANONYMOUSLY } - { path: ^/admin/login_check$, 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 } |
Update the routing.yml
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 | app: resource: "@AppBundle/Controller/" type: annotation admin: resource: '@SonataAdminBundle/Resources/config/routing/sonata_admin.xml' prefix: /admin _sonata_admin: resource: . type: sonata_admin prefix: /admin sonata_user_security: resource: "@SonataUserBundle/Resources/config/routing/sonata_security_1.xml" sonata_user_resetting: resource: "@SonataUserBundle/Resources/config/routing/sonata_resetting_1.xml" prefix: /resetting sonata_user_profile: resource: "@SonataUserBundle/Resources/config/routing/sonata_profile_1.xml" prefix: /profile sonata_user_register: resource: "@SonataUserBundle/Resources/config/routing/sonata_registration_1.xml" prefix: /register sonata_user_change_password: resource: "@SonataUserBundle/Resources/config/routing/sonata_change_password_1.xml" prefix: /profile sonata_user: resource: '@SonataUserBundle/Resources/config/routing/admin_security.xml' prefix: /admin |
Now generate the entities
1 | php app/console sonata:easy-extends:generate SonataUserBundle -d src |
You can clone the project from my github account here.