metodo_for_query, reindirizzamento alla pagina personalizzata
-
14-11-2019 - |
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!
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.