Symfony не может найти файл шаблона

Я выполнил все шаги, связанные с установкой Symfony, и пробую примеры из книги Symfony (предоставленной веб-сайтом Symfony). В настоящее время я нахожусь в главе «Контроллеры» (5), и я пробую следующий код:

namespace MyBundle\FrontBundle\Controller;

use Symfony\Bundle\FrameworkBundle\Controller\Controller;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\Response;

class HelloController extends Controller
{
    public function indexAction($name, Request $request)
    {
        return $this->redirect($this->generateUrl('front_buy'), 301);
    }

    public function buyAction(Request $request)
    {
        return $this->render(
            'Hello/buy.html.twig',
            array(
                'name' => 'Nikos'
            )
        );
    }
}

но я получаю следующую ошибку:

INFO - Matched route "front_buy" (parameters: "_controller": "MyBundle\FrontBundle\Controller\HelloController::buyAction", "_route": "front_buy")
CRITICAL - Uncaught PHP Exception InvalidArgumentException: "Unable to find template "Hello/buy.html.twig"." at /var/www/projects/symfony/vendor/symfony/symfony/src/Symfony/Bridge/Twig/TwigEngine.php line 128 

Контекст: {"исключение":"Объект(InvalidArgumentException)"}

Я знаю, что это не что-то необычное, но я не знаю, как решить проблему.

Мой файл просмотра находится по следующему пути: ./src/MyBundle/FrontBundle/Resources/views/Hello/buy.html.twig.


person KodeFor.Me    schedule 19.02.2015    source источник


Ответы (3)


Вам нужно отобразить его со следующим синтаксисом:

$this->render('AcmeBlogBundle:Blog:index.html.twig')

или с этим синтаксисом

$this->render('@BlogBundle/Blog/index.html.twig')

Пример:

$this->render('@FrontBundle/Hello/buy.html.twig) 

Дополнительную информацию можно найти в документации, также ссылаясь на лучшие практики шаблонов symfonys, которые должны храниться в app/Ressources/views

person KhorneHoly    schedule 19.02.2015
comment
Я только что использовал return $this->render('@MyBundleFrontBundle/Hello/buy.html.twig', array('name' => 'Nikos' ) ); и не работал, я попробую и вторую форму, и я вернусь снова. - person KodeFor.Me; 19.02.2015
comment
Попробуйте return $this->render('@FrontBundle/Hello/buy.html.twig) - person chapay; 19.02.2015
comment
Я также пробую вторую форму, которая выглядит следующим образом: return $this->render('WPLionFrontBundle:Hello:buy.html.twig', array('name' => 'Nikos'));, и я получаю следующую ошибку: CRITICAL - Uncaught PHP Exception InvalidArgumentException: "Unable to find template "WPLionFrontBundle:Hello:buy.html.twig"." at /var/www/projects/symfony/vendor/symfony/symfony/src/Symfony/Bridge/Twig/TwigEngine.php line 128 - person KodeFor.Me; 19.02.2015
comment
Документация по шаблонам: symfony.com/doc/ current/book/ Также вы можете поместить свой шаблон в каталог app/Resources/views. - person chapay; 19.02.2015
comment
@Andreysobkanyuk ты прав, там опечатка, сейчас исправлю - person KhorneHoly; 19.02.2015
comment
Без проблем. Пожалуйста, прикрепите ссылку на документацию и, возможно, также на Symfony Best Practices в качестве app/Resources/views каталога. есть рекомендуемый каталог. - person chapay; 19.02.2015

в "app/config/config.yml" обязательно есть это:

framework:
# ...
templating:
  engines: ['twig']
person Pasi-D    schedule 15.05.2018

В моем случае проблема действительно была связана с конкретной версией Symfony. Мой проект запускался с Symfony 2.8.19. Я попытался перенести его на другую среду Linux (используя symfony2.8.42), а затем получил ту же самую ошибку с тем же кодом (очень странным).

Я пробовал решения, упомянутые ранее, и ни одно из них не работало так, как использование: $this->render('@BlogBundle/Blog/index.html.twig') или $this->render('AcmeBlogBundle:Blog:index.html.twig').

После нескольких попыток я нашел проблему. Фактически, в моей старой среде у меня было:

return $this->render('XxxxxBundle:Default:zzzz.html.twig';

Но проблема была с заглавными буквами Default, потому что реальный путь был с default без заглавных букв.

поэтому изменение его на следующее устранило проблему в моей новой среде:

return $this->render('XxxxxBundle:default:zzzz.html.twig';

person Bourados    schedule 18.07.2018