Solucionado (ver solução)
Solucionado
(ver solução)
13
respostas

Queria saber como o backend da aplicação devolve a informação

Uma das maiores dúvidas que eu tive, foi na questão de visualização do perfil no menu na minha aplicação com Ionic, eu valido as informações via php e devolvo em json retornando para realizarLogin().

public function loginjson(Request $request){
        $credenciais = Request::all();
        if(Auth::attempt($credenciais)){
            $user = User::where('email' ,'=',$credenciais['email'])->get();
            return $user;
        }else{
            return Response::json('error', 404);
        }
    }

Ele me retorna isso

[{"id":1,"nome":"yuri","email":"yurineves92@gmail.com","acesso":1}]

Só que não mostra no menu essa informações, lógico que mais para frente vai ser trabalho um perfil mais elegante, porém quero testar o ionic com laravel 5.0, eu consigo lista as informações da mesma maneira.

13 respostas

Outra dúvida também que surgiu você usa dessa maneira para salvar as informações no $rootScope, aqui eu dou console.log fica undefined, mais se eu deixo apenas $rootScope.usuario = dados eu consigo visualizar tranquilo as informações porém a informação se perde quando vai para MenuController.

$rootScope.usuario = dados.usuario;

Outra dúvida também que surgiu você usa dessa maneira para salvar as informações no $rootScope, aqui eu dou console.log fica undefined, mais se eu deixo apenas $rootScope.usuario = dados eu consigo visualizar tranquilo as informações porém a informação se perde quando vai para MenuController.

$rootScope.usuario = dados.usuario;

Oi Yuri, tudo bem? Então, cola pra mim o código de como você está fazendo o request só pra mim entender melhor o processo e poder te ajudar.

service.js

realizarLogin : function(dadosDoLogin){
            return $http.get(url + "loginjson", dadosDoLogin).then(function(response){
                return response.data;
            });
        }

login.controller.js

angular.module('starter')
.controller('LoginController', function($http, $scope, PicklesService, $ionicPopup, $state, $rootScope){

    $scope.login = {};
    $scope.realizarLogin = function(){

        var dadosDoLogin = {
            params : {
                email : $scope.login.email,
                password : $scope.login.password
            }
        }

        PicklesService.realizarLogin(dadosDoLogin).then(function(dados){
            $rootScope.usuario = dados; //Aqui chega as informações mais se eu deixo dados.usuario chega undefined.    
            $state.go('app.todospepinos');

        }, function(erro){
            $ionicPopup.alert({
                title : 'Erro!',
                template : 'Email ou senha incorretos.'
            })

        })

    }


});

Dei um console.log no MenuController assim que está vindo minhas informações. [Object] 0 : Object acesso : 1 email : "yurineves92@gmail.com" id : 1 nome : "yuri" proto : Object length : 1 proto : Array(0)] Código abaixo do MenuController

angular.module('starter')
.controller('MenuController', function($scope,$rootScope){
   $scope.usuarioLogado = $rootScope.usuario;
   console.log($scope.usuarioLogado);
});

Uma das coisas que percebi que no curso do Ionic, no console.log aparecia o objeto usuario, no meu não.

Essa resposta é em JSON? porque fiz o teste no Backend do projeto AluraCar me retornou isso.

{"usuario":{"id":1,"nome":"João da Silva","dataNascimento":"30/01/1990","telefone":"1199887788","email":"joao@alura.com.br"}}

É um JSON sim, mas você deve ver como esse JSON está sendo criado.

Na minha aplicação web retorna dessa maneira.

[{"id":1,"nome":"yuri","email":"yurineves92@gmail.com","acesso":1}]

Queria saber se existe algo no PHP possa fazer dessa maneira.

Então, a diferença é que o segundo é um array com um objeto dentro e o primeiro, é um objeto com um objeto dentro.

Então eu consegui chegar a isso, usando json_encode, JSON_FORCE_OBJECT

{"0":{"id":1,"nome":"yuri","email":"yurineves92@gmail.com","acesso":1}}
solução!

Você pode fazer o seguinte:

$objUser = json_decode('[{"id":1,"nome":"yuri","email":"yurineves92@gmail.com","acesso":1}]')[0];

Assim você recupera o objeto na primeira posição do array e depois você pode fazer o seguinte pra ficar igual ao primeiro JSON:

$retorno = new stdClass;
$retorno->usuario = $objUser;
return json_encode($retorno);

O resultado vai ser:

{"usuario":{"id":1,"nome":"yuri","email":"yurineves92@gmail.com","acesso":1}}

Yuri, acredito que esse tópico seja o mesmo que você procura saber nesse outro tópico que você abriu em https://cursos.alura.com.br/forum/topico-tipos-de-respostas-via-json-35986 caso seja, vou solicitar que seja um pouco mais paciente e evite estar duplicando tópicos.