Мой вопрос: как пройти сессию в моем классе 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;
Можете ли вы дать аргумент в валидации аннотации сессии?
Любая идея ?
Посмотрите на JMSDiExtraBundle
: https://github.com/schmittjoh/JMSDiExtraBundle. Он содержит много вкусностей для жизни разработчика.
То, что вы ищете, вероятно, это: http://jmsyst.com/bundles/JMSDiExtraBundle/master/annotations#inject
Других решений пока нет …