我想在twig中调用控制器的功能。我该怎么做
这是我的控制器
class ArticleController extends Controller
{
/**
* @Route("Article")
*/
public function indexAction()
{
.......................
return $this->render('MainBundle:Article:index.html.twig', array(
'lastArticleCategoryData' => $lastArticleCategoryData
));
}
public function datajalali()
{
$articles = "sss";
$v = new Verta(); //1396-02-02 15:32:08
$v = Verta::now();
return $v;
}
}
我的树枝
{% if Article.datajalali %}
{{ datajalali }}
{% endif %}
答案 0 :(得分:3)
通常,您无法直接在twig中调用PHP函数。
但是,你可以写一个Twig扩展名
http://symfony.com/doc/current/templating/twig_extension.html
在你的情况下它应该看起来像这样
// src/Twig/AppExtension.php
namespace App\Twig;
use Twig\Extension\AbstractExtension;
use Twig\TwigFilter;
class AppExtension extends AbstractExtension
{
public function datajalali()
{
$articles = "sss";
$v = new Verta(); //1396-02-02 15:32:08
$v = Verta::now();
return $v;
}
}
话虽如此,我想你可以做点像
{{ render(controller(
'AppBundle\\Controller\\ArticleController ::datajalali'
)) }}
但说实话,这对我来说似乎是不好的做法。我不完全确定它也能正常工作。
答案 1 :(得分:1)
尝试将datajalali
发送到模板,如下所示:
return $this->render('MainBundle:Article:index.html.twig', array(
'lastArticleCategoryData' => $lastArticleCategoryData,
'datajalali' => $this->datajalali(),
));
请参阅How to Embed Controllers in a Template
<强>更新强>
Andrew和Jonathan Jalouzot告诉你关于twig扩展,但这种方式对于symfony3和symfony4是不同的。在你的情况下它看起来像这样:
class AppExtension extends \Twig_Extension
{
public function getFunctions()
{
return array(new \Twig_Function('datajalali', array($this, 'datajalali')));
}
public function datajalali()
{
// Your logic here
}
}
并在模板中使用它:
{{ datajalali() }}
答案 2 :(得分:0)
您需要关注http://symfony.com/doc/current/templating/twig_extension.html
您需要创建扩展树枝。
namespace App\Twig;
use Twig\Extension\AbstractExtension;
use Twig\TwigFilter;
use Verta;
class AppExtension extends AbstractExtension
{
public function getFunctions()
{
return array(
new TwigFunction('datajalali', array($this, 'datajalali')),
);
}
public function datajalali()
{
$articles = "sss";
$v = new Verta(); //1396-02-02 15:32:08
$v = Verta::now();
return $v;
}
}
您需要在使用标记twig.extension
例如
//service.yml
App\Twig\AppExtension:
tags: ['twig.extension']
你可以在你的树枝模板中使用
//twig
{{ datajalali() }}