你好!我使用 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 页面,我可以在其中告诉用户,为什么他看不到其广告的扩展版本?或者广告所有者是否可以通过其他方式查看扩展版本?谢谢 !

有帮助吗?

解决方案

是的,这是可能的。

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

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

现在,在你的行动中,当你打电话时 $this->getRoute()->getObject(), ,如果没有找到对象,则不会出现 404 错误。然后您可以按照您的意愿处理这个(或多个)案例。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top