我有一個CakePHP網站,充當問卷。當用戶點擊「下一步」時,它將用戶從一個問題移到另一個問題。現在,對於每個人,我希望系統隨機選擇他們將收到的問題。CakePHP:重定向到一個隨機視圖
將每個問題構建爲重定向到另一個視圖的視圖。有沒有人有關於如何構建它的好主意,以便在用戶單擊「下一步」時將它們重定向到隨機視圖?
非常感謝大家。
我有一個CakePHP網站,充當問卷。當用戶點擊「下一步」時,它將用戶從一個問題移到另一個問題。現在,對於每個人,我希望系統隨機選擇他們將收到的問題。CakePHP:重定向到一個隨機視圖
將每個問題構建爲重定向到另一個視圖的視圖。有沒有人有關於如何構建它的好主意,以便在用戶單擊「下一步」時將它們重定向到隨機視圖?
非常感謝大家。
我最終做的是在數據庫中創建一個「路徑」表,每個記錄代表一個可能的路徑通過問卷。然後我讓控制器抓取一個隨機記錄,將它分成一個Session變量中的數組,然後在每個函數結尾的「重定向」部分使用這些數組值。感謝大家。
如果我理解正確,您沒有在每個表單的數據庫中的唯一標識符。在這種情況下,你需要一些方法來識別它們。我將在這裏使用一組簡單的視圖文件名,但是您最好創建一個以視圖名稱作爲字段的問題表,並將提交的答案鏈接到問題。
// 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
}
嗯......你爲什麼要與每一個問題有不同的看法建築呢?將每個問題存儲在數據庫中,使用帶有$ question和$ answers []這樣的變量的通用模板視圖作爲模板變量,然後僅使用該視圖來顯示每個問題似乎更容易。