2011-05-16 140 views
0

嗨!我使用symfony 1.4.11。 在我的项目的所有用户广告中,只有当它的所有者拥有高级帐户时,才能在网站上使用。问题是所有广告都可以通过直接链接获得。因此,我从Jobbet第6天起使用此问题的决策。 路由:method_for_query,重定向到自定义页面

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页面,但是到了其他页面,我可以说用户,他为什么看不到他的广告的扩展版本?或者,广告的所有者是否有其他方式可以看到扩展版本?谢谢 !

回答

5

是的,这是可能的。

修改你的路线,以允许返回的空对象:现在

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

,在你的行动,当你调用$this->getRoute()->getObject(),也不会404如果没有找到对象。然后,您可以处理这种情况(或多种情况),无论您希望如何。

+0

谢谢!有用! – denys281 2011-05-17 21:28:43