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

Redirecionamento

Após realizar a alteração das informações eu gostaria de redirecionar para a pagina principal.

public function editarDetalhes($id, Request $requisicao)
    {
        DB::transaction(function () use ($requisicao, $id) {
            $livro = Livro::query()->find($id);
            $livro->nomeLivro = $requisicao->nomeLivroEditado;
            $livro->autor = $requisicao->autorEditado;
            $livro->save();

            $requisicao->session()->flash('mensagem', "Informações do livro $requisicao->nomeLivroEditado forão atualizadas");
        });

        return redirect('/livros');
    }

Usei o redirect() só que não funciona. Embora o navegador receba a requisição de redirecionamento.(Print do navegador) https://drive.google.com/file/d/1ukHZWBMnLafNBDo3SFEb0q10z5mjk4PZ/view?usp=sharing

9 respostas

Olá, Mayki.

Não tenho acesso para ver esse print. Esse código está no seu controller? Parece estar certinho...

(Link) https://i.pinimg.com/originals/56/a5/d3/56a5d3fdc18d004ef64aae3853a31ff2.png

Sim o código está no controller só que o redirecionamento não ocorre.

Mayki, eu teria que analisar todo o seu código pra entender o que está acontecendo. Consegue colocar ele no GitHub?

Mayki, baixei seu projeto, configurei um banco de dados, inseri uma categoria manualmente e inseri um livro pela tela. Fui redirecionado sem problemas.

Até gravei um vídeo. Link para você baixá-lo: https://mega.nz/file/3dZRVaLa#I54h1EU_b1Du8tCxzrSeU0jVcn45UHo9pEII3cF7jQs

Sinto muito. Acabei sendo vago quanto ao erro. O erro ocorre na edição das informações do livro, na url (/livros/detalhes_livro/1) após salvar a edição ele não faz o redirecionamento.

A função que realiza a operação está no arquivo LivroController.php linha 58.

Mas, Mayki. Na edição você está fazendo uma requisição Ajax. Como espera que o Laravel faça o navegador redirecionar nesse caso?

solução!

Vi aqui no seu perfil que você já fez o curso de HTTP, então você vai entender:

HTTP funciona no esquema de Cliente-Servidor, certo? Via de regra, o próprio navegador é o cliente. A função redirect do Laravel simplesmente adiciona à resposta o cabeçalho Location que informa ao navegador que ele deve redirecionar o usuário para a URL específicada nesse cabeçalho. Até aí ok, né!?

Mas no caso de uma requisição Ajax, o cenário muda. O cliente não é o navegador em si, mas sim a sua função que faz a requisição. Dessa forma, é seu trabalho (através do JavaScript) redirecionar o usuário, entende?

Agora compreendi a separação entre os dois.

Resolvi utilizando uma tag <a> para o botão de salvar, assim eu consegui enviar uma requisição GET pelo navegador e fazer o redirecionamento pela rota ao mesmo tempo que envio um POST pelo JavaScript para atualizar as informações.

<a href="/livros/detalhes_livro/{{$livro->id}}/salvar" class="btn btn-success botao conteudo-editado desabilitado" id="salvar" disabled onclick="salvarInforcacoes({{$livro->id}})">Salvar</a>
Route::get('/livros/detalhes_livro/{id}/salvar', 'LivrosController@listaLivros');

Também percebi que se o meu objetivo erra fazer o redirecionamento após salvar, não faz muito sentido usar o JavaScript para fazer a requisição. Basta enviar por um <form>.

Obrigado pela ajuda.