Symfony找不到模板文件

时间:2015-02-19 11:14:26

标签: php 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 

上下文:{“exception”:“Object(InvalidArgumentException)”}

我知道这不是什么花哨的东西,但我不知道如何解决这个问题。

我的观看文件位于以下路径:./src/MyBundle/FrontBundle/Resources/views/Hello/buy.html.twig

3 个答案:

答案 0 :(得分:7)

您需要使用以下语法进行渲染:

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

或使用此语法

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

一个例子:

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

可在documentation上找到更多信息,同时参考symfonys best practices模板应存储在app/Ressources/views

答案 1 :(得分:0)

在" app / config / config.yml"一定要有这个:

framework:
# ...
templating:
  engines: ['twig']

答案 2 :(得分:0)

就我而言,问题确实与特定版本的Symfony有关。 我的项目曾经与Symfony 2.8.19一起运行。我试图将其迁移到另一个Linux  evironment(使用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';

但是问题出在大写的默认上,因为实际路径中没有大写的默认

因此将其更改为以下内容可以解决新环境中的问题:

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