Ainda não tem acesso? Estude com a gente! Matricule-se
Ainda não tem acesso? Estude com a gente! Matricule-se

Solucionado (ver solução)

Problemas de redirecionamento com "ACTION" do html

Fala galera, bom dia! tô com um probleminha. preciso redirecionar minha página ao adicionar um novo produto para a página de listagem e tenho esse código para tal,

public function adiciona(){

    $nome = Request::input('nome');
    $quantidade = Request::input('quantidade');
    $valor = Request::input('valor');
    $descricao = Request::input('descricao');

    DB::insert('insert into laravel (nome, valor, descricao, quantidade) values (?,?,?,?)',
    array($nome, $valor, $descricao, $quantidade));

  return redirect('/produtos');
}

No entanto ele parece não entrar nesse return pois a resposta que recebo da minha URL seria o valor que está no action (html) do formulário de adição, tentei alterar ele de várias formas até mesmo voltar uma pasta como por exemplo "../produtos" mas só tenho recebido erros dizendo que a página não foi encontrada, até mesmo com a URL certa. Desde já fico muito agradecido pela disponibilidade de vocês, obrigado!

7 respostas

Oi Kevin,

O redirect está certinho. É desse jeito que você fez mesmo.

Poste aqui o código do seu formulario html e também o arquivo com as rotas do projeto.

Ei Rodrigo, obrigado por me responder Arquivo de rotas

<?php

Route::get('/', function(){

    return  "oie ";
});
Route::get('/produtos', 'ProdutoController@lista');

Route::get('/produtos/mostrar/{id?}', 'ProdutoController@mostrar')->where('id', '[0-9]+');
Route::get('/produtos/novo', 'ProdutoController@novo');
Route::get('/produtos/fake', 'ProdutoController@adiciona' );
// Route::group(['middleware' => ['web']], function () {
//     // your routes here
// });


?>

Este daqui é o formulário

@extends('layout.principal')
@section('conteudo')
<form action="produtos/adiciona" method="post">
    <div class="form-group">    
        <input type="hidden" name="_token" value="{{ csrf_token() }}">
        <label> Nome:</label>
        <input class="form-control" type="" name="nome">         
    </div>
    <div class="form-group">    
        <label>Valor:</label>
        <input class="form-control" type="" name="valor">
    </div>
    <div class="form-group">
    <label>Quantidade:</label>
        <input class="form-control" type="" name="quantidade"><br/>
        <textarea class="form-control" placeholder="Descrição" name="descricao" ></textarea>
    </div>
    <button class="btn btn-primary" type="submit">Adicionar</button>
</form>
@stop

Este daqui é o meu blade principal, caso vc precise...

<!DOCTYPE html>
<html>
<head>
    <link href="/css/app.css" rel="stylesheet">
    <link href="/css/custom.css" rel="stylesheet">
    <title>Controle de estoque</title>
</head>
<body> 
    <div class="container">

          <nav class="navbar navbar-default">
    <div class="container-fluid">
    <div class="navbar-header">      
        <a class="navbar-brand" href="/produtos">Estoque Laravel</a>
    </div>
        <ul class="nav navbar-nav navbar-right">
            <li><a href="/produtos">Listagem</a></li>
            <li><a href="/produtos/novo">Novo</a></li>
        </ul>
    </div>
  </nav>
@yield('conteudo')
<footer class="footer">
      <p>© Controle de estoque do Kevin.</p>
</footer>
</div>
</body>
</html>

ops, esse "fake" ai em routes era um teste que eu estava fazendo, mas fique a vontade... o importante é funcionar

Oi Kevin, ele chegou a cadastrar no banco de dados?

Se não tiver gravado no banco, o Controller nem está sendo chamado mesmo.

Daí acho que pode ser porque está faltando a barra(/) inicial na action:

<form action="/produtos/adiciona" method="post">

Veja se assim resolve.

Rodrigo ele não cadastrou no banco de dados, aplicação funciona o normal desde que eu não tente fazer esse redirecionamento.

Eu tentando fazer isso:

<form action="/produtos/adiciona" method="post">

Eu recebo um erro: MethodNotAllowedHttpException in RouteCollection.php line 207:

e uma serie de linhas: in RouteCollection.php line 207 at RouteCollection->methodNotAllowed(array('GET', 'HEAD')) in RouteCollection.php line 194 at RouteCollection->getRouteForMethods(object(Request), array('GET', 'HEAD')) in RouteCollection.php line 142 at RouteCollection->match(object(Request)) in Router.php line 729 at Router->findRoute(object(Request)) in Router.php line 652 at Router->dispatchToRoute(object(Request)) in Router.php line 628 at Router->dispatch(object(Request)) in Kernel.php line 214 at Kernel->Illuminate\Foundation\Http{closure}(object(Request)) at call_user_func(object(Closure), object(Request)) in Pipeline.php line 141 at Pipeline->Illuminate\Pipeline{closure}(object(Request)) in VerifyCsrfToken.php line 43 at VerifyCsrfToken->handle(object(Request), object(Closure)) in VerifyCsrfToken.php line 17 at VerifyCsrfToken->handle(object(Request), object(Closure)) in Pipeline.php line 125 at Pipeline->Illuminate\Pipeline{closure}(object(Request)) in ShareErrorsFromSession.php line 55 at ShareErrorsFromSession->handle(object(Request), object(Closure)) in Pipeline.php line 125 at Pipeline->Illuminate\Pipeline{closure}(object(Request)) in StartSession.php line 61 at StartSession->handle(object(Request), object(Closure)) in Pipeline.php line 125 at Pipeline->Illuminate\Pipeline{closure}(object(Request)) in AddQueuedCookiesToResponse.php line 36 at AddQueuedCookiesToResponse->handle(object(Request), object(Closure)) in Pipeline.php line 125 at Pipeline->Illuminate\Pipeline{closure}(object(Request)) in EncryptCookies.php line 40 at EncryptCookies->handle(object(Request), object(Closure)) in Pipeline.php line 125 at Pipeline->Illuminate\Pipeline{closure}(object(Request)) in CheckForMaintenanceMode.php line 42 at CheckForMaintenanceMode->handle(object(Request), object(Closure)) in Pipeline.php line 125 at Pipeline->Illuminate\Pipeline{closure}(object(Request)) at call_user_func(object(Closure), object(Request)) in Pipeline.php line 101 at Pipeline->then(object(Closure)) in Kernel.php line 115 at Kernel->sendRequestThroughRouter(object(Request)) in Kernel.php line 84 at Kernel->handle(object(Request)) in index.php line 53 at require_once('C:\Users\Kaiser\Desktop\laravel\estoque\public\index.php') in server.php line 21

Numeradas até o 28...

Minha URL fica assim: http://localhost:8000/produtos/adiciona

solução

Oi Kevin,

Esqueci também te um coisa, como esse formulário dispara uma requisição do tipo post, você tem que alterar na rota:

Route::post('/produtos/adiciona', 'ProdutoController@adiciona' );

Agora deve funcionar :)

Putz, é verdade que símples. Agora funcionou, obrigado mano!