2011-05-16 135 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