Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/symfony/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
未调用Symfony2实体注释断言/回调方法_Symfony_Callback_Annotations_Assert - Fatal编程技术网

未调用Symfony2实体注释断言/回调方法

未调用Symfony2实体注释断言/回调方法,symfony,callback,annotations,assert,Symfony,Callback,Annotations,Assert,我在Assert/Callback验证方面遇到问题。我将其用作代码的示例,但Symfony只是忽略了验证函数。这是我的实体代码的相关部分 namespace Vendor\Bundle\Entity; use Doctrine\ORM\Mapping as ORM; use Gedmo\Mapping\Annotation as Gedmo; // gedmo annotations use Symfony\Component\Validator\Constraints as Assert;

我在
Assert/Callback
验证方面遇到问题。我将其用作代码的示例,但Symfony只是忽略了验证函数。这是我的实体代码的相关部分

namespace Vendor\Bundle\Entity;

use Doctrine\ORM\Mapping as ORM;
use Gedmo\Mapping\Annotation as Gedmo; // gedmo annotations
use Symfony\Component\Validator\Constraints as Assert;
use Symfony\Component\Validator\ExecutionContext;


/**
 * @Assert\Callback(methods={"isValidFirma"})
 * @ORM\Entity(repositoryClass="Vendor\Bundle\Entity\UserProfileRepository")
 * @ORM\Table(name="user_profile")
 */
class UserProfile
{
    /**
     * @ORM\Id
     * @ORM\Column(type="integer")
     * @ORM\GeneratedValue(strategy="AUTO")
     */
    protected $id;

    //...

    public function isValidFirma(ExecutionContext $context){
        $context->addViolationAtSubPath('Firma', 'Company name must be present', array(), null);
        // as of sf 2.3 use addViolationAt() instead [reference: https://github.com/propelorm/PropelBundle/issues/234 ]
    }    

    //...            

}

isvalidforma
从未被调用。我尝试了validation.yml文件而不是注释,但没有成功。每次更改后,我都会清除缓存大约50次,但都没有帮助。可能是什么问题?

解决方案。问题出现在验证程序组中。断言验证器必须是该组的一部分,否则它不会触发。 表单类文件中的这段代码是罪魁祸首:

public function setDefaultOptions(OptionsResolverInterface $resolver)
{
    $vg = array('my-profile');


    $resolver->setDefaults(array(
        'validation_groups' => $vg
    ));
}
将带有assert的行更改为

* @Assert\Callback(methods={"isValidFirma"}, groups={"my-profile"})

做了这个把戏。

为什么在
@Assert\Callback
注释之前有两个星号?这是一个输入错误。与实际问题无关。您确定没有调用它吗?您是否在方法中放置了类似于
throw new\Exception(…)
的内容以查看其是否有效?无论如何你可以用“@Assert\True(message=“your message”)来代替,这一个非常好用。@Zeljko:是的,我试过了。它没有执行任何操作。您尝试了异常或断言\true?还将数组(“cascade_validation”=>true)放在form类中,因为在S2.1中,默认情况下它是关闭的,可能与方法有关。我在嵌入表单方面遇到了很大的问题,这就解决了它。如果没有任何效果,请将实体和表单类(或控制器)放在另一篇文章中以获得更好的可见性。你可能在什么地方打错了字。