Trao đổi về dự án
Partitech Sonata Extra Bundle

Gói Sonata Extra: khai báo một quản trị viên với thuộc tính AsAdmin

Khai báo một dịch vụ quản trị với #[AsAdmin] Các thuộc tính PHP cho phép thay thế một khai báo dài trong services.yaml bằng một cấu hình được đặt trực tiếp trên lớp admin. Tuyên bố kinh điển trông như sau: app.admin.article: class: App\Admin\MyEntity...

Khai báo một dịch vụ quản trị với #[AsAdmin]

Các thuộc tính PHP cho phép thay thế một khai báo dài trong services.yaml bằng một cấu hình được đặt trực tiếp trên lớp admin.

Tuyên bố kinh điển trông như sau:

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]]

Với việc tự cấu hình, bảng arguments không còn cần thiết nữa.

Đây là một cấu hình cơ bản với #[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;
    }
    
    // ...
}

Nếu bạn cần các dịch vụ bổ sung trong lớp Admin của mình, hãy sử dụng thuộc tính phương thức #[Required] để kích hoạt tự động nối dây, hoặc định nghĩa các lời gọi trong thuộc tính AsAdmin().

Các lớp quản trị cũng phải được tải như các dịch vụ trong cấu hình YAML của bạn.

  • khi tải thư mục ứng dụng :
services:
    _defaults:
        autowire: true
        autoconfigure: true

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

Thư mục src/Admin/ của bạn không được phép bị loại trừ.

  • tuyên bố dịch vụ trong một dòng :

    App\SecondAdminDirectory\MyGreatAdmin: ~
    

Nếu bạn sử dụng một tự động khai báo dựa trên thể hiện tinh vi như thế này, nó sẽ không hoạt động:

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

Ví dụ trực quan

Khai báo một quản trị viên với thuộc tính AsAdmin

Thuộc tính gắn liền với khai báo của lớp liên quan. Tuy nhiên, hãy giữ cấu hình nghiệp vụ trong quản trị và kiểm tra việc phát hiện dịch vụ với bin/console debug:container --tag=sonata.admin.

Chia sẻ bài viết