with texto strip_tags remove limpiar from eliminar allow all php symfony symfony-sonata

php - texto - Extender el paquete de usuario de Sonata y agregar nuevos campos



string strip_tags (3)

1. Crea un nuevo paquete

Algo así como AcmeUserBundle. Créelo y regístrelo como lo hace normalmente.

2. Crea una nueva entidad de usuario

A continuación, cree una entidad de User y Group que extienda Sonata/UserBundle/Entity/BaseUser y Sonata/UserBundle/Entity/BaseGroup . También debe agregar la configuración para la clave principal, por ejemplo:

/** * @ORM/Entity * @ORM/Table(name="fos_user") */ class User extends BaseUser { /** * @ORM/Id * @ORM/Column(type="integer") * @ORM/GeneratedValue(strategy="AUTO") */ protected $id; }

3. Configure la entidad

luego, vaya a su archivo app/config/config.yml y configure estas nuevas entidades:

sonata_user: class: user: Acme/UserBundle/Entity/User group: Acme/UserBundle/Entity/Group

4. Reemplace la clase UserAdmin

Entonces, necesitas crear una nueva clase UserAdmin. Para hacerlo, simplemente cree una nueva clase UserAdmin dentro de su paquete, amplíe Sonata/UserBundle/Admin/Model/UserAdmin y anule los métodos como este:

namespace Acme/UserBundle/Admin; use Sonata/UserBundle/Admin/Model/UserAdmin as SonataUserAdmin; class UserAdmin extends SonataUserAdmin { /** * {@inheritdoc} */ protected function configureFormFields(FormMapper $formMapper) { parent::configureFormFields($formMapper); $formMapper ->with(''new_section'') ->add(...) // ... ->end() ; } }

5. Reemplazar la antigua clase UserAdmin

Luego, debes asegurarte de que Sonata use la nueva clase UserAdmin. Solo necesita establecer el parámetro sonata.user.admin.user.class en su nueva clase y listo!

# app/config/config.yml parameters: sonata.user.admin.user.class: Acme/UserBundle/Admin/UserAdmin

Extiendo el paquete de usuario de Sonata y creando algunos campos adicionales en la nueva entidad de usuario. Estos campos solo se actualizarán dentro del área de administración de Sonata bajo los usuarios, por lo que no es necesario que estén disponibles en el formulario de edición de perfil. Tengo problemas para actualizar estos campos a través del Administrador de usuarios de Sonata y probé varias formas diferentes de extender / implementar esa clase en Application / Sonata / UserBundle. ¿Alguien ha encontrado esto antes y puede darme un tutorial o proceso paso a paso de la manera más limpia para extender la nueva entidad de usuario?


Esto es fácil, pero la documentación de SonataUserBundle es bastante corta en esto. Básicamente, después de configurar los dos paquetes como se describe aquí y aquí :

Necesita crear una clase para extender la clase Sonata/UserBundle/Entity/BaseUser en SonataUserBundle . Tenga en cuenta que si anula el constructor, aún debe llamar al constructor del objeto principal.

namespace Your/Bundle/Entity; use Doctrine/ORM/Mapping as ORM; use Doctrine/ORM/EntityManager; use Sonata/UserBundle/Entity/BaseUser as BaseUser; /** * @ORM/Entity * @ORM/Table(name="user",indexes={@ORM/Index(name="username_idx", columns={"username"})}) */ class User extends BaseUser { public function __construct() { parent::__construct(); // your code here } /** * @ORM/Column(type="string") */ protected $firstName = ""; public function getFirstName() { return $this->firstName; } public function setFirstName($firstName) { $this->firstName = $firstName; } }

Si es necesario, también puede anular el objeto Sonata/UserBundle/Entity/BaseGroup de forma similar.

Luego, edite su config.yml para que coincida con sus espacios de nombres, como este

# FOS User Bundle Configuration fos_user: user_class: Your/Bundle/Entity/User # To also override the Group object # group: # group_class: Your/Bundle/Entity/Group # Sonata User Bundle configuration sonata_user: class: user: Your/Bundle/Entity/User # To also override the Group object # group: Your/Bundle/Entity/Group

Borrar el caché Se usarán sus entidades en lugar de las integradas.


Descubrí que el problema era un problema de doctrina. Mi paquete extendido estaba utilizando las asignaciones de campo xml originales. Eliminé esos archivos y volví a anotaciones. Todo funcionó brillantemente desde allí. Espero que esto ayude a alguien más que está experimentando el mismo problema.