«Контроллер должен вернуть ответ» при использовании аннотации @Template - PullRequest
0 голосов
/ 27 июня 2018

Использование Symfony Framework:

"sensio/framework-extra-bundle": "^5.1" + "symfony/framework-bundle": "^4.1" с конфигурацией по умолчанию.

Ошибка получения: The controller must return a response (Array() given).

Пример кода:

use Symfony\Component\Routing\Annotation\Route;
use Sensio\Bundle\FrameworkExtraBundle\Configuration\Template;
use Symfony\Bundle\FrameworkBundle\Controller\Controller;

/**
 * @Route("/")
 */
class IndexController extends Controller
{
    /**
     * @Route("", name="index")
     * @Template()
     */
    public function index()
    {
        return [];
    }
}

Я пытался добавить:

sensio_framework_extra:
   view:
      annotations: true

Но это не работает

У меня такой же пример проекта с "symfony/framework-bundle": "^4.0", и он работает правильно.

Ответы [ 2 ]

0 голосов
/ 27 июня 2018

Оказывается, я создал новый проект с нуля, но не использовал пакет symfony/website-skeleton, который обычно устанавливал бы все зависимости. Так что не только моя @Template аннотация не работала, но и то, что не работали шаблоны, потому что Twig не был установлен.

Я выполнил команду composer require twig-bundle, и она решила проблему.

0 голосов
/ 27 июня 2018

Ознакомьтесь с @ документацией по аннотациям шаблонов . В нем говорится:

Начиная с версии 4.0 пакета, аннотация @Template поддерживает только Twig (и только если не используется с компонентом Symfony Templating - запись templating не установлена ​​в framework настройки конфигурации).

Я полагаю, что вы используете компонент Symfony Templating, и в этом случае это не будет работать. Или у вас также может быть неправильный файл шаблона - он должен быть назван в честь контроллера и имени действия.

Более того, взгляните на Рекомендации Symfony по шаблонам , в котором рекомендуется хранить шаблоны в каталоге templates/ вашего корневого проекта, а не в папке Resources/views/ пакета. Это означает, что вы больше не ссылаетесь на шаблоны, такие как @App/Index/Index.html или используете магическую аннотацию @Template. Вместо этого вы бы явно вызвали свой шаблон из контроллера следующим образом:

/**
 * @Route("", name="index")
 */
public function index()
{
    return $this->render('index/index.html.twig');
}

Наконец, и это может показаться очевидным, но убедитесь, что в вашем проекте установлен Twig (composer require symfony/twig-bundle).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...