Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
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](http://bakery.cakephp.org/articles/view/baked-enum-fields-reloaded)
* @link [http://lucaspelegrino.com/](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');
* }
*
*/ 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