我目前在Symfony2网站上有这样的情况:
由loginAction
SecurityController
执行的登录功能。访问其路径时,操作在渲染视图时使用参数(p1,p2,p3)。 (same as FOSUserBundle)
在registerAction
中注册functionnality RegistrationController
正在使用其他参数p3,p4,p5返回视图。 (same as FOSUserBundle)
当表单无效时,参数用于保存错误消息。
我需要显示一个显示两种功能的主页(登录表单和注册表单),但也可以处理由于数据无效而导致的错误。
我可以成功显示主页(MembersManagementBundle::index.html.twig
):
{{ render(controller('MembersManagementBundle:Security:login')) }}
{{ render(controller('MembersManagementBundle:Registration:register')) }}
控制器:
class IndexController extends Controller
{
public function indexAction()
{
return $this->render('MembersManagementBundle::index.html.twig');
}
}
如果输入了良好的值(无论是登录还是注册形式),在表单提交后都会对正确的目标页面执行重定向。
但是,
如果向其中一个表单输入了错误的数据,则会重定向到具有特定错误的特定视图(这是正常的,因为提交表单调用action
属性中指定的url,该属性调用相应的操作相应的控制器)。
问题:
是否可以在一个模板中使用所有参数的总和进行两个操作?我应该开发indexAction
以便它包含两个动作的逻辑吗?或者还有另一种方法可以将两个操作分开,但将结果合并到indexAction中?
我最终的目标是能够生成包含所需错误的索引页面(p1,p2,p3
或p4,p5,p6
)。
谢谢。非常感谢您的帮助。
答案 0 :(得分:0)
这就是您现在的流程:
现在您需要将其编辑为以下内容:
你是怎么做到的:
您在loginAction中添加一个变量:
$loginErrorsArray = array();
无论您何时向表单添加错误,都应将其添加到数组中。
//instead of $form->addError(...);
$loginErrorsArray['formField'] = $errorMessage;
在渲染表单之前,您将其保存到会话中。
$this->get('session')->set('loginErrors', $loginErrorsArray);
现在,在代码开头的同一个操作中,您将获取会话变量并运行它,在foreach条目中创建formErrors。之后,在会话中保存一个空数组。
$loginErrorsArray = $this->get('session')->get('loginErrors');
foreach($loginErrorsArray as $error){
$form->addError(...);
}
$this->get('session')->set('loginErrors', array());
现在,这将在操作中执行以下操作:
希望这有用。