Как передать объект запроса методу, определенному в generator.yml с помощью table_method

#symfony1 #symfony-1.4

#symfony1 #symfony-1.4

Вопрос:

Как я могу передать объект запроса методу doJoin, который настроен в generator.yml?

generator.yml:

 generator:
  param:
    config:
      list:      
        table_method: doJoin
 

ItemTable.class.php:

 public static function doJoin(Doctrine_Query $q)
{
    $rootAlias = $q->getRootAlias($q);

    return $q->select($rootAlias.'.*, p.currency_code, p.customer_price')
        ->innerJoin($rootAlias.'.Price p')
        ->where('p.currency_code = 'USD'');

}
 

Ответ №1:

Вы можете переопределить метод buildQuery() в actions.class.php чтобы принять параметр запроса ...->$table_method($query, $this->getRequest() :

 protected function buildQuery()
{
  $tableMethod = $this->configuration->getTableMethod();
    $query = Doctrine::getTable('CLASS_NAME')
    ->createQuery('a');

  if ($tableMethod)
  {
    $query = Doctrine::getTable('CLASS_NAME')->$table_method($query, $this->getRequest());
  }

  $this->addSortQuery($query);

  $event = $this->dispatcher->filter(new sfEvent($this, 'admin.build_query'), $query);
  $query = $event->getReturnValue();

  return $query;
}
 

Затем вы меняете ItemTable.class.php :

 public static function doJoin(Doctrine_Query $q, sfWebRequest $request)
 

Комментарии:

1. Ошибка: не удалось найти класс CLASS_NAME

2. я думаю, вам нужно изменить CLASS_NAME реальное имя вашего класса Item .

Ответ №2:

Вы можете использовать:

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

Комментарии:

1. хм … он возвращает null: sfContext::getInstance()->GetRequest()->getParameter(‘main_item.filters’). Как вы видите, я пытаюсь получить значение из filter .