Ir para conteúdo

POWERED BY:

Arquivado

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

Bruno Augusto

[Resolvido] Converter uso de Funções de Exibição de Strings...

Recommended Posts

Essa, com certeza, foi a maior noobada que já fiz em programação. <_<

 

Durante o desenvolvimento, nem me preocupei com a segunda parte mais importante do MVC, a View.

 

Fiz todas as rotinas, classes concretas e abstratas, interfaces, aprendi a implementar o Observer, mas fiz a burrada de TODAS as saídas de texto de uma parte específica do projeto serem realizadas através de print / printf().

 

Acontece que agora que acabei essa parte, não consigo mostrar no template da View o resultado de todo o trabalho, uma vez que não consigo criar as variáveis de template para isso.

 

Eu estou usando o Zend Framework, mas o problema não chega a ser culpa dele.

 

Normalmante, a View em frameworks possui os métodos assign() para criar as variáveis ou permitem fazer essa atribuição através do __set(). No ZF não é diferente:

 

$this -> view -> assign( 'foo', 'bar' );

// é o mesmo que

$this -> view -> foo = 'bar';

// e pode ser acessado no template

echo $this -> foo; // Saída bar

Mas, como o tapado aqui fez com print / printf(), não tenho, por exemplo, um nome de variável, usado como primeiro argumento do tal assign().

 

E mesmo que tivesse, por esse parte estar dentro de um loop, essas variáveis seriam sobrescritas sempre, e eu teria apenas o último conjunto delas.

 

Eu pensei em estruturar num array tendo, como índices, o valor corrente da iteração para, no template, talvez estilizar esse valor antes de mostrar todas as mensagens dessa iteração. Seria, teoricamente, perfeito.

 

Mas como eu implementei o Observer e parte das mensagens estão no Contexto de Uso, parte no Objeto Observável e parte no Objeto Observador, não consegui montar uma estrutura racionalmente correta.

 

Tentei criar um "logger" simples para compartilhar as mensagens entre essas três classes, mas não ficou nada "bonito" (deu até coceira :lol: ).

 

Alguma sugestão?

Compartilhar este post


Link para o post
Compartilhar em outros sites

mas fiz a burrada de TODAS as saídas de texto de uma parte específica do projeto serem realizadas através de print / printf().

 

hum ??

 

os teus objetos já 'dão echo' ?

teu Model faz print / printf ?

 

Reescreve isso... ou faz php procedural ^_^ (não faça)

Compartilhar este post


Link para o post
Compartilhar em outros sites

Exatamente. Sentiu o tamanho da burrada. http://forum.imasters.com.br/public/style_emoticons/default/pinch.gif

 

Não envolve as Models, apenas o algoritimos que eu criei.

 

Como eu disse, ao longo do Contexto (iteração), dos Objetos Observáveis (algoritimos) e Objetos Observadores, que tomam alguma decisão com base no resultado do algoritimo, existem algumas "mensagens".

 

Nos Objetos Observáveis, todas as mensagens são a nível de depuração, para que eu saiba sobre quais valores o algoritimo está operando, para ir ajustando se necessário. Para o usuário final, são dispensáveis.

 

Já nos Objetos Observadores, em média, tenho três mensagens que deverão aparecer para usuário final: O resultado do algoritimo e dois resultados após a decisão tomada por ele.

 

Não seria o caso de reescrever tudo (eu acho), mas de armazenar essas infomrações num array que seria recebido e talvez manipulado pelo Controller antes de ser devolvido à View (templates).

Compartilhar este post


Link para o post
Compartilhar em outros sites

Já viu o helper do ZF chamado flashMessenger?

 

$this->_helper->flashMessenger->addMessage('Mensagem');
Fazendo assim, a mensagem fica disponível no layout ou ainda na view, com o seguinte código, como um array:

 

$mensagens = Zend_Controller_Action_HelperBroker::getStaticHelper('flashMessenger')->getMessages();

Pode ser que resolva.

 

Carlos Eduardo

Compartilhar este post


Link para o post
Compartilhar em outros sites

Matias, mas ele é, digamos, "global"? Isto é, não importa em quantas classes eu chame, sequencialmente, TUDO que for escrito estará disponível no template?

 

E mais, para justificar a permanência do tópico aqui em PHP mesmo, eu se eu NÃO QUISER usar esse Helper? Isso porque eu estou achando o ZF cada dia mais lento, principalmente em iterações complexas (como é o caso).

 

Estava pretendendo migrar de framework, passar a usar o Recess, assim que ele amadurecer um pouco mais (ainda não suporta namespaces).

 

Com essa troca de framework eu não teria mais acesso a esse Helper.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Matias, mas ele é, digamos, "global"?

 

Sim.

 

...eu se eu NÃO QUISER usar esse Helper?

 

Você pode utilizar Zend_Registry para gravar todas as mensagens e resgatar no template, ou ainda Zend_Session_Namespace, ou ainda se não quiser utilizar nenhuma destas opções, você pode criar uma classe Singleton e adicionar as mensagens nela, resgatando no template. Ou ainda pode criar um método estático addMessage() em qualquer classe que você utilize (POG).

 

Isso porque eu estou achando o ZF cada dia mais lento, principalmente em iterações complexas (como é o caso).

 

Uma coisa que tenho percebido (posso estar errado) é que quanto mais ferramentas utilizamos, pior fica o desempenho do site/sistema. Por exemplo, um site feito em PHP puro será mais rápido que um site feito em Wordpress, que será mais rápido que um site feito utilizando Zend Framework, que será mais rápido que um site feito utilizando TomatoCMS (CMS feito em Zend Framework). Em contrapartida, a velocidade de desenvolvimento é exatamente o inverso. Estou tão acostumado a utilizar o Zend Framework que até para sites simples eu o utilizo, já que a velocidade do desenvolvimento é impressionante.

 

Carlos Eduardo

Compartilhar este post


Link para o post
Compartilhar em outros sites

Bom, só para não esquecer do tópico fiz a minha implementação do FlashMessenger do ZF, para o caso de eu querer/precisar migrar de Framework (o sistema de reescrita de URL desse Recess é o bicho!)

 

Pesquisei sobre como o FlashMessenger funciona (sessions) e montei o meu. Funcionou muito bem. :D

 

Muito obrigado, Matias http://forum.imasters.com.br/public/style_emoticons/default/thumbsup.gif

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.