Olá, não encontrei no curso a aula para efetuar a alteração no produto, temos adicionar, excluir, mostrar. Poderia encaminhar por favor?
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!