Con la introducción de Symfony 4, muchas cosas cambiaron, la mayoría para siempre. Sin embargo, cuando trabaja en una empresa en la que trabaja constantemente en las mismas cosas (lógica), lo pasará mal descubriendo cómo funcionan las cosas en nuevos marcos. Ese es el caso de Symfony 4, donde el sistema de usuario se volvió aún más fácil de implementar. Sin embargo, si está enamorado de la facilidad que ofrece FOSUserBundle, es posible que desee saber que todavía es posible implementarlo en Symfony 4.
En este artículo, le mostraremos cómo instalar el FOSUserBundle tradicional en su nuevo proyecto Symfony 4.
1. Cree una aplicación web tradicional
Para implementar FOSUserBundle en un proyecto basado en Symfony 4, deberá trabajar con la versión tradicional de la aplicación web de Symfony (versión que instala las dependencias necesarias para crear una aplicación web, por ejemplo, Doctrine, Twig, SwiftMailer, Monolog, etc.) Entonces, como primer paso, crea tu nuevo proyecto Symfony usando esta versión:
composer create-project symfony/website-skeleton project_name
Esto creará un proyecto que tiene un par de dependencias como se muestra en el siguiente archivo composer.json
:
{
"type": "project",
"license": "proprietary",
"require": {
"php": "^7.1.3",
"ext-iconv": "*",
"sensio/framework-extra-bundle": "^5.1",
"symfony/apache-pack": "^1.0",
"symfony/asset": "^4.1",
"symfony/console": "^4.1",
"symfony/expression-language": "^4.1",
"symfony/flex": "^1.0",
"symfony/form": "^4.1",
"symfony/framework-bundle": "^4.1",
"symfony/lts": "^[email protected]",
"symfony/monolog-bundle": "^3.1",
"symfony/orm-pack": "*",
"symfony/process": "^4.1",
"symfony/security-bundle": "^4.1",
"symfony/serializer-pack": "*",
"symfony/swiftmailer-bundle": "^3.1",
"symfony/twig-bundle": "^4.1",
"symfony/validator": "^4.1",
"symfony/web-link": "^4.1",
"symfony/yaml": "^4.1"
},
"require-dev": {
"symfony/debug-pack": "*",
"symfony/dotenv": "^4.1",
"symfony/maker-bundle": "^1.0",
"symfony/profiler-pack": "*",
"symfony/test-pack": "^1.0",
"symfony/web-server-bundle": "^4.1"
},
"config": {
"preferred-install": {
"*": "dist"
},
"sort-packages": true
},
"autoload": {
"psr-4": {
"App\\": "src/"
}
},
"autoload-dev": {
"psr-4": {
"App\\Tests\\": "tests/"
}
},
"replace": {
"symfony/polyfill-iconv": "*",
"symfony/polyfill-php71": "*",
"symfony/polyfill-php70": "*",
"symfony/polyfill-php56": "*"
},
"scripts": {
"auto-scripts": {
"cache:clear": "symfony-cmd",
"assets:install %PUBLIC_DIR%": "symfony-cmd"
},
"post-install-cmd": [
"@auto-scripts"
],
"post-update-cmd": [
"@auto-scripts"
]
},
"conflict": {
"symfony/symfony": "*"
},
"extra": {
"symfony": {
"allow-contrib": false
}
}
}
Prepare su proyecto y póngalo en funcionamiento, una vez que obtenga al menos la página de bienvenida:
Una vez hecho esto, continúe con el siguiente paso.
2. Instale FOSUserBundle
Después de crear su proyecto, proceda a instalar FOSUserBundle con composer con el siguiente comando:
composer require friendsofsymfony/user-bundle "~2.0"
Esto comenzará con la instalación y no necesitará configurar nada en el kernel o algo así, sin embargo, encontrará un mensaje de error una vez que finalice el proceso:
El nodo hijo "db_driver" en la ruta "fos_user" debe estar configurado.
Ignore esto y continúe con el siguiente paso.
3. Crear clase de usuario
A continuación, deberá crear la entidad Usuario en su proyecto, el objeto de clase que maneja el objeto de usuario. Como estamos trabajando con FOSUserBundle, la clase tiene la siguiente estructura, así que asegúrese de crear el archivo en el /project/src/Entity
directorio con el nombre User.php
y el siguiente contenido:
<?php
// src/Entity/User.php
namespace App\Entity;
use FOS\UserBundle\Model\User as BaseUser;
use Doctrine\ORM\Mapping as ORM;
/**
* @ORM\Entity
* @ORM\Table(name="fos_user")
*/
class User extends BaseUser
{
/**
* @ORM\Id
* @ORM\Column(type="integer")
* @ORM\GeneratedValue(strategy="AUTO")
*/
protected $id;
public function __construct()
{
parent::__construct();
// your own logic
}
}
4. Actualizar el archivo de configuración de seguridad
Después de crear la entidad de usuario, debe cambiar la configuración de seguridad, estableciendo el codificador FOSUserBundle como predeterminado definiéndolo como el proveedor de seguridad.
Edite el archivo /project/config/packages/security.yaml
y cambie su contenido con lo siguiente:
# config/packages/security.yaml
security:
encoders:
FOS\UserBundle\Model\UserInterface: bcrypt
role_hierarchy:
ROLE_ADMIN: ROLE_USER
ROLE_SUPER_ADMIN: ROLE_ADMIN
# https://symfony.com/doc/current/security.html#where-do-users-come-from-user-providers
providers:
fos_userbundle:
id: fos_user.user_provider.username_email
firewalls:
dev:
pattern: ^/(_(profiler|wdt)|css|images|js)/
security: false
main:
pattern: ^/
form_login:
provider: fos_userbundle
csrf_token_generator: security.csrf.token_manager
logout: true
anonymous: true
# Una forma sencilla de controlar el acceso a grandes secciones de su sitio
# Nota: Solo se utilizará el * primer * control de acceso que coincida
access_control:
- { path: ^/login$, role: IS_AUTHENTICATED_ANONYMOUSLY }
- { path: ^/register, role: IS_AUTHENTICATED_ANONYMOUSLY }
- { path: ^/resetting, role: IS_AUTHENTICATED_ANONYMOUSLY }
- { path: ^/admin/, role: ROLE_ADMIN }
5. Cree el archivo de configuración de FOSUserBundle
Una vez que FOSUserBundle se ha definido como el proveedor de usuario predeterminado, debe definir su configuración. En Symfony 4, esto se puede hacer a través de un nuevo archivo yaml /project/config/packages/fos_user.yaml
que tendrá la configuración predeterminada de este paquete:
# config/packages/fos_user.yaml
fos_user:
db_driver: orm # other valid values are 'mongodb' and 'couchdb'
firewall_name: main
user_class: App\Entity\User
from_email:
address: "[email protected]"
sender_name: "[email protected]"
6. Permita la creación de plantillas de PHP y Twig y habilite el enrutamiento
Como lo requiere FOSUserBundle, los motores de plantillas PHP y Twig deben estar habilitados, así que asegúrese de habilitarlo en el archivo /project/config/packages/framework.yaml
:
framework:
templating:
engines: ['twig', 'php']
También debe habilitar las rutas FOSUserBundle, así que cree el archivo de rutas para FOSUserBundle con el archivo /project/config/routes/fos_user.yaml
y agregue el siguiente contenido:
fos_user:
resource: "@FOSUserBundle/Resources/config/routing/all.xml"
Esto registrará las rutas predeterminadas de FOSUserBundle como el inicio de sesión, cierre de sesión, registro, etc.
7. Actualice el esquema de su base de datos
Como último paso, solo necesitas actualizar el esquema de tu base de datos con el siguiente comando:
php bin/console doctrine:schema:update --force
Esto creará la fos_user
tabla en su base de datos y podrá registrar usuarios. Con este paso, finaliza la instalación y configuración de FOSUserBundle.
8. Pruebe el sistema de usuario
Como último paso, puede probar FOSUserBundle en su proyecto accediendo al proyecto web, por ejemplo en la ruta de registro http://yourproject/register
, por ejemplo , donde encontrará el formulario de FOSUserBundle:
Que te diviertas ❤️!
Conviertete en un programador más sociable