我正在尝试加入登录和注册表单的相同操作。这就是我正在尝试的:
模块/ miembros /的actions.class.php
public function executeAux(sfWebRequest $request)
{
// I execute this action
}
模块/ miembros /模板/ auxSuccess.php
<?php include_component('sfGuardRegister', 'register'); ?>
<?php include_component('sfGuardAuth', 'signin'); ?>
模块/ miembros / components.class.php
public function executeSignin($request)
{
if ( $request->isMethod( 'post' ) && ($request-
>getParameter('submit')=='signin') ){
$this->form->bind( $request->getParameter( 'login' ) );
if ( $this->form->isValid() ){
$this->getController()->getActionStack()->getLastEntry()->getActionInstance()->redirect( '@home' );
}
}
}
模块/ miembros /模板/ _signin.php
<form action="<?php echo url_for('miembros/aux?submit=signin') ?>"
method="post">
<?php echo $form['email_address']->renderLabel() ?>
<?php echo $form['email_address'] ?>
...
它工作正常,但我想知道你是否有其他选择。
例如我不喜欢这条线: $ this-&gt; getController() - &gt; getActionStack() - &gt; getLastEntry() - &gt; getActionInstance() - &gt; redirect('@ home');
此致
哈维
答案 0 :(得分:1)
您不应该在组件中处理表单,您应该在操作中执行此操作。组件意味着可以包含在其他模板中的可重用视图(类似于部分模板,但其背后有一些代码可以支持更复杂的数据检索)。如果要在组件中显示表单以便可以重用它,则可以,但是您应该在另一个操作中处理该表单。
答案 1 :(得分:1)
感谢matei的评论这是我的新建议。你现在有什么看法?
模块/ miembros /动作/的actions.class.php
public function executeAux(sfWebRequest $request)
{
return $this->renderPartial('aux');
}
模块/ miembros /模板/ _aux.php
if(!isset($form_register)){
$form_register = new sfGuardFormRegisterByOthers();
}
include_partial('sfGuardRegister/register', array('form' => $form_register));
if(!isset($form_signin)){
$form_signin = new sfGuardFormSigninByEmail();
}
include_partial('sfGuardAuth/signin', array('form' => $form_signin));
模块/ sfGuardAuth /模板/ _signin
<form action="<?php echo url_for('sfGuardAuth/signin') ?>" method="post">
modules / miembros / sfGuardAuth / actions.class.php
if ($this->form->isValid())
{
//...
}else{
return $this->renderPartial('miembros/aux', array('form_signin' => $this->form));
}
它也有效。
哈维