Olá, não encontrei no curso a aula para efetuar a alteração no produto, temos adicionar, excluir, mostrar. Poderia encaminhar por favor?
Você está vendo a versão anterior da nova experiência da Alura que estamos preparando para você. Em breve, ela ganha uma identidade visual novinha totalmente pensada em potencializar seus estudos!
Olá, não encontrei no curso a aula para efetuar a alteração no produto, temos adicionar, excluir, mostrar. Poderia encaminhar por favor?
Olá Leandro.
Não sei sobre a aula, mas posso mostrar um código genérico para você ter uma ideia:
//Controller
public function abrir(Request $r) {
$item = Model::find($r->id);
return view('suaview', $item);
}
public function editar(Request $r) {
$item = Model::find($r->id);
$item->descricao = $r->descricao;
$item->save();
return redirect('listagem');
}
//View
<form action="linkParaEditarItem" method="post">
<input type="hidden" name="id" value="{{$item->id}}">
<input type="text" name="descricao" value="{{$item->descricao}}">
<button type="submit">Atualizar</button>
</form>
Qualquer dúvida pode perguntar aqui.
Abraços!
Puxa vida amigo, muito obrigado. Vou testar aqui! Valeu.
De nada Leandro! Boa sorte.
Amigo por favor me ajuda, como faço para chamar o editar que esta dentro de ProdutoController.php
public function editar(ProdutoRequest $request) {
$produto = Model::find($p->id);
$produto->nome = $p->nome;
$produto->valor = $p->valor;
$produto->descricao = $p->descricao;
$produto->quantidade = $p->quantidade;
$produto->save();
return redirect('/produto.listagem');
}
Veja se o código está certo por favor. Abraço.
Leandro, para acessar esse método, você precisa mapea-lo no arquivo routes/web.php e acessar pelo navegador. Ou utilizar alguma ferramenta que realize requisições HTTP =)
Oi Leandro, apenas exemplificando o que o André disse, algo do tipo:
Route::post('/produtos/editar', ['as' => '/produtos/editar', 'uses' => 'ProdutoController@editar']);
E chame essa rota no seu form, usando a alias da rota:
<form action="{{route('/produtos/editar')}}" method="post">
Abraços.
Amigos se puderem ajudar, não está editando, segue os arquivos:
edita.blade.php
@extends('layout.principal')
@section('conteudo')
<h1>Edição do produto {{ $p->nome }}</h1>
<form action="{{route('/produtos/editar')}}" method="post">
<input name="_token" type="hidden" value="{!! csrf_token() !!}" />
<input type="hidden" name="id" value="{{ $p->id }}">
<div class="form-group">
<label>Nome</label>
<input type="text" class="form-control" name="nome" value="{{ $p->nome}}">
</div>
<div class="form-group">
<label>Valor</label>
<input type="text" class="form-control" name="valor" value="{{ $p->valor }}">
</div>
<div class="form-group">
<label>Descrição</label>
<input type="text" class="form-control" name="descricao" value="{{ $p->descricao }}">
</div>
<div class="form-group">
<label>Quantidade</label>
<input type="text" class="form-control" name="quantidade" value="{{ $p->quantidade }}">
</div>
<button type="submit" class="btn btn-primary">Atualizar</button>
</form>
@stop
routes.php
<?php
Route::get('/', function(){
return '<h1>Listagem de produtos</h1>';
});
Route::get('/produtos', 'ProdutoController@lista');
Route::get('/produtos/mostra/{id}', 'ProdutoController@mostra');
Route::get('/produtos/edita/{id}', 'ProdutoController@edita');
Route::post('/produtos/editar', ['as' => '/produtos/editar', 'uses' => 'ProdutoController@editar']);
Route::get('/produtos/remove/{id}', 'ProdutoController@remove');
Route::get('/produtos/novo', 'ProdutoController@novo');
Route::post('/produtos/adiciona', 'ProdutoController@adiciona');
Route::get('/login', 'LoginController@form');
Route::post('/login', 'LoginController@login');
Route::get('home', 'HomeController@index');
Route::controllers([
'auth' => 'Auth\AuthController',
'password' => 'Auth\PasswordController',
]);
ProdutoController.php
<?php namespace senge\Http\Controllers;
use Illuminate\Support\Facades\DB;
use Request;
use Validator;
use senge\Produto;
use senge\Categoria;
use senge\Http\Requests\ProdutoRequest;
class ProdutoController extends Controller {
//cria a autenticação!
public function __construct()
{
//se quiser travar o acesso apenas para o adiciona e o remove
//$this->middleware('auth', ['only' => ['adiciona', 'remove']]);
$this->middleware('auth');
}
public function lista(){
$produtos = Produto::all();
return view('/produto.listagem')->with('produtos', $produtos);
}
public function mostra($id){
$produto = Produto::find($id);
return view('/produto.detalhes')->with('p', $produto);
}
public function edita($id){
$produto = Produto::find($id);
return view('/produto.edita')->with('p', $produto);
}
public function remove($id){
$produto = Produto::find($id);
$produto->delete();
//redirecionamento de url mas indo para o método!
return redirect()->action('ProdutoController@lista');
//return redirect('/produtos');
}
public function novo(){
return view('/produto.formulario')->with('categorias', Categoria::all());
}
//ADICIONAR PRODUTOS
public function adiciona(ProdutoRequest $request){
Produto::create($request->all());
return redirect ('/produtos')->withInput();
}
public function editar(ProdutoRequest $request) {
$produto = Produto::find($id);
$produto->nome = $p->nome;
$produto->valor = $p->valor;
$produto->descricao = $p->descricao;
$produto->quantidade = $p->quantidade;
$produto->save();
return redirect('/produto.listagem');
}
}
Troque
$produto = Produto::find($id);
Por:
$produto = Produto::find($request->id);
Assim deve funcionar!
Olá amigo, ele ainda não atualiza, não dá nenhum erro ao tentar alterar simplesmente recarrega a página de edição:
ProdutoController.php
public function editar(ProdutoRequest $request) {
$produto = Produto::find($request->id);
$produto->nome = $p->nome;
$produto->valor = $p->valor;
$produto->descricao = $p->descricao;
$produto->quantidade = $p->quantidade;
$produto->save();
return redirect('/produto.listagem');
}
edita.blade.php
@extends('layout.principal')
@section('conteudo')
<h1>Edição do produto {{ $p->nome }}</h1>
<form action="{{route('/produtos/editar/')}}" method="post">
<input name="_token" type="hidden" value="{!! csrf_token() !!}" />
<input type="hidden" name="id" value="{{ $p->id }}">
<div class="form-group">
<label>Nome</label>
<input type="text" class="form-control" name="nome" value="{{ $p->nome}}">
</div>
<div class="form-group">
<label>Valor</label>
<input type="text" class="form-control" name="valor" value="{{ $p->valor }}">
</div>
<div class="form-group">
<label>Descrição</label>
<input type="text" class="form-control" name="descricao" value="{{ $p->descricao }}">
</div>
<div class="form-group">
<label>Quantidade</label>
<input type="text" class="form-control" name="quantidade" value="{{ $p->quantidade }}">
</div>
<button type="submit" class="btn btn-primary">Atualizar</button>
</form>
@stop
Não precisaria enviar o id via action do form?
Faça o seguinte. Ponha um "dd($produto);" na função editar, após o find. E fale o que aparece.
Amigo, está certo dessa forma?
Assim, só recarregou e não atualizou.
public function editar(ProdutoRequest $request) {
$produto = Produto::find($request->id);
dd($produto);
$produto->nome = $p->nome;
$produto->valor = $p->valor;
$produto->descricao = $p->descricao;
$produto->quantidade = $p->quantidade;
$produto->save();
return redirect('/produto.listagem');
Sim, dessa forma. Ele não mostrou nada depois da ação de editar?
Não mostrou nada, só da um refresh na página, sem nenhum erro!