Soy nuevo con YII (y me parece fantástico) lo estoy implementando en la empresa donde trabajo y hasta el momento voy bastante bien en tiempos y en calidad del sistema.
Pero últimamente he notado que al convertir a mayúsculas (antes de guardar en la BD), los caracteres con acentos no los convierte a mayúsculas.
Que me sugieren?
Nota: la conversión a mayúsculas la hago desde el modelo en las reglas de validación con filter.
Que función estas usando para tal propósito? no creo que sea problemas de yii sino de usar la función adecuada para la codificación utilizada. te recomiendo que busques información de las funciones mb (Multibyte String) de php. Antes verifica si el servidor donde estas trabajando tiene dicha librería instalada.
public function rules()
{
return array(
comentarios','filter','filter'=>'strtoupper'),
);
}
Así es como convierto a mayúsculas. Estuve leyendo un poco mas y proponen
setlocale(LC_ALL,‘es’);
Lo puse en el index pero sigue sin funcionar.
Antes de aventurarme en idear un método para hacer la conversión manualmente (beforeSave), pienso que el problema esta en una configuración de localidad.
Yo lo modifico en el método afterSave(), más exactamente lo hago con un comportamiento.
Creo el comportamiento en mi caso en protected/extensions/behavior/
<?php
class WordBehavior extends CActiveRecordBehavior{
public $upper;
public $lower;
public $first;
public function beforeSave($event){
if (!empty($upper)){
foreach ($upper as $campo)
if (isset ($this->getOwner()->{$campo})) $this->getOwner()->{$campo} = mb_strtoupper($this->getOwner()->{$campo}, "UTF-8");
}
if (!empty($lower)){
foreach ($lower as $campo)
if (isset ($this->getOwner()->{$campo})) $this->getOwner()->{$campo} = mb_strtolower($this->getOwner()->{$campo}, "UTF-8");
}
if (!empty($first)){
foreach ($first as $campo)
if (isset ($this->getOwner()->{$campo})) $this->getOwner()->{$campo} = mb_convert_case($this->getOwner()->{$campo}, MB_CASE_TITLE, "UTF-8");
}
}
}
Hola, disculpa una pregunta. si quisieras implementar esto para un model creado desde el gii en mi caso TblEstado.php como quedaria? intente algo como.
public function behaviors(){
$behaviours=array(
'wordBehavior' => array(
'class' =>'ext.behavior.WordBehavior',
'upper' =>'estado',
),
);
return CMap::mergeArray(parent::behaviors(),$behaviours);
pero no me funciona, igual en base de datos lo guarda en minusculas. alguna idea? soy nuevo con yii asi que disculpa si la pregunta es tonta. gracias de antemano por cualquier ayuda
Hola wasakaca2, pues si no te da ningún error no se me ocurre nada.
Tendrás que hacer algún echo en beforeSave y parar la ejecución, a lo bruto, 1º para ver si entra y 2º para ver si esta definido el parámetro, en este caso ‘estado’ en el modelo (debe existir en BBDD).