2012-09-02 8 views

Respuesta

11

TLDR:

pegar los 2 trozos de código de abajo en sus respectivos lugares, luego cambia la matriz $defaultOptions a lo que quieras, voila. No altera ninguna de las funciones de FormHelper, excepto agrega valores predeterminados a Form->create 's inputDefaults.

Explicación & Código:

Puede ampliar la FormHelper (más fácil de lo que parece) al hacer que su propia costumbre 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); 
    } 
} 

Luego, en su AppController, incluyen el ayudante Formulario de De la siguiente manera (si ya tiene una variable $ helpers, simplemente agregue 'Form' => ...):

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

Esto hace que cada vez que llame al $this->Form, realmente llame a su 'MyFormHelper' personalizado, y lo único que hace es establecer el inputDefaults si no están especificados, luego continúe con la lógica normal encontrada en Cake's FormHelper.

0

Esto es realmente genial. Cambié esto un poco, para que use Hash :: merge, en lugar de array merge para mantenerlo en Cake Api. Además, llamé a la mía "AppFormHelper", pero eso es solo mi propio nombre: nombrar ayudantes es bastante flexible. ¡Gracias por el consejo!

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

¿puedo añadir que el código de Dave anterior tiene un error en ella. La línea:

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

provoca una "Notificación (8): Array para la conversión de cadenas [CORE/torta/Vista/helper.php, la línea 486]" cuando inputDefaults se especifica en tanto el del FormHelper extendida, así como en la forma misma.

Este error no está presente en la versión de kirikintha.

Cuestiones relacionadas