CakePHP 3 - 来自其他助手

时间:2016-05-11 08:53:27

标签: php twitter-bootstrap cakephp helpers non-member-functions

我实际上正在为CakePHP3做一个Helper,包括BsHelper,然后是BsFormHelper。

实际上一切看起来都不错,Bootstrap格式没问题。

我现在尝试创建一个ckEditor实例,但我遇到了一些问题。

如果我试着像这样打电话给我的ckEditor:

$this->BsForm->ckEditor('test')

我只是遇到了一些问题,因为函数ckEditor在我的BsFormHelper中,而load函数在BsHelper中。因此,当我尝试访问私有var以了解我是否必须加载ckEditor时,我遇到了这个问题:

  

错误:在非对象上调用成员函数load()   文件C:\ wamp3 \ www \ wac_lucien \ BsHelpersCakePHP3 \ 3.2 \ plugins \ BsHelpers \ src \ View \ Helper \ BsFormHelper.php

所以事实上我知道问题出在哪里:

在BsFormHelper中,我的功能如下:

public function ckEditor($fieldName, $options = array(), $ckEditorOptions = array()) {
    $options['type'] = 'textarea';

    $out = $this->input($fieldName, $options);

    // If there is a point in the fieldName
    if (strpos($fieldName, '.') !== false) {
        $nameForReplace = Inflector::camelize(Inflector::slug($fieldName));
    } else {
        $nameForReplace = $this->_modelForm . Inflector::camelize($fieldName);
    }

    $this->Bs->load('ckeditor');

    $this->Bs->loadJS('CKEDITOR.replace("' . $nameForReplace . '", ' . json_encode($ckEditorOptions) . ');', true);
    return $out;
}

在我的BsHelper中,我得到了:

public function load($key) {
    if (!$this->__extensions[$key]['loaded']) {
        foreach ($this->__extensions[$key]['css'] as $css) {
            $this->loadCSS($css);
        }
        foreach ($this->__extensions[$key]['js'] as $js) {
            $this->loadJS($js);
        }
        $this->__extensions[$key]['loaded'] = true;
    }

    return $this->__extensions[$key]['loaded'];
}

值在这样的声明中

public $__extensions = array(
    'jasny' => array(
        'css' => array(
            '//cdnjs.cloudflare.com/ajax/libs/jasny-bootstrap/3.1.3/css/jasny-bootstrap.min.css'
        ),
        'js' => array(
            '//cdnjs.cloudflare.com/ajax/libs/jasny-bootstrap/3.1.3/js/jasny-bootstrap.min.js'
        ),
        'loaded' => true
    ),
    'ckeditor' => array(
        'css' => array(),
        'js' => array(
            '//cdn.ckeditor.com/4.5.8/standard/ckeditor.js'
        ),
        'loaded' => true
    )
);

有人能帮助我找出答案吗?看起来在BsFormHelper中调用的加载函数无法从BsHelper访问私有变量...

1 个答案:

答案 0 :(得分:1)

似乎你只是想在另一个助手中使用助手

manual

  

您可能希望使用另一个已存在的某些功能   帮手。为此,您可以指定要与a一起使用的帮助程序   $ helpers数组,格式化就像在控制器中一样:

所以在BsFormHelper只做

public $helpers = ['Bs'];

你完成了