method_for_query,重定向到自定义页面

时间:2011-05-16 13:02:45

标签: symfony1 symfony-1.4 jobeet

HI!我使用symfony 1.4.11。 在我的项目的所有用户广告中,仅当网站所有者拥有高级帐户时才可在网站上使用。问题是所有广告都可以在直接链接上使用...所以我从Jobbet的第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页面,但到其他页面,我可以说用户,为什么他看不到他的广告的扩展版本?或者广告所有者是否可以通过其他方式查看扩展版本?谢谢!

1 个答案:

答案 0 :(得分:5)

是的,这是可能的。

修改路线以允许返回空对象:

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

现在,在您的操作中,当您致电$this->getRoute()->getObject()时,如果找不到对象,则不会404。然后,您可以根据需要处理此案例(或案例)。