Я пытаюсь сохранить начальное значение для пользовательского поля в объекте UserService. Причина в том, что я использую этот объект в EasyAdminBundle, и когда я создаю форму, я хочу установить значение по умолчанию для user_id (объект ManyToOne to User).
... но я все еще не вижу изменений во время сохранения.
class UserServiceRepository extends ServiceEntityRepository
{
protected $_em;
public function __construct(RegistryInterface $registry)
{
$this->_em = $this->entityManager;
parent::__construct($registry, UserService::class);
}
// I override save method:
public function save(UserService $userService)
{
// Get current user from security:
$user = $this->get('security.token_storage')->getToken()->getUser();
// set to useService...
$userService->setUser($user);
// and persist & flush:
$this->_em->persist($userService);
$this->_em->flush();
}




// I override save method:
Вы переопределяете несуществующий метод в родительском, нет метода сохранения ни в ServiceEntityRepository, ни в EntityRepository. Итак, в чем суть того, что вы делаете, и почему вы устанавливаете user_id по умолчанию в репозитории службы?
Обновлено:
services:
my.listener:
class: UserServiceListener
arguments:
- "@security.token_storage"
tags:
- { name: doctrine.event_listener, event: prePersist }
Слушатель:
class UserServiceListener
{
private $token_storage;
public function __construct(TokenStorageInterface $token_storage)
{
$this->token_storage = $token_storage;
}
public function prePersist(LifeCycleEventArgs $args)
{
$entity = $args->getEntity();
if (!$entity instanceof UserService) {
return;
}
$entity->setUser($this->token_storage->getToken()->getUser());
}
}
Объект UserService является сущностью доктрины? Основная идея хранилища токенов — получить пользователя по токену и восстановить сеанс для него, но вы хотите сохранить связанный объект, я прав. Таким образом, КАЖДЫЙ раз, когда вы инициируете запрос, в вашу сущность будет выполняться операция записи.
Каждый раз, когда я сохраняю user_service, я хочу, чтобы user_service.user_id был равен активному идентификатору пользователя, вошедшего в систему.
Хорошо, понял. Посмотрите на приведенный выше код, вы должны создать прослушиватель событий доктрины с методом prePersist для вашего объекта UserService.
Спасибо. Я использую easyadminbundle... я определил форму для userservice... мне нужно установить текущий идентификатор пользователя по умолчанию в user_service