Украшение контроллера Symfony 4 FosUserBundle - PullRequest
0 голосов
/ 22 февраля 2019

Я украшаю базовый класс SecurityController из FosUserBundle с помощью:

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 или есть другой синтаксис, чтобы получить его внутри метода?

1 Ответ

0 голосов
/ 18 марта 2019

Конкретная ошибка означает, что параметр fos_user.template.engine не определен.

Этот параметр был определен в более старых версиях FOS_User, но не более, и он не нужен.Вы можете определить его в своих файлах конфигурации как twig, но лучше использовать подход, который используется текущим FOS_User.

Если вы проверите renderLogin() метод SecurityController ,класс, который вы декорируете, вы обнаружите, что это так:

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);
}
...