Symfony, получи GET параметры в методе маршрута - PullRequest
4 голосов
/ 21 февраля 2011

Есть проблема.

Есть мой метод маршрута:

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", который может быть в URL, например, / API / книги? Date_from = 2011-02-18

Но в журнале я мог видеть только "sf_format => html" (или json) Что я должен использовать для получения дополнительного параметра "date_from"?

Ответы [ 2 ]

1 голос
/ 22 февраля 2011
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();  
}
1 голос
/ 21 февраля 2011

Вы можете получить свой параметр из объекта запроса:

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

UPDATE Лучшее решение, без sfContext :: getInstance ():

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

Укажите использование этого класса в routing.yml, и вы можете использовать этот параметр непосредственно в своем методе.

...