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