如果其中一个数据库字段设置为true,是否有方法自动将其设置为false?
例如:
User
----
admin
is_super_admin
is_coach_admin
用户只能是上述值之一。如果我将admin设置为true,我希望is_super_admin和is_coach_admin自动设置为false。我的意思是,不要设置在后台。有办法吗?至少,对symfony学说最好:(
您可以通过Symfony表达式实现业务逻辑的验证(如果一个值为true,则其他值应为false(:
https://symfony.com/doc/3.4/reference/constraints/Expression.html
# src/AppBundle/Resources/config/validation.yml
AppBundleModelUser:
properties:
isAdmin:
- Expression:
expression: "this.isSuperAdmin() == false"
message: "Admin cannot be a super admin also"
但若您想根据另一个字段设置一个字段的值,则可以使用Symfony事件。
$builder->addEventListener(
FormEvents::SUBMIT,
function(FormEvent $event) {
$form = $event->getForm();
$data = $event->getData();
if ($data->isAdmin()){
$form->get('is_super_admin')->setData(false);
$form->get('is_coach_admin')->setData(false);
}
}
);