Symfony,在路由方法中获取GET参数

时间:2011-02-21 15:48:14

标签: php symfony1 doctrine

有问题。

有我的路线方法:

book_list:
  url:      /api/books.:sf_format
  class:    sfDoctrineRoute
  options:  { model: Book, type: list, method: getActiveWithAuthor }
  param:    { module: book, action: list, sf_format: json }
  requirements:
    sf_format: (?:json|html)

行动中的代码很简单:

public function executeList(sfWebRequest $request) {
    $this->books = $this->getRoute()->getObjects();
}

获取图书的自定义方法

public function getActiveWithAuthor(array $parameters) {
    // crit is easy to find in logs.
    sfContext::getInstance()->getLogger()->crit(var_export($parameters, true));
    return BookQuery::create()
    ->addSelf()
    ->addAuthor()
    ->execute();
}

问题是,我想通过可选的参数“date_from”来过滤书籍,这可能是在网址中,例如/ API /书?date_from = 2011-02-18

但是在日志中我只能看到“sf_format => html”(或json) 我应该使用什么来获取可选参数“date_from”?

2 个答案:

答案 0 :(得分:1)

您可以从请求对象中获取参数:

sfContext::getInstance()->getRequest()->getParameter('date_from');

<强>更新 更好的解决方案,没有sfContext :: getInstance():

class myCustomRoute extends sfDoctrineRoute
{
  public function getRealVariables()
  {
    return array_merge('date_from', parent::getRealVariables());
  }
}

在routing.yml中指定此类的使用,您可以直接在方法中使用此参数。

答案 1 :(得分:1)

public function executeList(sfWebRequest $request) 
{
  $this->books = Doctrine::getTable('Book')-> getActiveWithAuthor($request->getParameter('date'));
}

//BookTable.class.php
public function getActiveWithAuthor($date) 
{
  $q = $this->createQuery('b')
    ->leftJoin('b.Author')
    ->where('b.date > ?', $date);

  return $q->execute();  
}