Pregunta

¡HOLA!Yo uso Symfony 1.4.11.En los anuncios para todos los usuarios de mi proyecto, están disponibles en el sitio solo cuando el propietario tiene una cuenta premium. El problema es que todos los anuncios están disponibles en enlaces directos... Así que tomo la decisión de este problema desde el día 6 de Jobbet.Enrutamiento:

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)

Modelo:

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

Y todo funciona bien, pero el siguiente problema es que si el propietario del anuncio no ha pagado la suscripción premium, tampoco puede ver la versión extendida de su anuncio, como todos los usuarios...¿Es posible redirigir al usuario no a la página 404, sino a otra página, donde puedo decirle al usuario por qué no puede ver la versión extendida de su anuncio?¿O hay otra forma en que el propietario del anuncio pueda ver la versión extendida?Gracias !

¿Fue útil?

Solución

Si es posible.

Modifique su ruta para permitir que se devuelvan objetos vacíos:

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

Ahora, en tu acción, cuando llamas $this->getRoute()->getObject(), no será 404 si no se encuentra un objeto.Luego podrá manejar este caso (o casos), como desee.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top