Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

lucaswxp

[Resolvido] [SCRIPT] Utilizando campos do tipo enum no CakePHP (EnumCo

Recommended Posts

O cakephp, por padrão, não interpreta campos do tipo enum para comboboxes (selects) utilizando o FormHelper, assim, fazendo com que escrevamos arrays com o mesmo conteúdo dos itens de nossos enums, e isso é muito chato. Para resolver criei/modifiquei algo, chama-se "EnumComponent".

 

O correto seria fazer como um behavior, porém eu não fiz assim, pois quando o cake trocar de versão, todos os behaviors terão de ser modificados para herdar de uma classe diferente da atual.

 

Este componente foi baseado num script encontrado no bakery.

Salve o código abaixo na pasta de componentes de sua aplicação com o nome "enum.php" (app/controller/components/enum.php). Como usar está tudo escrito nos comentários.

 

<?php
/**
 * Força o CakePHP a utilizar campos do tipo "enum" como comboboxes (select)
 *
 * @author gino pilotino (gunzip)
 * @modifiedBy Lucas Pelegrino <lucas_wxp@hotmail.com>
 *
 * @link http://bakery.cakephp.org/articles/view/baked-enum-fields-reloaded
 * @link http://lucaspelegrino.com/
 *
 * @example Apenas coloque em no controller o componente Enum:
 *  1 -
 *      class AppController extends Controller {
 *          var $components = array('Enum');
 *      }
 *
 *  Ou se você quiser que tenha efeito em um controller exclusivo:
 *
 * 2 -
 *      class MeuController extends AppController {
 *          var $components = array('Enum');
 *      }
 *
 */
class EnumComponent extends Object {

 function startup(&$controller){
 foreach($controller->modelNames as $model) {
 foreach($controller->$model->_schema as $var => $field) {
 if(strpos($field['type'], 'enum') === FALSE)
 continue;

 preg_match_all("/\'([^\']+)\'/", $field['type'], $strEnum);

 if(is_array($strEnum[1])) {
 $varName = Inflector::camelize(Inflector::pluralize($var));
 $varName[0] = strtolower($varName[0]);
 $controller->set($varName, array_combine($strEnum[1], $strEnum[1]));
 }
 }
 }
 }
}
?>

Fonte: http://lucaspelegrino.com

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.