2012-09-02 7 views

Antwort

11

TLDR zu definieren:

Fügen Sie die 2 Teile des Codes unten in ihren jeweiligen Stellen, dann ändern Sie das $defaultOptions Array zu was auch immer Sie wollen - voila. Es ändert keine der Funktionen von FormHelper, außer dass die Form->creates inputDefaults Standardwerte hinzugefügt werden.

Erklärung & Code:

Sie die Formhelper verlängern kann (einfacher als es klingt) durch Ihre eigenen zu machen 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); 
    } 
} 

Dann in Ihrem AppController, gehören das Formular Helfer in die folgende Art und Weise (wenn Sie bereits einen $ Helfer Variable haben, fügen Sie einfach 'Form' => ... es):

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

Dies macht es so, wenn Sie $this->Form aufrufen, ruft es tatsächlich Ihre benutzerdefinierte 'MyFormHelper' - und das einzige, was es tut, ist die inputDefaults setzen, wenn sie nicht angegeben sind, dann weiter auf die normale Logik in FormHelper Kuchen finden.

0

Das ist wirklich toll - ich habe das ein bisschen geändert, so dass Sie Hash :: merge statt Array Merge verwenden, um es auf der Cake API zu halten. Außerdem habe ich meinen "AppFormHelper" genannt - aber das ist nur meine eigene Benennung: Benennen von Helfern ist ziemlich locker. Danke für den Tipp!

Hash-Klasse: 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

Kann ich bitte hinzufügen, dass Daves Code über einen Fehler in ihm hat. Die Linie:

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

Verursacht eine "Notice (8): Array String-Konvertierung [CORE/Kuchen/Ansicht/helper.php, Linie 486]", wenn inputDefaults wird sowohl in der dem erweiterten Formhelper angegeben sowie in der Form selbst.

Dieser Fehler ist nicht in Kirikinthas Version vorhanden.