Question

SALUT! J'utilise Symfony 1.4.11. Dans la publicité de mon projet, tous les utilisateurs, sont disponibles sur le site uniquement lorsque le propriétaire aura un compte premium. Le problème est que toutes les annonces sont disponibles sur des liens directs ... donc j'utilise la décision de ce problème du jour 6 de Jobbet. Routage:

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)

Modèle:

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();
  }

Et tout fonctionne bien, mais le prochain problème, que si le propriétaire de l'annonce n'a pas payé pour la prime, il ne peut pas voir la version étendue de son annonce aussi, comme tous les utilisateurs ... est-il possible de rediriger l'utilisateur non pas vers 404 pages, mais pour Autre page, où je peux dire l'utilisateur, pourquoi il ne peut pas voir la version étendue de son annonce? Ou y a-t-il une autre manière que le propriétaire de l'annonce peut voir une version étendue? Merci !

Était-ce utile?

La solution

Oui c'est possible.

Modifiez votre itinéraire pour permettre le retour d'objets vides:

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

Maintenant, dans votre action, quand vous appelez $this->getRoute()->getObject(), ce ne sera pas 404 si un objet n'est pas trouvé. Vous pouvez ensuite gérer ce cas (ou cas), comme vous le souhaitez.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top