Weiterleitung von einer Service-in Symfony2
Ich habe einen Dienst, der sieht, mit dem die Daten für eine Seite, aber wenn die Daten nicht gefunden werden, sollte eine Weiterleitung auf die homepage. Für das Leben von mir, ich kann nicht herausfinden, wie dies zu tun in Sf2. Es gibt so viele verschiedene Möglichkeiten zum arbeiten mit Dienstleistungen und router, aber keiner scheint zu funktionieren.
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);
}
}
Du musst angemeldet sein, um einen Kommentar abzugeben.
In Symfony2, services sind nicht für Umleitungen. Sie sollten versuchen, ändern Sie Ihren service so :
dann in Sie-controller, den Sie rufen Sie Ihren service und stellen die Umleitung :
if user is not logged in, redirect to login page
wirklich? Ich Dupliziere das 100 mal? bad bad badkönnten Sie dies tun, in Ihren Dienst ( das schreiben aus meinem Kopf)
Dies ist zwar nicht perfekt, es ist sicherlich viel besser als das, was sllly versuche zu tun,
Injizieren die router service in Ihren Dienst. Als Sie zurückkehren können, eine neue RedirectResponse. Schauen hier.
Vom Symfony-Sicht können Sie erstellen, die einen controller als service und so machen die Umleitung von diesem service.
Die syntax ist :
Weitere Infos finden Sie hier : http://symfony.com/doc/current/cookbook/controller/service.html#alternatives-to-base-controller-methods