2010-09-16 91 views
1

我是新來的zend,所以我不確定什麼是組織我想要做的最好的方法。我指導用戶進行一系列測驗。 mysite.com/quiz1 mysite.com/quiz2 mysite.com/quiz3 mysite.com/quiz4這個多個控制器?

當用戶應答的第一次測驗,他被轉發到一個頁面,告訴他,如果他的答案是正確的,並且可以在同一頁面上選擇回答另一個測驗。如果他回答了,他又會被帶到一個頁面,告訴他他的回答是否正確,並提交第三個問答。

從架構方面來看,這些quiz1,quiz2等網頁中的每一個都被認爲是自己的控制器?他們的路徑說他們可能是,但如果他們對我來說沒有意義。有沒有辦法讓他們在相同的路徑,但捆綁在同一個控制器。正如我所說我是Zend的新手,所以會讚賞一些關於正確方法的反饋。

回答

5

我會做一個測驗控制器,將有像showQuiz(),validateQuiz()這樣的動作讀取測驗參數。這樣你將重用大部分代碼。這些測試將會是db中的條目,在那裏你也可以建立路徑或連接。

class QuizController extends Zend_Controller_Action 
{ 
    public function showAction() 
    { 
      // you can play this in routes but it could be basically something like this 
      // localhost/quiz/id/1 
      $quiz_id = $this->_request->getParam('id'); 
      $this->view->quiz = $this->getQuizTable()->find($quiz_id); 
    } 

    public function validateAction() 
    { 
      $quiz_id = $this->_request->getParam('id'); 
      $quiz = $this->getQuizTable()->find($quiz_id); 
      $quiz->validate(); // build your own validator function 
    } 
} 
+0

好的方法!爲什麼不讓控制器成爲REST-ful?您可以將showAction()重命名爲getAction(),並將validateAction()重命名爲postAction(),並最終獲得更清晰的URL和REST建議的其他特權。 – Vika 2010-09-16 14:40:42