我可以重定向到服务中的另一个控制器吗?
我已经基于@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
控制器。
我认为这是因为我不直接在控制器而不是在服务中返回重定向响应。
我不知道您如何定义服务,但是下面的示例很好用。假设您正在从控制器中调用服务。
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] 删除。
我来说两句