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; ?>

ただし、これにより Error: call to undefined method が発生します。

$q_id の値を手動で割り当てると、すべてが完全に機能します。

アクションから getId() メソッドを呼び出して割り当てるにはどうすればよいですか? その呼び出しはコントローラーにさえあるべきですか?

4

2 に答える 2

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();
  }
于 2012-10-19T08:52:49.983 に答える
2

そうですね、質問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();
  }

次に、オブジェクト 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 にリダイレクトされます。

于 2012-10-19T09:19:43.583 に答える