GO
Problema com retorno de classe do tipo service
Olá amigos!
Estou criando uma classe chamada RSSService com um método chamado getFeed que me retorna um array com várias notícias de fontes cadastradas. Já reparei que tudo funciona bem se o volume de notícias for pequeno. Mas o que me intriga é que a variável $response está com o conteúdo mas se eu pedir o return da mesma ela retorna null.
Já passaram por isso?
Segue códigos para entenderem a rotina.
Nessa pagina eu testo a URL
Estou criando uma classe chamada RSSService com um método chamado getFeed que me retorna um array com várias notícias de fontes cadastradas. Já reparei que tudo funciona bem se o volume de notícias for pequeno. Mas o que me intriga é que a variável $response está com o conteúdo mas se eu pedir o return da mesma ela retorna null.
Já passaram por isso?
Segue códigos para entenderem a rotina.
- <?php
- class RssService
- {
- /**
- * Retorna uma relação de notícias de acordo com as fontes cadastradas
- */
- public static function getFeed( $parameters )
- {
- TTransaction::open('GestaoMedia');
- $response = array();
- $record = array();
- $criteria = new TCriteria;
- $all = Vfeed::getObjects( $criteria );
- $id = 0;
- foreach ($all as $url)
- {
- $feed = file_get_contents(strtolower($url->url_fonte_noticia));
- $rss = new SimpleXmlElement($feed);
- $url_image_chanel = $rss->channel->image->url;
- foreach($rss->channel as $itens)
- {
- foreach($itens as $entrada)
- {
- if (!empty($entrada->description))
- {
- $pos = strpos($entrada->description,'<img');
- if ($pos > 0)
- {
- $copy = substr($entrada->description,$pos, strlen($entrada->description));
- $pos = strpos($copy,'src="');
- if ($pos > 0){
- $pos = $pos+5;
- $copy = substr($copy,$pos, strlen($copy));
- $length = strpos($copy,'"');
- $url_image_principal = substr($copy,0, $length);
- }
- $pos = strpos($entrada->description, '<br />');
- $copy = substr($entrada->description,$pos+6, strlen($entrada->description));
- $descricao = substr($copy,0,250).'...';
- $record['id'] = ++$id;
- $record['url_fonte_noticia_id'] = $url->id;
- $record['rss_fonte_noticia_id'] = $url->rss_fonte_noticia_id;
- $record['fonte_noticia'] = $url->fonte_noticia;
- $record['rss_categoria_noticia_id'] = $url->rss_categoria_noticia_id;
- $record['categoria_noticia'] = $url->categoria_noticia;
- $record['titulo'] = $rss->channel->title;
- $record['descricao'] = $descricao;
- $record['url_image_canal'] = $url_image_chanel;
- $record['url_image_principal'] = $url_image_principal;
- $response[] = $record;
- //break; Se eu destravar essa linha consigo um retorno com poucas linhas
- }
- }
- }
- }
- }
- TTransaction::close();
- //var_dump($response); se eu destravar essa linha consigo ver o conteúdo da variável $response
- return $response; // o método não retorna o valor
- }
- }
- ?>
Nessa pagina eu testo a URL
- <?php
- $location = 'http://localhost/gestaomedia/rest.php';
- $parameters = array();
- $parameters['class'] = 'RssService';
- $parameters['method'] = 'getFeed';
- $url = $location . '?' . http_build_query($parameters);
- echo $url.'<br>';
- var_dump( json_decode( file_get_contents($url)) );
- ?>
Poste o código do rest.php
Olá Nataniel!
Seguindo um conselho do Pablo eu implentei esse método em uma classe control e tenho o mesmo problema, o retorno fica nulo. :/
Estou tentando instalar o xdebug no netbeans para tentar descobrir o problema.
Segue o código do Rest.php.
Esse trecho está no final do arquivo rest?
Já tentou chamar a url diretamente pelo browser e analisar o retorno?
Olá!
Meu arquivo rest.php é esse que postei por último. Nesse arquivo não encontrei essa linha.
Sobre colocar a URL e testar o retorno, sim, já fiz mas acontece a mesma coisa.
Repare no código que tenho um linha com um break comentado. Se eu destravar essa linha obrigando o código a enviar um retorno menor ai sim a função retorna o valor certo.
Cara, que louco!
Dei algum vacilo aqui.
segue o código completo do arquivo Rest.php
Eu não creio que o problema esteja o arquivo rest.php pois implementei esse método em uma classe control e ela apresenta o mesmo comportamento. Retorna null mesmo que a variável $response tenha valor. Mas lembrando que se o conteúdo for pequeno ela retorna o valor corretamente.
Método implementado em uma classe control:
Acabei de descobrir que o problema estava na minha instalação do PHP. Reinstalei e passou a funcionar Vou fazer mais alguns testes e encerro o tópico caso o problema tenho realmente acabado.