c'è un modo per definire options['inputDefaults']
a livello di sito a quello ad ogni formamodo per definire inputDefaults CakePHP a livello di sito
risposta
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 inputDefaults
Form->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.
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);
}
}
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.
+1 - ho sempre pensato di farlo, ma non sono mai riuscito a vedere come. – Dave