我已经完成了与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
。
答案 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';