【问题标题】:Yii - Wizard Behavior extension - Skipping StepsYii - 向导行为扩展 - 跳过步骤
【发布时间】:2012-07-20 16:46:40
【问题描述】:

我希望 stackoverflow 上的人对向导行为扩展有一些经验:http://www.yiiframework.com/extension/wizard-behavior/

问题是当我在第一页(用户)上点击提交时,它一直到帐单页面并跳过公司页面...帮助?

我有 3 个步骤来收集信息:用户、公司和计费页面。这是我的控制器中的行为函数:

public function behaviors() {
    return array(
     'wizard'=>array(
      'class'=>'ext.WizardBehavior.WizardBehavior',
      'steps'=>array(
       'user','company','billing'
      )
     )
    )
}

这是我的流程步骤功能:

public function wizardProcessStep($event) {
    $name = '_wizard'.ucfirst($event->step);
    if (method_exists($this, $name)) {
        call_user_func(array($this,$name), $event);
    } else {
        throw new CException(Yii::t('yii','{class} does not have a method named "{name}"', array('{class}'=>get_class($this), '{name}'=>$name)));
    }
}

这里以我公司的步骤为例:

protected function _wizardCompany($event) {
    echo 'called company';
    exit();
    $company=new Company;
    if(isset($_POST['Company'])) {
        $company->attributes=$_POST['Company'];
        if($company->validate()) {
            $event->sender->save($company->attributes);
            $event->handled = true;
        }
    }
    $this->render('new_company',array(
        'company'=>$company,
        'event'=>$event,
    ));
}

【问题讨论】:

  • 您能否也发布您的 _wizardUser($event) 方法,该方法可能包含一些设置下一步计费的代码。
  • User中的代码与wizardCompany相同,只需将Company替换为User$company替换为$user

标签: yii wizard yii-extensions


【解决方案1】:

这似乎不是错误,而是设计使然。默认情况下,WizardBehavior 会跳到第一个未处理的步骤。

您可能正在测试您的向导并在“用户”和“公司”中输入了一些内容。当您现在处于“计费”时,然后返回“用户”(通过 url 或链接)。输入内容并再次提交,它会跳到结算,因为这是第一个未处理的步骤。请注意,您可以通过 URL 和链接转到“公司”以及之前处理的所有步骤。

此行为可以通过

设置为false
public function behaviors() {
    return array(
     'wizard'=>array(
      'autoAdvance' => false,
     )
    )
}

或者您实现 onFinish 事件,以便在测试时轻松重置向导。

【讨论】:

  • 你去...我没有在我的行为功能中设置'autoAdvance' => false...谢谢,做到了!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-08-11
  • 2019-11-19
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多