0

Je travaille actuellement sur un assistant pour CakePHP3 qui comprend BsHelper, puis le BsFormHelper.CakePHP 3 - appel de l'objet de l'autre assistant

En fait tout semble bien, pas de problème avec les formats Bootstrap.

Je tente maintenant de créer une instance de ckEditor, mais je rencontre plusieurs problèmes.

Si je tente d'appeler mon ckeditor comme ceci:

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

J'ai juste quelques problèmes parce que la fonction ckeditor est dans mon BsFormHelper, et la fonction de charge est en BsHelper. Alors, quand je tente d'accéder à var privé pour savoir si je devais charger ckeditor j'ai cette question:

Error: Call to a member function load() on a non-object File C:\wamp3\www\wac_lucien\BsHelpersCakePHP3\3.2\plugins\BsHelpers\src\View\Helper\BsFormHelper.php

Donc, en fait, je sais où est le problème:

Dans BsFormHelper ma fonction ressemble:

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; 
} 

Et dans mon BsHelper je suis:

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']; 
} 

Les valeurs sont dans la déclaration comme ce

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 
    ) 
); 

Quelqu'un peut-il m'aider à le découvrir? Il ressemble à la fonction de charge appelé BsFormHelper ne peut pas accéder privates vars de BsHelper ...

+0

Copie possible de [aide d'accès cakephp à partir d'une autre aide] (http://stackoverflow.com/questions/22317894/cakephp-access-helper-from-within-another-helper). Cette question concerne cakephp 2 mais reste valable pour cake3 – arilia

Répondre

1

vous semble juste essayer d'utiliser une aide dans une autre aide

Le manual dit

You may wish to use some functionality already existing in another helper. To do so, you can specify helpers you wish to use with a $helpers array, formatted just as you would in a controller:

Alors dans votre BsFormHelper faire juste

public $helpers = ['Bs']; 

et vous avez terminé

+0

Merci! Je viens de le représenter! En fait, j'ai rencontré d'autres problèmes avec $ helpers déclaration ... Juste besoin de les déclarer tous dans $ helpers: D Merci gars pour votre temps! –