我不知道你是怎麼定義你的服務,但是下面的示例工作正常。假設你正在從你的控制器調用服務。
services.yml
services:
application_backend.service.user:
class: Application\BackendBundle\Service\UserService
arguments:
- @router
Service類
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();
}
UPDATE
雖然原來的答案上面的答案原來的問題,這是不是最好的做法,如果你想有一個更好的辦法,以便執行以下操作。首先不要將@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(.....);
}
}
謝謝,我沒有在控制器中執行「返回」。 – Abdel5
控制器A調用服務。服務返回'RedirectResponse'返回到控制器A.控制器A返回'RedirectResponse'作爲結果,這觸發了實際重定向到控制器B.上面的示例以這種方式工作。 – BentCoder
有人很勇敢地回答了這個問題,但並不足以解釋爲什麼我們都可以知道它出了什麼問題! – BentCoder