我開始研究一個新的Symfony 6.0專案。
我創建了一個名為Project. 在這個物體中,我想在(掛鉤)呼叫created_by時自動設定屬性......因此我創建了一個來擴展原始物體。PrePersistAbstractEntityProject
在AbstractEntity我想自動注入Symfony\Component\Security\Core\Security服務。
但是自動接線的東西不起作用。
# config/services.yaml
services:
# default configuration for services in *this* file
_defaults:
autowire: true # Automatically injects dependencies in your services.
autoconfigure: true # Automatically registers your services as commands, event subscribers, etc.
# makes classes in src/ available to be used as services
# this creates a service per class whose id is the fully-qualified class name
App\:
resource: '../src/'
exclude:
- '../src/DependencyInjection/'
- '../src/Entity/' # --> i removed that line (doesnt work)
- '../src/Kernel.php'
#this also does not work
App\Entity\AbstractEntity:
autowire: true
#this also does not work
App\Entity\AbstractEntity:
arguments:
- '@security.helper'
// src/Entity/AbstractEntity.php
<?php
namespace App\Entity;
use Doctrine\ORM\Mapping as ORM;
use Symfony\Component\Security\Core\Security;
#[ORM\MappedSuperclass]
#[ORM\HasLifecycleCallbacks]
abstract class AbstractEntity
{
private $security;
public function __construct(Security $security)
{
$this->security = $security;
}
}
uj5u.com熱心網友回復:
物體不應有任何依賴關系并包含邏輯。如果您想做某事,請考慮創建Doctrine Lifecycle Listeners prePersist或Doctrine Entity Listeners。
生命周期監聽器被定義為監聽所有應用程式物體上的單個 Doctrine 事件的 PHP 類。
添加到 services.yaml 檔案
App\EventListener\CreatedByLifecycleEvent:
tags:
-
name: 'doctrine.event_listener'
event: 'prePersist'
并創建一個監聽器
namespace App\EventListener;
use Doctrine\Persistence\Event\LifecycleEventArgs;
use Symfony\Component\Security\Core\Security;
class CreatedByLifecycleEvent
{
private $security;
public function __construct(Security $security)
{
$this->security = $security;
}
public function prePersist(LifecycleEventArgs $args): void
{
$entity = $args->getObject();
if(method_exists($entity,'setCreatedBy') and !empty($user = $this->security->getUser())){
$entity->setCreatedBy($user);
}
}
}
因此,當保存任何物體時,只要該setCreatedBy方法存在,我們的監聽器就會設定當前用戶。
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/476951.html
