JA
Não foi possível chamar o método construtor da classe
Fechado
Olá, Pablo e pessoal da comunidade.
Primeiro quero dizer que esse framework é muito bom. Eu já vinha usando alguns componentes que foram desenvolvidos no livro PHP Programando com Orientações a Objetos e agora com o framework tudo parece estar melhor.
Eu vinha lendo o livro Adianti Framework para PHP e fazendo os exemplos no framework, cuja a versão é a 1.0.3.
Eu tive um problema ao executar o exemplo da página 48 mais especificamente o arquivo CollectionUpdate.class.php.
Ao executar o arquivo eu recebo uma mensagem de erro (TMessage) 'Não é possível chamar o construtor da classe'.
Acredito que os objetos Customer's não estão sendo carregados e, consequentemente, o TRepository não está conseguindo chamar o método construtor dos objetos Customer's.
A fim de verificar o comando SQL gerado eu utilizei a classe TLoogerTXT e verifiquei que o comando SQL está correto e retornando as linhas da tabela corretamente.
Então, não sei o que está ocasionando o problema.
Vocês podem me ajudar a descobrir esse problema?
Agradeço desde já qualquer ajuda.
:)
Primeiro quero dizer que esse framework é muito bom. Eu já vinha usando alguns componentes que foram desenvolvidos no livro PHP Programando com Orientações a Objetos e agora com o framework tudo parece estar melhor.
Eu vinha lendo o livro Adianti Framework para PHP e fazendo os exemplos no framework, cuja a versão é a 1.0.3.
Eu tive um problema ao executar o exemplo da página 48 mais especificamente o arquivo CollectionUpdate.class.php.
- <?php
- class CollectionLoad extends TPage
- {
- public function __construct()
- {
- parent::__construct();
- try
- {
- TTransaction::open('samples'); // abre uma transação
- $criteria = new TCriteria;
- $criteria->add(new TFilter('gender', '=', 'F'));
- $repository = new TRepository('Customer');
- $customers = $repository->load($criteria);
- foreach ($customers as $customer)
- {
- echo $customer->id . ' - ' . $customer->name . '<br>';
- }
- TTransaction::close(); // fecha a transação.
- }
- catch (Exception $e)
- {
- new TMessage('error', $e->getMessage());
- }
- }
- }
- ?>
Ao executar o arquivo eu recebo uma mensagem de erro (TMessage) 'Não é possível chamar o construtor da classe'.
Acredito que os objetos Customer's não estão sendo carregados e, consequentemente, o TRepository não está conseguindo chamar o método construtor dos objetos Customer's.
A fim de verificar o comando SQL gerado eu utilizei a classe TLoogerTXT e verifiquei que o comando SQL está correto e retornando as linhas da tabela corretamente.
Então, não sei o que está ocasionando o problema.
Vocês podem me ajudar a descobrir esse problema?
Agradeço desde já qualquer ajuda.
:)
P.S. Gostaria de mudar o título do post pra algo mais sugestivo (Não foi possível chamar o método construtor da classe - Livro: Adianti Framework para PHP pag 48)
O nome da classe que vc criou esta diferente vc percebeu ?
CollectionLoad
Digita assim como está na url, ou mude para CollectionUpdate como no exemplo.
Sds
Felipe Cortez
Jairo,
Em primeiro lugar, obrigado!
Para facilitar o debug, experimente substituir:
por:
Vai dar um debug mais completo.
Atenciosamente,
Pablo
Desculpe a demora pra responder. Eu estava muito ocupado recentemente, mas logo retornarei ao estudo do Adianti Framework.
Eu descobri o problema.
O problema aconteceu depois que eu havia criado o método interceptador do atributo
Quando o objeto TRepository tentava instanciar o objeto Customer ele não conseguia porque no método construtor da classe TRecord não conseguia atribuir a data no novo padrão para o atributo birthdate, logo, o erro 'Não é possível chamar o construtor da classe'.
Espero que tenham entendido. Foi um pouco difícil saber qual era o erro. Cheguei a pensar que era um problema no método load() da classe TRepository.
No meu post coloquei o nome da classe errada CollectionUpdate.class.php mas se referia a CollectionLoad.class.php.
Usarei o 'new TException($e)' para ver se consigo informações mais detalhadas do bug, Pablo.
Obrigado pela ajuda, pessoal.
Me ajudou bastante, também estava com esse mesmo problema e conseguir solucionar e entender graça a seu post.