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

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.