我试图在我的服务类中创建一个函数来渲染一个twig页面。我试过这样做: 的 service.yml:
********
parameters:
error.class: AppBundle\Utils\Error
services:
app.error:
class: '%error.class%'
arguments: [@templating]
Error.php(服务类):
****
class Error
{
public function __construct($templating)
{
$this->templating = $templating;
}
public function redirectToError($condition,$message)
{
if($condition){
return $this->templating->render('default/error.html.twig',array(
'error_message' => $message,
));
}
}
}
和 error.html.twig 有一些随机文字,看它是否到达那里。
之后我从浏览器得到了这个答案:
有人可以告诉我这是什么问题吗?
答案 0 :(得分:4)
在语法方面,YAML可能有点不确定,请确保使用所有空格(无标签字符)。并确保每个缩进都是相同数量的空格字符。如果您喜欢4宽,请像每个级别的2/4/6/8或4/8/12等。
您发布的代码应该没问题,但它可能是如上所述的愚蠢行为。如果它实际上是文件中的错误部分/参数,symfony应该告诉你什么是意外的,因为它实际上验证了其内容上的YAML文件。
Allright所以['@templating']
处理YAML解析错误,下一部分是如何使用服务。这是使用service container完成的。
在控制器中有一个别名,您可以执行以下操作:
// required at the top to use the response class we use to return
use Symfony\Component\HttpFoundation\Response;
// in the action we use the service container alias
// short for $this->container->get('app.error');
$content = $this->get('app.error')->redirectToError(true, 'Hello world');
// as your redirectToError function returns a templating->render, which only returns a
// string containing the the rendered template, however symfony
// requires a Response class as its return argument.
// so we create a response object and add the content to it using its constructor
return new Response($content);
一些小事:
$condition
,可能会改变,如果不是它似乎不应该在函数中而是在函数调用周围,因为调用redirectToError似乎很奇怪但是没有错误,而是我们只是调用它当我们确实有错误时。
如果你要设置一个类变量来定义它(details on visibility):
,建议使用它class Error {
// visibility public, private, protected
protected $templating;
答案 1 :(得分:0)
您应该将'
放在@templating
services:
app.error:
class: AppBundle\Utils\Error
arguments: ['@templating']