CakePHP:重定向到随机视图

时间:2011-04-23 18:18:35

标签: cakephp

我有一个CakePHP网站作为调查问卷。当用户单击“下一步”时,它会将用户从一个问题移动到另一个问题。现在,对于每个人,我希望系统随机选择他们将收到的问题。

每个问题都构建为重定向到另一个视图的视图。有没有人对如何构建它有一个好主意,以便当用户点击“下一步”时,它们被重定向到一个随机视图?

非常感谢大家。

3 个答案:

答案 0 :(得分:0)

如果我理解正确,您在每个表单的数据库中都没有唯一标识符。在这种情况下,您需要一些方法来识别它们。我将在这里使用一个简单的视图文件名数组,但你可能最好创建一个将视图名称作为字段的问题表,并将提交的答案链接到问题。

// always make sure that the current view gets passed as a parameter
echo $form->create('Question', array('url'=>array('action'=>'next', $currentView));
...
echo $form->submit('Next');

在您的控制器中:

var $questionViews = array('q1', 'q2', 'q3'); // filenames of the views

function next($view = null) {

    if(isset($this->data)) {
        // save answers to database, session, etc
        if(/*save successful*/) {
            // redirect to the same action, which will load a new view because
            // no form data was passed
            $this->redirect(array('action'=>'next'));
            exit();
        }
    } 

    $toRender = null;  // view to be rendered
    if($view && in_array($view, $this->questionViews)) {
        // render the explicitly passed view
        $toRender = $view;
    } else {
        // grab a random view
        $toRender = $this->questionViews[array_rand($this->questionViews)];
    }

    $this->set('currentView', $toRender); // used by form action
    $this->render($toRender); // explicit call to render stops the default view from being rendered
}

答案 1 :(得分:0)

嗯...为什么你要为每个问题用不同的视角构建它?将每个问题存储在数据库中似乎要容易得多,使用带有$ question和$ answers []等变量的通用模板视图作为模板变量,然后只使用该1个视图来显示每个问题。

答案 2 :(得分:0)

我最终做的是在数据库中创建一个“路径”表,每个记录代表调查问卷的可能路径。然后我让控制器抓取一个随机记录,将其分成一个Session变量中的数组,然后在每个函数末尾的“重定向”部分使用这些数组值。谢谢大家。