7

ページのデータを検索するサービスがありますが、そのデータが見つからない場合は、ホームページにリダイレクトする必要があります。私の人生では、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);
        }
}
4

4 に答える 4

5

あなたはあなたのサービスでこれを行うことができます(私の頭から書き出す)

class MyException extends \Exception
{
    /**
     * @var \Symfony\Component\HttpFoundation\RedirectResponse
     */
    public $redirectResponse;
}

class MyService 
{    
    public function doStuff() 
    {
        if ($errorSituation) {
            $me = new MyException()
            $me->redirectResponse = $this->redirect($this->generateUrl('loginpage'));
            throw $me;
         }
    }
}

class MyController extends Controller
{
    public function doAction()
    {
        try {
            // call MyService here
        } catch (MyException $e) {
            return $e->redirectResponse;
        }
    }
}

これは完璧ではありませんが、sllly がやろうとしていたことよりもはるかに優れていることは確かです

于 2014-06-09T22:33:55.340 に答える
2

サービスにルーターサービスを挿入します。新しい RedirectResponseを返すことができます。ここを見てください。

于 2016-02-22T10:31:27.720 に答える
1

Symfony の観点からは、コントローラーをサービスとして作成し、このサービスからリダイレクトを行うことができます。構文は次のとおりです。

use Symfony\Component\HttpFoundation\RedirectResponse;

return new RedirectResponse($url, $status);

詳細はこちら: http://symfony.com/doc/current/cookbook/controller/service.html#alternatives-to-base-controller-methods

于 2016-01-18T18:41:03.613 に答える