symfony - 服务中的重定向 - symfony2

标签 symfony

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

我已经根据 @Artamiel 提供的示例实现了一项服务.

我的由 Controller 执行的函数代码如下所示:

 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 Controller 。

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

最佳答案

我不知道您如何定义您的服务,但下面的示例工作正常。假设您从 Controller 调用服务。

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'));
    }
}

Controller

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

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

更新

<小时/>

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

// 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(.....);    
    }
}

关于symfony - 服务中的重定向 - symfony2,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31104002/

相关文章:

Twig 中的 Symfony2 安全功能?如何查看用户的角色?

symfony - 使用 SonataAdminBundle 表单中的 Sonata_type_collection 禁用 'add'

php - symfony 4 多种形式循环 Twig 提交

php - Symfony 2 中的集合主题,每个级别的嵌套形式都不同

symfony2 : How to add validation rules to username?

javascript - Jquery 工具提示验证文件

php - Symfony2 - 在 PHP 模板中使用 CSS 资源

php - 如何在 symfony2 中设置创建和更新日期?

php - 在编译器传递中使用服务时类不存在

symfony - 如何在 Symfony2 中使用 Twig 制作 3 列表格