0

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

实际上一切看起来都很好,Bootstrap 格式没有问题。

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

如果我尝试像这样调用我的 ckEditor :

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

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

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

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

在 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 访问私有变量 ...

4

1 回答 1

1

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

手册说_

您可能希望使用另一个助手中已经存在的一些功能。为此,您可以指定希望与 $helpers 数组一起使用的助手,其格式与在控制器中的格式一样:

所以在你BsFormHelper刚刚做的

public $helpers = ['Bs'];

你完成了

于 2016-05-11T09:26:41.857 回答