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:
Código da Class:
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:
- <?php
- trait Funcoes
- {
- /**
- * Função valorSql() recebe um valor no formato BR. Por exemplo: 2.000,50
- * E retorna o valor no formato FLOAT. Por exemplo: 2000.50
- * @access public
- * @param string $valor variável que tem valor no formato BR
- * @return mixed null ou valor no formato FLOAT
- */
- public function valorSql($valor)
- {
- if (!empty($valor) && strlen($valor) > 3) {
- $vl = str_replace('.','',$valor);
- $float = str_replace(',','.', $vl);
- return $float;
- } else {
- return null;
- }
- } // Fim valorSql
- }
- ?>
Código da Class:
- <?php
- class CursoFormCadastro extends TPage
- {
- use Funcoes;
- private $form;
- private $alertBox;
- $objeto = $this->form->getData('Curso');
- $objeto->cur_valor = self::valorSql($objeto->cur_valor); // Formatando valor BR para o formato FLOAT
- }
- ?>
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.
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.
Algum erro deve estar ocorrendo. Verifique o arquivo de logs
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
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.
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: