如何使用HTML Helper或在Cell中调用initialize()?

时间:2015-08-12 02:50:43

标签: php cakephp cakephp-3.0

如何/我可以在Cell CakePHP 3.0中使用HTML Helper / initialize()吗?

/src/View/Cell/NavCell.php

namespace App\View\Cell;

use Cake\View\Cell;
use Cake\ORM\TableRegistry;
use Cake\View\Helper\HtmlHelper;

class NavCell extends Cell
{
    public function initialize() {
        parent::initialize();
        $this->loadHelper('Html');  
    }

    public function display() {
    }
}

/src/Template/Cell/Nav/display.ctp

<?php $this->Html->script('script', ['block' => 'scriptBottom']); ?>

1 个答案:

答案 0 :(得分:3)

单元格既没有initialize()也没有loadHelper()方法,您只能将代码放在一起并希望它能正常工作。请务必先查看Cookbook和API文档,如有必要,请查看源代码。

Cells提供$helpers属性,您可以在其中定义要使用/加载的帮助程序。

<强> API > \Cake\View\Cell::$helpers

class NavCell extends Cell
{
    public $helpers = [
        'Html'
    ];

    // ...
}

然而,如果您不想应用任何配置,这甚至是不必要的,因为当访问不存在的属性时,视图会延迟加载可能的帮助程序,

即在单元格中使用$this->Html->script()可以开箱即用。

还应该注意的是,正如API文档中提到的(虽然不过详细),$helpers是使用{的类的相应属性值提供的属性之一。 {1}},即为视图设置的帮助程序配置(其中依次来自相应的控制器)正在调用\Cake\View\CellTrait的单元格。

tl; dr - 您无法定义/访问单元格范围之外的块

但是,单元格使用单独的视图类实例,因此您在单元格中定义/访问的块不会影响其他模板(例如布局)使用的视图!