有问题。
有我的路线方法:
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”?
答案 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();
}