Hablemos de su proyecto
Partitech Sonata Extra Bundle

Paquete Extra de Sonata: declarar un administrador con el atributo AsAdmin

Declarar un servicio admin con #[AsAdmin] Los atributos de PHP permiten reemplazar una larga declaración en services.yaml mediante una configuración colocada directamente en la clase admin. La declaración clásica se parecía a esto: app.admin.article: ...

Declarar un servicio admin con #[AsAdmin]

Los atributos de PHP permiten reemplazar una larga declaración en services.yaml mediante una configuración colocada directamente en la clase admin.

La declaración clásica se parecía a esto:

app.admin.article:
       class: App\Admin\MyEntityAdmin
       arguments: [~, App\Entity\MyEntity, ~]
       tags:
           - { name: sonata.admin, manager_type: orm, label: "My Entity Admin" }
       calls:
           - [ setTranslationDomain, [partitech]]

Con la autoconfiguración, el tablero arguments ya no es necesario.

Aquí hay una configuración básica con #[AsAdmin] :


use Partitech\SonataExtra\Attribute\AsAdmin;
use Symfony\Contracts\Service\Attribute\Required;

#[AsAdmin(
    manager_type: 'orm',
    group: 'Admin',
    label: 'My Entity Admin',
    model_class: \Partitech\SonataExtra\Entity\MyEntity::class,
    controller: \Partitech\SonataExtra\Controller\Admin\MyEntityController::class,
    calls: [
        ['setTranslationDomain', ['partitech']],
        ['setMyAttributeCallService'],
    ]
)]
class MyEntityAdmin extends AbstractAdmin
{
    private MyRequiredService $myRequiredService;
    private MyAttributeCallService $myAttributeCallService;
    
    #[Required]
    public function setMyRequiredService(MyRequiredService $myRequiredService): void
    {
        $this->myRequiredService = $myRequiredService;
    }

    public function setMyAttributeCallService(MyAttributeCallService $myAttributeCallService): void
    {
        $this->myAttributeCallService = $myAttributeCallService;
    }
    
    // ...
}

Si necesita servicios adicionales en su clase Admin, use el atributo de método #[Required] para activar el autowiring, o defina llamadas en el atributo AsAdmin().

Las clases de administración también deben cargarse como servicios en su configuración YAML.

  • cargando el directorio de la aplicación :
services:
    _defaults:
        autowire: true
        autoconfigure: true

    App\:
        resource: '../src/'
        exclude:
            - '../src/DependencyInjection/'
            - '../src/Entity/'
            - '../src/Kernel.php'

Su directorio src/Admin/ no debe ser excluido.

  • declaración de servicio en una línea:

    App\SecondAdminDirectory\MyGreatAdmin: ~
    

Si utiliza una declaración automática sofisticada basada en la Instancia así, esto no funcionará:

services:
  _defaults:
    autowire: true
    autoconfigure: true
  _instanceof:
    Sonata\AdminBundle\Admin\AbstractAdmin:
      tags: { name: sonata.admin }

Ejemplo visual

Declaración de un administrador con el atributo AsAdmin

El atributo acerca la declaración de la clase correspondiente. Sin embargo, mantenga la configuración de negocio en el administrador y verifique el descubrimiento del servicio con bin/console debug:container --tag=sonata.admin.

Compartir este artículo