Настройте валидатор с сеансом без внедрения

Мой вопрос: как пройти сессию в моем классе ContainsExampleValidator без использования внедрения зависимостей.

То, что я хотел бы, чтобы дать аннотацию в аргументе над полем, когда я использую мою пользовательскую проверку.


Вот мой код:

В services.yml:

app.validator_constraints.contains_example_validator:
class: AppBundle\Validator\Constraints\ContainsExampleValidator
arguments: ['@doctrine.orm.default_entity_manager', '@session']
tags:
- { name: validator.constraint_validator }

В классе ограничений:

namespace AppBundle\Validator\Constraints;

use Symfony\Component\Validator\Constraint;

/**
* @Annotation
*/
class ContainsExample extends Constraint
{

public $message = 'Customize my default message';

public function validatedBy()
{
return get_class($this).'Validator';
}
}

В моем ContainsExampleValidator:

<?php

namespace AppBundle\Validator\Constraints;

use Doctrine\ORM\EntityManager;
use Symfony\Component\HttpFoundation\Session\Session;
use Symfony\Component\Validator\Constraint;
use Symfony\Component\Validator\ConstraintValidator;

class ContainsExampleValidator extends ConstraintValidator
{
/**
* @var EntityManager
*/
protected $em;protected $session;

public function __construct(EntityManager $entityManager, Session $session)
{
$this->em = $entityManager;
$this->session = $session;
}
}

В моей сущности:

<?php

namespace AppBundle\Entity;

use Symfony\Component\Validator\Constraints as Assert;
use AppBundle\Validator\Constraints\ContainsExample;

class Entity
{
/**
* @ContainsExample(message="customize my message")
*/
protected $myfield;

Можете ли вы дать аргумент в валидации аннотации сессии?

Любая идея ?

2

Решение

Посмотрите на JMSDiExtraBundle: https://github.com/schmittjoh/JMSDiExtraBundle. Он содержит много вкусностей для жизни разработчика.

То, что вы ищете, вероятно, это: http://jmsyst.com/bundles/JMSDiExtraBundle/master/annotations#inject

0

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector