method_for_query, перенаправить на пользовательскую страницу

StackOverflow https://stackoverflow.com/questions/6017824

  •  14-11-2019
  •  | 
  •  

Вопрос

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

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 страницы, но на другую страницу, где я могу сказать пользователя, почему он не видит расширенную версию своего объявления?Или есть ли другой способ, которым владелец объявления может видеть расширенную версию?Спасибо!

Это было полезно?

Решение

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

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

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top