2012-09-02 13 views

risposta

11

TLDR:

incollare i 2 pezzi di codice qui sotto nei rispettivi punti, quindi modifica l'array $defaultOptions in base alle tue esigenze: voilà. Non altera nessuna delle funzioni di FormHelper, tranne aggiunge le impostazioni predefinite allo inputDefaultsForm->create.

Spiegazione & Codice:

È possibile estendere la FormHelper (più facile di quanto sembri), rendendo il proprio personalizzato MyFormHelper:

<?php 
//create this file called 'MyFormHelper.php' in your View/Helper folder 
App::uses('FormHelper', 'View/Helper'); 
class MyFormHelper extends FormHelper { 

    public function create($model = null, $options = array()) { 
     $defaultOptions = array(
      'inputDefaults' => array(
       'div' => false, 
       'label' => false 
      ) 
     );  

     if(!empty($options['inputDefaults'])) { 
      $options = array_merge($defaultOptions['inputDefaults'], $options['inputDefaults']); 
     } else { 
      $options = array_merge($defaultOptions, $options); 
     } 
     return parent::create($model, $options); 
    } 
} 

Poi, nel vostro AppController, includono l'helper Forma in il modo seguente (se hai già una variabile $ helper, aggiungi solo 'Form' => ...):

public $helpers = array(
    'Form' => array(
     'className' => 'MyForm' 
    ) 
); 

Questo rende così ogni volta che si chiama $this->Form, in realtà chiama il tuo personalizzato 'MyFormHelper' - e l'unica cosa che fa è impostare il inputDefaults se non sono specificati, quindi continuare a fare la logica normale trovato in Cake's FormHelper.

0

Questo è davvero grandioso - l'ho modificato un po ', in modo da utilizzare Hash :: merge, invece di array merge per tenerlo in Cake Api. Inoltre, ho chiamato il mio "AppFormHelper" - ma questa è solo la mia denominazione: la denominazione degli helper è piuttosto semplice. Grazie per il consiglio!

Hash Classe: http://book.cakephp.org/2.0/en/core-utility-libraries/hash.html

<?php 
/** 
* @file AppFormHelper. 
* This allows you to create defaults for your forms. 
*/ 
App::uses('FormHelper', 'View/Helper'); 

class AppFormHelper extends FormHelper { 

    public function create($model = null, $options = array()) { 
    $default = array(
     'inputDefaults' => array(
     'div' => false, 
     'class' => 'form-control', 
     'autocomplete' => 'off', 
    ), 
    ); 
    $options = Hash::merge($default, $options); 
    return parent::create($model, $options); 
    } 

} 
0

Posso si prega di aggiungere che il codice di Dave ha un bug in esso sopra. La linea:

$options = array_merge($defaultOptions['inputDefaults'], $options['inputDefaults']); 

Provoca un "Avviso (8): Array alla conversione string [core/torta/Vista/helper.php, linea 486]" quando inputDefaults è specificato sia nel l'FormHelper estesa così come nella forma stessa.

Questo bug non è presente nella versione di kirikintha.

Problemi correlati