我正在尝试将存储在数据库中的本地用户与某些外部服务相关联,因此他们可以使用相同的凭据登录任何地方。
我有一个EventListener等待一些FOSUserEvents,如FOSUserEvents::REGISTRATION_SUCCESS
或FOSUserEvents::CHANGE_PASSWORD_SUCCESS
,当数据有效但未实际保存时触发,以执行对各种外部服务的某些调用并复制新用户凭据
如果服务返回一条消息,说明数据已被复制,那么一切正常。
但是如果一个服务说有问题,没有问题,我想中断表单的保存过程并添加错误信息。
目标是防止Symfony保存数据,即使它们有效,如果外部服务说no
,并且我不知道如何执行这种紧急停止。
实际上,它只基于FOSUserBundle,但如果我找到一个可行的解决方案,我将不得不为其他实体执行类似的操作,这就是为什么我尽量使用通用的。
这是我的一些代码
class MyListener implements EventSubscriberInterface
{
public static function getSubscribedEvents()
{
return array(
FOSUserEvents::REGISTRATION_SUCCESS => 'createUser',
FOSUserEvents::CHANGE_PASSWORD_SUCCESS => 'editUser'
);
}
public function createUser(FormEvent $event)
{
$user = $event->getForm()->getData();
// Check if the user exists before trying to edit
$result = $this->_userExists($user);
if($result['value'] == false)
{
// Create the user
$result = $this->_createUser($user);
// Check if the user is successfully replicated
if($result['result'] != 'success')
{
/*
* Emergency stop (user not replicated)
*/
}
}else{
/*
* Emergency stop (user doesn't exists)
*/
}
}
. . .
}
实际上我没有找到任何方法来停止保存工作流程并返回到表单页面以显示错误消息。因此,如果有人知道如何执行此操作,请随意写下您的想法,并感谢所有人。 Stackoverflow真的是最好的; - )