, (*1)
Installation
Add dependency
composer require steevanb/user-bundle 0.0.*
# If you want to validate User entity data
composer require symfony/validator symfony/translation
 Add bundle
# config/bundles.php
return [
Symfony\Bundle\SecurityBundle\SecurityBundle::class => ['all' => true],
steevanb\\UserBundle\UserBundle::class => ['all' => true]
]
# config/packages/security.yaml
security:
encoders:
App\Entity\User:
algorithm: bcrypt
cost: 12
providers:
database:
entity:
class: App\Entity\User
property: username
firewalls:
dev:
pattern: ^/(_(profiler|wdt)|css|images|js)/
security: false
main:
anonymous: ~
provider: database
form_login:
login_path: login
check_path: login
default_target_path: index
username_parameter: login[username]
password_parameter: login[password]
csrf_parameter: login[_token]
logout:
path: logout
access_control:
- { path: ^/secured-area, roles: ROLE_USER }
Create User entity
Create the entity:, (*2)
# src/Entity/User.php
namespace App\Entity;
use steevanb\UserBundle\Entity\AbstractUser;
class User extends AbstractUser
{
}
Create the mapping:, (*3)
#config/doctrine/User.orm.yml
App\Entity\User:
type: entity
table: user
id:
id:
type: integer
generator: { strategy: AUTO }
options: { unsigned: true }
fields:
username:
length: 50
password:
length: 64
email:
unique: true
roles:
type: array
createdAt:
type: datetime
Create SecurityController
# src/Controller/SecurityController.php
class SecurityController extends steevanb\UserBundle\Controller\AbstractSecurityController
{
protected function createUser(): AbstractUser
{
# Create your User entity
return new User();
}
protected function createRegisterForm(): FormInterface
{
return new RegisterType();
}
protected function createRegisteredResponse(): Response
{
return new Response('User registered.');
}
}
Login
Add route:, (*4)
# config/routes.yaml
login:
path: /login
controller: App\Controller\SecurityController::login
Create template:, (*5)
{# templates/Security/login.html.twig #}
{% if error is not null %}
{{ error }}
{% endif %}
{{ form(formView) }}
Logout
Add route:, (*6)
logout:
path: /logout
Enable registration
Registration is not needed and not enabled by default., (*7)
Add route:, (*8)
# config/routes.yaml
register:
path: /register
controller: App\Controller\SecurityController::register
Create RegisterType:, (*9)
# src/Form/Type/RegisterType.php
namespace App\Form\Type;
use steevanb\UserBundle\Form\Type\AbstractRegisterType;
class RegisterType extends AbstractRegisterType
{
}