Como usar Traits na classe Olá pessoal, Criei um TRAIT e salvei na pasta app/resources com o nome Funcoes criei várias funções de uso geral. Porém quando tento usar esse TRAIT dentro de uma class o formulário não carrega. Código da Trait: ...
EL
Como usar Traits na classe  
Olá pessoal,
Criei um TRAIT e salvei na pasta app/resources com o nome Funcoes criei várias funções de uso geral. Porém quando tento usar esse TRAIT dentro de uma class o formulário não carrega.

Código da Trait:

 
  1. <?php
  2. trait Funcoes
  3. {
  4. /**
  5. * Função valorSql() recebe um valor no formato BR. Por exemplo: 2.000,50
  6. * E retorna o valor no formato FLOAT. Por exemplo: 2000.50
  7. * @access public
  8. * @param string $valor variável que tem valor no formato BR
  9. * @return mixed null ou valor no formato FLOAT
  10. */
  11. public function valorSql($valor)
  12. {
  13. if (!empty($valor) && strlen($valor) > 3) {
  14. $vl = str_replace('.','',$valor);
  15. $float = str_replace(',','.', $vl);
  16. return $float;
  17. } else {
  18. return null;
  19. }
  20. } // Fim valorSql
  21. }
  22. ?>


Código da Class:

 
  1. <?php
  2. class CursoFormCadastro extends TPage
  3. {
  4. use Funcoes;
  5. private $form;
  6. private $alertBox;
  7. $objeto = $this->form->getData('Curso');
  8. $objeto->cur_valor = self::valorSql($objeto->cur_valor); // Formatando valor BR para o formato FLOAT
  9. }
  10. ?>

Curso Dominando o Adianti Framework

O material mais completo de treinamento do Framework.
Curso em vídeo aulas + Livro completo + Códigos fontes do projeto ERPHouse.
Conteúdo Atualizado!


Dominando o Adianti Framework Quero me inscrever agora!

Comentários (6)


NR

Edcarlo, a pasta app/resources não é mapeada pelo autoload do adianti. Salve o trait em app/lib que deve funcionar.

Habilite os erros do PHP, fica mais fácil para identificar esses casos.
EL

Olá Nataniel,
Mudei o Trait da pasta app/resources para app/lib e habilitei os erros.

Mas continua sem carregar o form e não exibe nenhum erro.
Quando comento a linha use Funcoes; o formulário volta a funcionar.
NR

Algum erro deve estar ocorrendo. Verifique o arquivo de logs
EL

Como os erros habilitados não exibiram nada e os logs Access, Change e Sql também não informaram nada de estranho mudei o trait para class.
Adicionei um namespace e para cada função atribui static

 
  1. <?php
  2. namespace Adianti\Widget;
  3. class Funcoes
  4. {
  5. /**
  6. * Função valorSql() recebe um valor no formato BR. Por exemplo: 2.000,50
  7. * E retorna o valor no formato FLOAT. Por exemplo: 2000.50
  8. * @access public
  9. * @param string $valor variável que tem valor no formato BR
  10. * @return mixed null ou valor no formato FLOAT
  11. */
  12. public static function valorSql($valor)
  13. {
  14. if (!empty($valor) && strlen($valor) > 3) {
  15. $vl = str_replace('.','',$valor);
  16. $float = str_replace(',','.', $vl);
  17. return $float;
  18. } else {
  19. return null;
  20. }
  21. } // Fim valorSql
  22. }
  23. // Desse jeito na classe eu uso sem precisar instanciar
  24. use Adianti\Widget\Funcoes;
  25. class CursoFormCadastro extends TPage
  26. {
  27. private $form; // Formulário
  28. private $alertBox;
  29. public function onSave()
  30. {
  31. $objeto = $this->form->getData('Curso');
  32. $objeto->cur_valor = Funcoes::valorSql($objeto->cur_valor);
  33. }
  34. }
  35. ?>
EL

Infelizmente nem desse jeito deu certo. Mudei novamente a classe para outra pasta ('appadiantiwidgetutil'), o form carregou, mas quando clico em salva dar erro: Class 'AdiantiWidgetUtilFuncoes' not found

Não entendo como o sistema não consegue encontrar uma classe que está na pasta.
EL

Resolvi os erros seguindo a sugestão de Leandro Coelho:
Transformei a trait em classe, coloquei na pasta app\lib\widget e onde eu precisar usar as funções utilizo:

 
  1. <?php $objeto->cur_valor = Funcoes::valorSql($objeto->cur_valor); ?>