gpt4 book ai didi

symfony - 服务中的重定向 - symfony2

转载 作者:行者123 更新时间:2023-12-02 04:49:57 25 4
gpt4 key购买 nike

我可以重定向到服务中的另一个 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com