使用带有TwigView插件的CakePHP助手不起作用

时间:2014-01-15 19:12:59

标签: twig helper template-engine cakephp-2.4

我已在我的CakePHP应用程序中安装了TwigView,并且我尝试在名为header.twig.tpl的默认模板中加载元素footer.twig.tpldefault.twig.tpl

它适用于此:

<!DOCTYPE html>
<html>
<head>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">

    <title>Hello world!</title>

</head>
<body>
{% element 'header.twig' %}

    {{ test_var_from_controller }} <!-- this works and echoes "Hello world!" as expected -->

{% element 'footer.twig' %}
</body>
</html>

当我尝试使用CakePHP默认Helpers时,问题就会出现,它们会被忽略。

我不确定为什么,如果我尝试:

<!DOCTYPE html>
<html>
<head>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">

    <title>Hello world!</title>
    {{ html.css('styes.min') }}
</head>

该方法被忽略而没有抛出错误,并且页面仍然像以前一样工作。

我已经跟踪了所有 TwigView explanation ,但它仍然无效,我失踪了什么?

我也尝试使用Twig功能,但由于某些原因它们似乎没有加载:

{{ 'FOO'|low }}

引发错误:

Fatal error: Call to undefined function low() in .../app/Plugin/TwigView/tmp/views/2d/4b/65accc...92.php on line 45

2 个答案:

答案 0 :(得分:1)

我发现了问题,我需要首先在AppController中加载Helpers

class AppController extends Controller {
    public $viewClass = 'TwigView.Twig';
    public $ext = '.twig.tpl';
    public $helpers = array('Html', 'Form');
}

答案 1 :(得分:0)

在CakePHP 3中,如果您使用的是WyriHaximus插件,可以将它放在src / View / AppView.php中

namespace App\View;
use WyriHaximus\TwigView\View\TwigView;

/**
 * Application View
 */
class AppView extends TwigView
{
  /**
   * Initialization hook method.
   * Use this method to add common initialization code like loading helpers.
   * e.g. `$this->loadHelper('Html');`
   * @return void
   */
  public function initialize()
  {
    parent::initialize();
    $this->loadHelper('Html');
    $this->loadHelper('Flash');
    $this->loadHelper('Url');
    ...
  }
}