A idéia seria a seguinte:
($variavel == 1) ? "ativo" : "inativo";
Respeitando MVC, não deveremos colocar esta lógica na view, de forma alguma.
A view tão somente deve exibir os dados setados a ela.
Para exibir esses dados devem ser modificados no controller. Sendo $variavel já enviada com "ativo" ou "inativo".
Em CAKEBAKER ele fala sobre a mesma idéia só que trabalhando do model para o banco.
Busquei tratar o valor de $variavel que seria impresso na view no controlador visto que ele é responsável por enviar os dados a mesma. Então que sejam enviados os dados de forma correta.
Já na hora de tratar com banco, a responsabilidade é do modelo.
Parei para pensar um pouco sobre como realizar isso com próprio sql.
Numa leitura superficial encontrei um artigo que falava sobre o uso CASE em SELECTS.
Vejam se a idéia não é parecida com o exemplo dado neste blog?
select
CASE month when "01" then "January"
when "02" then "February"
when "03" then "March"
END
from calendar where year = "2005" order by month
Fonte principal : http://dev.mysql.com/doc/refman/4.1/pt/control-flow-functions.html
2 comentários:
Olá Angellica,
Minha opinião é que esta lógica é sim da visão. Uma verificação desta poderá definir se minha página vai ficar Vermelha ou Verde, eu poderei exibir um texto em Português ou Inglês, várias responsabilidades que a visão é responsável.
Lógica é sim utilizada em Visão tanto que temos os Helpers justamente para isso. Helper é uma outra classe mas o é totalmente voltado para a Visão.
O problema da implementação do CakePHP de Modelos é que ele não trabalha realmente com Objetos. Nossos Controllers buscam os dados nos Models e nos retornam Arrays. Infelizmente isto nos tira o poder de utilizarmos as abstrações dos objetos.
O ideal ai é que pudéssemos utilizar ter uma lista de objetos, que pudéssemos criar métodos públicos como isActive() e ele nos retornar true ou falso, mesmo que a lógica do isActive não seja um simple ($active)?true:false; Com este retorno, utilizamos os Helpers para fazer a exibição, ou mesmo um Element, caso seja algo simples.
Abraços
Olá Angelica!
No site do cake tem um pdf interessante para sua questão:
http://cakephp.org/files/Slides/OCPHP.pdf
La tem uma imagem com o bolo bem feito e o mal feito. No cake 1.1 a visão era um MVC com uma camada de controle maior. No Cake 1.2 a intenção é deixar o modelo maior.
Para este seu problema vc pode usar um callback no próprio modelo afterFind e tratar sua busca.
Caso vc tenha interesse de usar em vários modelos vc pode fazer um behavior.
Um behavior que tem uma lógica parecida com o que vc está querendo é o soft delete, vc pode encontra-lo aqui:
http://bakery.cakephp.org/articles/view/soft-delete-behavior
Abraços!
Daniel
Postar um comentário