CakePHP 3 — вызвать объект от другого помощника

На самом деле я работаю над помощником для CakePHP3, который включает BsHelper, а затем BsFormHelper.

На самом деле все выглядит хорошо, нет проблем с форматами Bootstrap.

Сейчас я пытаюсь создать экземпляр ckEditor, но у меня возникло несколько проблем.

Если я попытаюсь вызвать мой ckEditor так:

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

У меня просто есть некоторые проблемы, потому что функция ckEditor находится в моем BsFormHelper, а функция загрузки находится в 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

Решение

кажется, вы просто пытаетесь использовать помощника в другом помощнике

руководство говорит

Вы можете использовать некоторые функции, уже существующие в другом
помощник. Для этого вы можете указать помощников, которых вы хотите использовать с
Массив $ helpers, отформатированный так же, как в контроллере:

Так в вашем BsFormHelper просто делать

public $helpers = ['Bs'];

и вы сделали

1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]