我有一项查找页面数据的服务,但如果找不到该数据,则应重定向到主页。对于我的一生,我不知道如何在 Sf2 中做到这一点。有很多不同的方法可以使用服务和路由器,但似乎都不起作用。
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);
}
}
在 Symfony2 中,服务不是为重定向而设计的。您应该尝试像这样更改您的服务:
namespace Acme\SomeBundle\Services;
use Acme\SomeBundle\Entity\Node;
use \Doctrine\ORM\EntityManager;
class NodeFinder
{
private $em;
public function __construct(EntityManager $em)
{
$this->em = $em;
}
public function getNode($slug)
{
$node = $this->em->getRepository('SomeBundle:Node')->findOneBy(array(
'slug' => $slug
));
return ($node) ? true : false;
}
}
然后在您的控制器中调用您的服务并进行重定向:
// in the controller file
$nodefinder = $this->container->get('your_node_finder_service_name');
if (!$nodefinder->getNode($slug)) {
$this->redirect('homepage');
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)