实际上,我正在为CakePHP3编写一个帮助程序,其中包括BsHelper和BsFormHelper。
实际上,一切看起来都很好,没有问题的引导格式。
我现在尝试创建一个ckEditor实例,但遇到了一些问题。
如果我尝试像这样调用我的ckEditor:
$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中,我的字体如下所示:
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中调用的load函数似乎无法访问来自BsHelper的私有vars。
发布于 2016-05-11 09:26:41
似乎你只是想在另一个帮手中使用一个帮手
手册说
您可能希望使用另一个助手中已经存在的一些功能。为此,您可以指定希望与$helpers数组一起使用的帮助程序,格式与控制器中的格式相同:
所以在你的BsFormHelper里
public $helpers = ['Bs'];你就完蛋了
https://stackoverflow.com/questions/37157563
复制相似问题