我实际上正在为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访问私有变量...
答案 0 :(得分:1)
似乎你只是想在另一个助手中使用助手
您可能希望使用另一个已存在的某些功能 帮手。为此,您可以指定要与a一起使用的帮助程序 $ helpers数组,格式化就像在控制器中一样:
所以在BsFormHelper
只做
public $helpers = ['Bs'];
你完成了