首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >CakePHP 3-从其他助手调用对象

CakePHP 3-从其他助手调用对象
EN

Stack Overflow用户
提问于 2016-05-11 08:53:27
回答 1查看 760关注 0票数 0

实际上,我正在为CakePHP3编写一个帮助程序,其中包括BsHelper和BsFormHelper。

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

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

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

代码语言:javascript
复制
$this->BsForm->ckEditor('test')

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

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

事实上,我知道问题在哪里:

在BsFormHelper中,我的字体如下所示:

代码语言:javascript
复制
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里我得到了:

代码语言:javascript
复制
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'];
}

值在如下的声明中

代码语言:javascript
复制
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中调用的load函数似乎无法访问来自BsHelper的私有vars。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-05-11 09:26:41

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

手册

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

所以在你的BsFormHelper

代码语言:javascript
复制
public $helpers = ['Bs'];

你就完蛋了

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/37157563

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档