重定向服务-symfony2

阿卜杜勒5

我可以重定向到服务中的另一个控制器吗?

我已经基于@Artamiel提供的示例实现了一项服务

我的控制器执行的功能代码如下所示:

 public function verifyanddispatch() {
        $session = $this->request->getSession();
        if(!$session->get("App_Books_Chosen_Lp")) return new RedirectResponse($this->router->generate('app_listbooks'));
    }

我已经检查过,!$session->get("App_Books_Chosen_Lp")是真的。但是,我没有重定向到app_listbooks控制器。

我认为这是因为我不直接在控制器而不是在服务中返回重定向响应。

BentCoder

我不知道您如何定义服务,但是下面的示例很好用。假设您正在从控制器中调用服务。

services.yml

services:
    application_backend.service.user:
        class: Application\BackendBundle\Service\UserService
        arguments:
            - @router

服务等级

namespace Application\BackendBundle\Service;

use Symfony\Component\HttpFoundation\RedirectResponse;
use Symfony\Component\Routing\RouterInterface;

class UserService
{
    private $router;

    public function __construct(
        RouterInterface $router
    ) {
        $this->router = $router;
    }

    public function create()
    {
        $user = new User();
        $user->setUsername('hello');
        $this->entityManager->persist($user);
        $this->entityManager->flush();

        return new RedirectResponse($this->router->generate('application_frontend_default_index'));
    }
}

控制者

public function createAction(Request $request)
{
    //.........

    return $this->userService->create();
}

更新


尽管上面的原始答案回答了原始问题,但这不是最佳实践,因此,如果您想要更好的方法,请执行以下操作。首先,请勿@router投入使用,并进行以下更改。

// Service
public function create()
{
    .....
    $user = new User();
    $user->setUsername('hello');
    $this->entityManager->persist($user);
    $this->entityManager->flush();
    .....
}

// Controller
public function createAction(Request $request)
{
    try {
        $this->userService->create();

        return new RedirectResponse($this->router->generate(........);
    } catch (......) {
        throw new BadRequestHttpException(.....);    
    }
}

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章