Como faço para os métodos dos meus controllers retornarem para a requisição via get?
Como faço para os métodos dos meus controllers retornarem para a requisição via get?
Oi Thiago, não entendi bem, todos os métodos devem ser get ou todos eles devem redirecionar para um get?
Tipo eu faço a requisição via get para 1 certo endereço, dai como faz pro controller devolver o "array" da resposta? não estou conseguindo
Opa Thiago.
Se for o que eu to pensando, você quer que a requisição traga como resposta um json ( comum em requisições REST).
Se for conforme eu to pensando, segue o exemplo abaixo.
Digamos que a intenção seja retornar um array de produtos em json acessando o link /produtos
<?php
namespace App\Http\Controllers;
class ProdutoController extends Controller
{
//responde quando alguem chama /produtos
public function index()
{
//todos os produtos serão retornados
$produtos = App\Produto::all();
return response() ->json(['produtos' => $produtos );
}
}
?>
Verifica o retorno e nos diga se é isso mesmo que você deseja.
Quando eu dou no a requisição ele está imprimindo o array na página, é como se a requisição não tivesse sendo feita pelo o GET, pois não está retornando nada para ele.
Copia o array e cola aqui pra gente ver.
Vou mandar tudo, o get que tô fazendo e o controller. get:
new Vue({
el: '#app',
data:{
produtos:[],
msg:"aaaaa"
},
ready: function (){
console.log('s');
/*this.$http.get('http://127.0.0.1:8000/list'),function(produtos) {
this.produtos = [1,2,3];
console.log(produtos);
};*/
this.$http.get('http://127.0.0.1:8000/list', function(produtos) {
console.log(produtos);
this.produtos = produtos;
console.log('entrei');
});
console.log('fs');
}
});
controller do laravel
public function select(){
$produtos = DB::select('select * from produto');
return $produtos;
#return view('lista')->with('produtos',$produtos);
#return response() ->json(['produtos' => $produtos ]);
# return view('lista');
}
Esse projeto inteiro era um CRUD básico só feito com Laravel, agora estou tentando colocar o VueJS para fazer as requisições, porem é onde estou preso.
Cade o seu arquivo route.php? Coloca ele aqui. Ele está apontando pro lugar certo?
Thiago, cola o resultado desse console.log aqui? console.log(produtos);
route.php
Route::get('/', 'produto@select');
Route::get('/add/','produto@add');
Route::get('/addc','produto@addc');
Route::get('/up/{id}','produto@up');
Route::get('/att','produto@att');
Route::get('/del/{id}','produto@del');
console.log(produtos) Está imprimindo o código da view.
Acho que faltou apontar o link pra algum lugar ai
http://127.0.0.1:8000/list é o link que você tá chamando no vue, mas pelo seu route.php, ele não está sendo apontado pra lugar nenhum.
Você tem que apontar explicitamente no route.php, como abaixo
//select tá apontando pra raiz
//Route::get('/', 'produto@select');
//segundo a chamada do vue
Route::get('/list', 'produto@select');
Ele está assim no route.php agora, mas continua a mesma coisa.
Route::get('/list', 'produto@select');
Posta o conteúdo da view aqui. o que é que ele tá imprimindo lá?
Imprime tudo menos o v-for.
<!DOCTYPE html>
<html>
<head>
<title></title>
<link rel="stylesheet" type="text/css" href="/css/app.css">
</head>
<body>
<div class="container" id="app">
<h1>Todos os produtos</h1>
<ul>
<li v-for="p in produtos">@{{p.nome}}</li>
</ul>
</div>
<script src="/js/vue.min.js"></script>
<script src="/js/vue-resource.min.js"></script>
<script src="/js/home/index.js"></script>
<script>/*
new Vue({
el: '#app',
data:{
produtos:[],
msg:"aaaaa"
},
ready: function(){
console.log('a');
}
});*/
</script>
</body>
</html>
Quando você chama a url abaixo direto no navegador. O que aparece?
Outro dia eu vi um problema aqui mesmo no forum de um problema de cors. O cara conseguiu resolver mudando a chamada do js.
Ele trocou
this.$http.get('http://127.0.0.1:8000/list', function(produtos) {
//...resto do codigo
});
por
this.$http.get('/list', function(produtos) {
//...resto do codigo
});
De qualquer forma, posta o resultado da url chamada direto no navegador.
Cara, sei que é chato, mas é o unico jeito da gente te ajudar
http://127.0.0.1:8000/list a resposta é a própria view, renderizada.
this.$http.get('/list', function(produtos) {
//...resto do codigo
});
tentei isso, não mudou em nada, tô quase desistindo kk.
E aqui, tá assim?
public function select(){
$produtos = DB::select('select * from produto');
return $produtos;
return response() ->json(['produtos' => $produtos ]);
}
Só com return produtos, já tentei com o response, mas deu a mesma.
Lembra que se tiver dois returns, apenas o primeiro vale
Sim, já tentei com os 2 e não vai.
Cola o resultado do código abaixo:
dd($produtos);
Esse dd precisa estar logo depois do select.
Está imprimindo o array de array dos produtos
array:3 [▼
0 => {#179 ▼
+"id": 19
+"nome": "soares"
+"preco": 2
}
1 => {#181 ▼
+"id": 2
+"nome": "bbb"
+"preco": 22
}
2 => {#182 ▼
+"id": 13
+"nome": "1"
+"preco": 1
}
]
Aparentemente a saída do dd está em conformidade com o desejado.
se voce está usando o retorno
return response() ->json(['produtos' => $produtos ]);
Era pra funcionar perfeitamente.
Se achar viável, sobe o código no git ou compacta e coloca em algum lugar. Assim da pra olhar ele como um todo.
Não, se ele fizer assim:
return response() ->json(['produtos' => $produtos ]);
Ele está retornando um array, com um array de produtos. Então ele precisa fazer: produtos.produtos no js. Se ele fizer:
return response() ->json($produtos);
ai sim, ele já pega o array de produtos diretamente como eu acho que seja a intenção.
Não é assim?
Acho que o Wanderson também certo. Tenta ai é nos de um retorno
Bom dia senhores, desculpem a demora, não tenho acesso ao código nos fds, segue o link do projeto no git, https://github.com/YaakovDantas/laravel_vue_api
Pessoal consegui resolver, o problema era eu mesmo, estava usando uma mesma URL para retornar o array e também para retornar a view, quando separei os 2, deu certo, vlw ae, e muito obrigado pela paciência, e desculpa o abuso ;D
Por isso que ver o código na integra ajuda muito. De qualquer forma Thiago, parabéns!
Precisando pode contar com a gente.
Vlw, espero demorar a voltar kk