2017-09-30 5 views
0

J'essaie d'ajouter une classe par défaut pour chaque entrée dans mon application cakephp 3. Exemple de ce que je veux:cakephp 3 ajouter la classe par défaut aux entrées

Entrée: <echo $this->Form->control('email');

Sortie: <input class="form-control" class="is-invalid"/>

sortie souhaitée: <input class="form-control is-invalid"/>

pour ce que j'ai modèle d'entrée sous la direction de FormHelper

$this->viewBuilder()->setHelpers([ 
     'Form' => [ 
      'templates' => [ 
       'input' => '<input class="form-control" type="{{type}}" name="{{name}}"{{attrs}}/>' 
      ] 
     ] 
    ]); 

le problème est que {{attrs}} peut contenir d'autres classes. Avez-vous une idée de comment le faire?

Répondre

1

résolu: D créer un FormHelper pour remplacer le contrôle de méthode et ajouter une classe.

class BootstrapFormHelper extends FormHelper{ 
    public function control($fieldName, array $options = []){ 
     if($this->request->is('post') && !$this->isFieldError($fieldName)){ 
      $options['class'] = 'form-control is-valid'; 
     }else{ 
      $options['class'] = 'form-control'; 
     } 
     return parent::control($fieldName, $options); 
    } 
} 

puis changer votre APPVIEW

class AppView extends View{ 
    public function initialize() 
    { 
     $this->loadHelper(
      'Form', [ 
       'className' => 'BootstrapForm', 
      ] 
     ); 
    } 
} 
+0

Il y a aussi des plugins disponibles qui aide à la création de sortie compatible bootstrap: ** https: //github.com/FriendsOfCake/awesome-cakephp#templating**. – ndm

+0

salut je sais mais les plugins fonctionnent avec bootstrap 3 seulement. J'utilise bootstrap 4, il y a beaucoup de changements. – Matoran