2011-05-16 4 views
0

안녕하세요! 심포니 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

관련 문제