method_for_query, перенаправить на пользовательскую страницу - PullRequest
0 голосов
/ 16 мая 2011

HI!Я использую Symfony 1.4.11.В моем проекте объявления всех пользователей доступны на сайте только тогда, когда у его владельца будет премиум-аккаунт. Проблема в том, что все объявления доступны по прямым ссылкам ... Поэтому я использую решение этой проблемы с 6-го дня Jobbet.Маршрутизация:

ads_show_user:
  url:     /:sf_culture/ads/:slug
  class:   sfDoctrineRoute
  options: { model: Ads, type: object,  method_for_query: retrievePayAd }
  param:   { module: ads, action: show }
  requirements:
    sf_method: [get]
    sf_culture: (?:de|en|ru)

Модель:

public function retrievePayAd(Doctrine_Query $q)
  {
    $q ->leftJoin('a.Owner o')
      ->leftJoin('o.Profile p')
      ->andWhere('p.payed_until > NOW()')
      ->andWhere('a.active = ?',1)
      ->andWhere('a.expires_at > NOW()');

    return $q->fetchOne();
  }

И все отлично работает, но следующая проблема, что если владелец объявления не платит премию, он не может видеть расширенную версию своегообъявление тоже, как и все пользователи ... Можно ли перенаправить пользователя не на страницу 404, а на другую страницу, где я могу сказать пользователю, почему он не видит расширенную версию своего объявления?Или есть другой способ, которым владелец объявления может видеть расширенную версию?Спасибо!

1 Ответ

5 голосов
/ 16 мая 2011

Да, это возможно.

Измените маршрут, чтобы разрешить возврат пустых объектов:

ads_show_user:
  ...
  options: { allow_empty: true ... }

Теперь, когда вы вызываете $this->getRoute()->getObject(), в вашем действии он не будет404, если объект не найден.Затем вы можете обработать этот случай (или случаи), как пожелаете.

...