Symfony 右键窗体事件以显示修改的数据并更新修改的数据?
一个简单的任务:在显示表单之前,如果Symfony 右键窗体事件以显示修改的数据并更新修改的数据?,symfony,symfony-forms,Symfony,Symfony Forms,一个简单的任务:在显示表单之前,如果$data->getRole()以“ROLE\uu”开头,请删除此字符串并仅显示其余字符串。当用户提交表单时,执行相反的操作:在名称前添加“ROLE” 做这件事最好的地方是哪里?实际上我使用的是PRE\u SET\u DATA和POST\u BIND这些是执行此操作的正确事件吗? $builder->addEventListener(FormEvents::PRE_SET_DATA, function(DataEvent $eve
$data->getRole()
以“ROLE\uu”
开头,请删除此字符串并仅显示其余字符串。当用户提交表单时,执行相反的操作:在名称前添加“ROLE”
做这件事最好的地方是哪里?实际上我使用的是PRE\u SET\u DATA
和POST\u BIND
这些是执行此操作的正确事件吗?
$builder->addEventListener(FormEvents::PRE_SET_DATA,
function(DataEvent $event){
if(is_null($data = $event->getData()) || !$data->getId()) return;
$data->setRole(strtoupper(preg_replace('/^ROLE_/i', '',
$data->getRole())));
});
$builder->addEventListener(FormEvents::POST_BIND,
function(DataEvent $event) {
if(is_null($data = $event->getData()) || !$data->getId()) return;
$data->setRole('ROLE_' . strtoupper($data->getRole()));
});
我不会使用事件来阅读没有前缀“role”的角色。由于事件阻碍了您的工作流程,因此应谨慎使用事件!和symfony一起工作了一段时间,我在没有其他方法的情况下使用了一两次。其他时候都有更好的办法 我倾向于简单地添加函数getShortRole和setShortRole,并在实体中使用shortRole:
class MyEntity {
private $role;
public function setShortRole($role) {
$this->role = 'ROLE_' . strtoupper($role);
}
public function getShortRole() {
return strtoupper(preg_replace('/^ROLE_/i', '', $this->role));
}
}
使用模型而不是事件可以省去很多麻烦
第二种更复杂的方法是使用一个表示表单而不是实体的模型,并将表单映射到实体。这里有一篇关于这个的好文章!
我自己用,效果很好