0

こんにちは!私はsymfony1.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ページではなく、他のページ、私がユーザーと言うことができる、なぜ彼は彼の広告の拡張バージョンを見ることができないのですか?または、広告の所有者が拡張バージョンを表示できる他の方法はありますか?ありがとうございました !

4

1 に答える 1

5

はい、可能です。

空のオブジェクトが返されるようにルートを変更します。

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

これで、アクションで、を呼び出すときに$this->getRoute()->getObject()、オブジェクトが見つからない場合は404になりません。その後、必要に応じて、この1つまたは複数のケースを処理できます。

于 2011-05-16T13:33:00.453 に答える