Redirection à partir d'un Service dans Symfony2
J'ai un service qui ressemble à des données pour une page, mais si cette donnée n'est pas trouvé, doit rediriger vers la page d'accueil. Pour la vie de moi, je ne peux pas comprendre comment le faire dans Sf2. Il y a tellement de manières différentes de travailler avec les services et le routeur, mais aucune ne semble fonctionner.
namespace Acme\SomeBundle\Services;
use Acme\SomeBundle\Entity\Node;
use \Doctrine\ORM\EntityManager;
use \Symfony\Component\HttpKernel\Event\GetResponseEvent;
use \Symfony\Component\HttpKernel\Exception\NotFoundHttpException;
use \Symfony\Bundle\FrameworkBundle\Routing\Router;
use \Symfony\Component\Routing\Generator\UrlGenerator;
use Symfony\Component\HttpFoundation\RedirectResponse;
class NodeFinder
{
private $em;
private $router;
public function __construct(EntityManager $em, Router $router)
{
$this->em = $em;
$this->router = $router;
}
public function getNode($slug)
{
$node = $this->em->getRepository('SomeBundle:Node')->findOneBy(array('slug' => $slug));
if (!$node) { //if no node found
return $this->router->redirect('homepage', array(), true);
}
}
OriginalL'auteur Acyra | 2012-05-16
Vous devez vous connecter pour publier un commentaire.
Dans Symfony2, les services ne sont pas faits pour les redirections. Vous devriez essayer de changer votre service comme ça :
dans vous de contrôleur de vous appeler votre service et à faire la redirection :
Sllly est de droit, vous devez faire les redirections dans votre contrôleur, pas dans votre service.
parce que? J'ai de nombreuses fois
if user is not logged in, redirect to login page
vraiment? - Je répéter 100 fois? bad badOriginalL'auteur sllly
vous pourriez faire dans votre service ( rédaction de ma tête)
Bien que ce n'est pas parfait, il est certainement beaucoup mieux que ce que sllly était en train de faire
OriginalL'auteur Toskan
Injecter le routeur service dans votre service. Que vous pouvez revenir à une nouveau RedirectResponse. Regarder ici.
OriginalL'auteur Fabian Picone
De Symfony point de vue, vous pouvez créer un contrôleur comme un service, et ainsi de faire de la redirection de ce service.
La syntaxe est la suivante :
Plus d'informations peuvent être trouvées ici : http://symfony.com/doc/current/cookbook/controller/service.html#alternatives-to-base-controller-methods
OriginalL'auteur Tsounabe