Domanda

Ciao!Io uso symfony 1.4.11. Negli utenti del mio progetto, sono disponibili sul sito solo quando il proprietario avrà un account premium. Il problema è che tutti gli annunci sono disponibili su collegamenti diretti ... quindi uso la decisione di questo problema dal Giorno 6 del Jobbet. Routing:

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)
.

Modello:

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

E tutti funziona bene, ma il prossimo problema, che se il proprietario dell'annuncio non ha pagato il premio, non riesce a vedere anche la versione estesa del suo annuncio, come tutti gli utenti ... è possibile reindirizzare l'utente non a 404, ma in un'altra pagina, dove posso dire l'utente, perché non riesce a vedere la versione estesa del suo annuncio?O c'è in altro modo che il proprietario dell'annuncio può vedere la versione estesa?Grazie!

È stato utile?

Soluzione

Sì, è possibile.

Modifica il percorso per consentire la restituzione degli oggetti vuoti:

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

Ora, nella tua azione, quando chiami $this->getRoute()->getObject(), non sarà 404 se un oggetto non viene trovato.È quindi possibile gestire questo caso (o casi), tuttavia lo desideri.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top