lucaswxp 22 Denunciar post Postado Janeiro 2, 2010 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