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:
[cce_bash]
composer require sonata-project/user-bundle –no-update
composer update
[/cce_bash]
Add to your registerbundles function in the AppKernel class
[cce_php]
new FOSUserBundleFOSUserBundle(),
new SonataUserBundleSonataUserBundle(‘FOSUserBundle’),
new ApplicationSonataUserBundleApplicationSonataUserBundle(),
[/cce_php]
Add to the config.yml
[cce_yaml]
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)
[/cce_yaml]
In the config.yml, add to the doctrine configuration under the dbal option the types lines
[cce_yaml]
types:
json: SonataDoctrineTypesJsonType
[/cce_yaml]
Change the security.yml for this one
[cce_yaml]
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 }
[/cce_yaml]
Update the routing.yml
[cce_yaml]
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[/cce_yaml]
Now generate the entities
[cce_bash]
php app/console sonata:easy-extends:generate SonataUserBundle -d src
[/cce_bash]
You can clone the project from my github account here.