Parliamo del progetto
Partitech Sonata Extra Bundle

Sonata Extra Bundle: dichiarare un admin con l'attributo AsAdmin

Dichiarare un servizio admin con #[AsAdmin] Gli attributi PHP permettono di sostituire una lunga dichiarazione in services.yaml tramite una configurazione posta direttamente sulla classe admin. La dichiarazione classica era simile a questa: app.admin.articl...

Dichiarare un servizio admin con #[AsAdmin]

Gli attributi PHP permettono di sostituire una lunga dichiarazione in services.yaml tramite una configurazione posta direttamente sulla classe admin.

La dichiarazione classica era simile a questa:

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 l'autoconfigurazione, il quadro arguments non è più necessario.

Ecco una configurazione di base 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;
    }
    
    // ...
}

Se avete bisogno di servizi aggiuntivi nella vostra classe Admin, utilizzate l'attributo del metodo #[Required] per attivare l’autowiring, o definire delle chiamate nell'attributo AsAdmin().

Le classi admin devono essere caricate anche come servizi nella vostra configurazione YAML.

  • caricando la directory dell'applicazione:
services:
    _defaults:
        autowire: true
        autoconfigure: true

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

La vostra directory src/Admin/ non deve essere esclusa.

  • dichiarazione di servizio in una riga:

    App\SecondAdminDirectory\MyGreatAdmin: ~
    

Se utilizzate una dichiarazione automatica sofisticata basata sull'Istanza come questa, non funzionerà:

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

Esempio visivo

Dichiarazione di un admin con l'attributo AsAdmin

L'attribut avvicina la dichiarazione della classe interessata. Tuttavia, mantenete la configurazione aziendale nell'admin e verificate la scoperta del servizio con bin/console debug:container --tag=sonata.admin.

Condividi questo articolo