首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Symfony 4 FosUserBundle控制器装饰

Symfony 4 FosUserBundle控制器装饰
EN

Stack Overflow用户
提问于 2019-02-22 20:08:58
回答 1查看 231关注 0票数 2

我用以下命令装饰来自FosUserBundle的基类SecurityController:

代码语言:javascript
复制
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中:

代码语言:javascript
复制
App\Controller\SecurityController:
    decorates: fos_user.security.controller

问题是我收到以下错误:

代码语言:javascript
复制
The parameter "fos_user.template.engine" must be defined.

与renderLogin方法中的行相关:

代码语言:javascript
复制
$template = sprintf('FOSUserBundle:Security:login.html.%s', $this->container->getParameter('fos_user.template.engine'));

我怎样才能得到这个缺失的参数?上面这行代码来自Symfony2,现在我在Symfony4中使用它。

我应该注入fos_user.template.engine,还是有另一种语法可以将其放入方法中?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-03-18 18:31:20

该特定错误表示未定义fos_user.template.engine参数。

这个参数是在旧版本的FOS_User上定义的,但没有更多版本了,而且也不需要它。您可以在配置文件中将其定义为twig,但最好使用当前FOS_User使用的方法。

如果你检查SecurityControllerrenderLogin()方法,你会发现它是这样的:

代码语言:javascript
复制
protected function renderLogin(array $data)
{
    return $this->render('@FOSUser/Security/login.html.twig', $data);
}

将您的扩展方法建立在此基础上,就可以完全摆脱$template = sprintf() ...行。

例如:

代码语言:javascript
复制
protected function renderLogin(array $data) {
    $data['foo'] = "bar";
    // do whatever else you need to do

    return parent::renderLogin($data);
}
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/54826825

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档