使用没有注入的会话自定义验证器

时间:2016-05-24 21:14:25

标签: php session constraints symfony

我的问题是:如何在不使用依赖注入的情况下在我的类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;

你能在会话注释验证中给出一个参数吗?

有什么想法吗?

1 个答案:

答案 0 :(得分:0)

查看UIElementhttps://github.com/schmittjoh/JMSDiExtraBundle。它包含了很多开发者生活中的好东西。

您正在寻找的可能是:http://jmsyst.com/bundles/JMSDiExtraBundle/master/annotations#inject