Symfony 4 FosUserBundle 控制器装饰
Symfony 4 FosUserBundle controller decoration
我正在用 FosUserBundle 装饰基础 class SecurityController:
namespace App\Controller;
use FOS\UserBundle\Controller\SecurityController as BaseController;
class SecurityController extends BaseController
{
public function renderLogin(array $data)
{
$template = sprintf('FOSUserBundle:Security:login.html.%s', $this->container->getParameter('fos_user.template.engine'));
. . .
在我的 Services.yaml:
App\Controller\SecurityController:
decorates: fos_user.security.controller
问题是我收到错误:
The parameter "fos_user.template.engine" must be defined.
与 renderLogin 方法中的行相关:
$template = sprintf('FOSUserBundle:Security:login.html.%s', $this->container->getParameter('fos_user.template.engine'));
我怎样才能得到这个缺失的参数?上面一行来自 Symfony2,现在我在 Symfony4 中使用它。
我应该注入 fos_user.template.engine
还是有另一种语法可以在方法中获取它?
具体错误是指fos_user.template.engine
参数没有定义
此参数在 FOS_User 的旧版本上定义,但不再定义,也不需要。您可以在配置文件中将其定义为 twig
,但最好使用当前 FOS_User
使用的方法。
如果你检查SecurityController的renderLogin()
方法,你正在装饰的class,你会发现它是这样的:
protected function renderLogin(array $data)
{
return $this->render('@FOSUser/Security/login.html.twig', $data);
}
将您的扩展方法基于此方法,您可以完全摆脱 $template = sprintf() ...
行。
例如:
protected function renderLogin(array $data) {
$data['foo'] = "bar";
// do whatever else you need to do
return parent::renderLogin($data);
}
我正在用 FosUserBundle 装饰基础 class SecurityController:
namespace App\Controller;
use FOS\UserBundle\Controller\SecurityController as BaseController;
class SecurityController extends BaseController
{
public function renderLogin(array $data)
{
$template = sprintf('FOSUserBundle:Security:login.html.%s', $this->container->getParameter('fos_user.template.engine'));
. . .
在我的 Services.yaml:
App\Controller\SecurityController:
decorates: fos_user.security.controller
问题是我收到错误:
The parameter "fos_user.template.engine" must be defined.
与 renderLogin 方法中的行相关:
$template = sprintf('FOSUserBundle:Security:login.html.%s', $this->container->getParameter('fos_user.template.engine'));
我怎样才能得到这个缺失的参数?上面一行来自 Symfony2,现在我在 Symfony4 中使用它。
我应该注入 fos_user.template.engine
还是有另一种语法可以在方法中获取它?
具体错误是指fos_user.template.engine
参数没有定义
此参数在 FOS_User 的旧版本上定义,但不再定义,也不需要。您可以在配置文件中将其定义为 twig
,但最好使用当前 FOS_User
使用的方法。
如果你检查SecurityController的renderLogin()
方法,你正在装饰的class,你会发现它是这样的:
protected function renderLogin(array $data)
{
return $this->render('@FOSUser/Security/login.html.twig', $data);
}
将您的扩展方法基于此方法,您可以完全摆脱 $template = sprintf() ...
行。
例如:
protected function renderLogin(array $data) {
$data['foo'] = "bar";
// do whatever else you need to do
return parent::renderLogin($data);
}