2012-10-19 76 views
1

我有一個帶有$ id屬性和getId()方法的問題類。我也在控制器中有一個索引操作,我希望顯示該問題的答案數量。從動作調用方法

class questionActions extends sfActions 
{ 
    public function executeIndex(sfWebRequest $request) 
    {   
     $q_id = $this->getQuestion()->getId(); 

     $this->answers = Doctrine_Core::getTable('answer') 
               ->createQuery('u') 
               ->where('u.question_id = ?', $q_id) 
               ->execute(); 
    } 

在我indexSuccess模板:

<?php if ($answers) : ?> 
    <p><?php echo count($answers) ?> answers to this request.</p> 
<?php endif; ?> 

然而,這導致一個錯誤:調用未定義的方法。

如果我手動指定$ q_id的值,那麼一切正常。

如何通過對操作中getId()方法的調用來分配它?這個電話是否應該在控制器中?

+0

我們可以看到getQuestion()方法嗎? – j0k

回答

2

您收到該錯誤,因爲getQuestion()未在控制器中實現。

我將假設您將問題ID作爲GET參數傳遞。

在這種情況下,你可以嘗試這樣的:

class questionActions extends sfActions { 

    public function executeIndex(sfWebRequest $request) { 
     $q_id = $request->getParameter('question_id'); 

     $question = Doctrine_Core::getTable('question')->find($q_id); 

     $this->answers = Doctrine_Core::getTable('answer') 
     ->createQuery('u') 
     ->where('u.question_id = ?', $question->getId()) 
     ->execute(); 
    } 

或者更好

class questionActions extends sfActions { 

    public function executeIndex(sfWebRequest $request) { 
    $q_id = $request->getParameter('question_id'); 
    $question = Doctrine_Core::getTable('question')->find($q_id); 
    $this->answers = $question->getAnswers(); 
    } 
+0

感謝您的幫助 –

2

嗯,我想fatest的辦法就是直接打電話與問題id參數查詢(如果您的參數在URL中id

class questionActions extends sfActions 
{ 
    public function executeIndex(sfWebRequest $request) 
    { 
    // redirect to 404 automatically if the question doesn't exist for this id 
    $this->question = $this->getRoute()->getObject(); 

    $this->answers = $this->question->getAnswers(); 
    } 

然後你就可以定義一個object route,所以你不必檢查問題是否存在給定的id,這將是symfony本身的工作。

question_index: 
    url:  /question/:id 
    class: sfDoctrineRoute 
    options: { model: Question, type: object } 
    param: { module: question, action: index } 
    requirements: 
    id: \d+ 
    sf_method: [get] 

然後,當你調用一個URL /question/23,它會自動嘗試與ID 23檢索問題。如果這個問題不存在,它將重定向到404.