Lançado Adianti Framework 8.1!
Clique aqui para saber mais
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.             
  17.             return $float;
  18.         } else {
  19.             return null;
  20.         }
  21.     } // Fim valorSql
  22. }
  23. ?>


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.             
  18.             return $float;
  19.         } else {
  20.             return null;
  21.         }
  22.     } // Fim valorSql
  23. }
  24. // Desse jeito na classe eu uso sem precisar instanciar
  25. use Adianti\Widget\Funcoes;
  26. class CursoFormCadastro extends TPage
  27. {
  28.     private $form// Formulário
  29.     private $alertBox;
  30.    public function onSave()
  31.    {
  32.          $objeto $this->form->getData('Curso');
  33.          $objeto->cur_valor Funcoes::valorSql($objeto->cur_valor);
  34.    }
  35. }
  36. ?>
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); ?>