Symfony2 / doctrine2注释:既可以输入两个字段,也可以不输入?

时间:2013-01-07 11:29:13

标签: php symfony annotations doctrine validation

是否有办法要求通过Symfony2或doctrine2中的注释:如果您已填充字段A,那么您还必须指定字段B?

在我的情况下,用户可以指定他们想要安排的cron作业类型。如果类型为odbc,则必须至少选择一个db-table。如果是任何其他类型的cron作业,则不需要表格选择(甚至是有意义的)。

1 个答案:

答案 0 :(得分:2)

您可以在注释中配置断言/回调,该回调指向验证实体数据的回调函数。

use Doctrine\ORM\Mapping as ORM;
use Symfony\Component\Validator\ExecutionContext;
use Symfony\Component\Validator\Constraints as Assert;

/**
 * @ORM\Entity
 * ...
 * @Assert\Callback(methods={"validateDB"})
 */
class Item
{
    protected $type;
    protected $table; 

    public function validateDB(ExecutionContext $context)
    {
        $path = $context->getPropertyPath();
        if ($this->type == 'odbc' and empty($this->table)) {
            // ".type" is the property name where you want the error to appear
            // in the form.
            $context->setPropertyPath($path . '.type'); 
            $context->addViolation("ODBC table must be specified.", array(), null);
        }
    }
}