Lección 19: CRUD producto
Creamos un controlador en una carpeta Admin, donde programamos los métodos para gestionar la información del objeto Productos a través de vistas Blade.
<?php
namespace App\Http\Controllers\Admin;
use App\Http\Controllers\Controller;
use Illuminate\Http\Request;
use App\Models\Producto;
use Illuminate\Support\Str;
use Image;
use Session;
class ProductoController extends Controller
{
public function index(){
if(!empty(Session::get('categoria_id'))){
$productos = Producto::whereCategoria_id(Session::get('categoria_id'))->get();
return view("admin.producto.index",compact('productos'));
}
}
public function create(){
return view('admin.producto.create');
}
public function store(Request $request){
$producto = new Producto($request->all());
if($request->hasFile('urlfoto')){
$imagen = $request->file('urlfoto');
$nuevonombre = Str::slug($request->nombre).'.'.$imagen->guessExtension();
Image::make($imagen->getRealPath())
->resize(1024,null,function($constraint){ $constraint->aspectRatio(); })
->save( public_path('/img/producto/'.$nuevonombre));
$producto->urlfoto = $nuevonombre;
}
$producto->categoria_id = Session::get('categoria_id');
$producto->slug = Str::slug($request->nombre);
$producto->save();
return redirect('/admin/producto');
}
public function update(Request $request,$id){
$producto = Producto::findOrFail($id);
$producto->fill($request->all());
$foto_anterior = $producto->urlfoto;
if($request->hasFile('urlfoto')){
$rutaAnterior = public_path('/img/producto/'.$foto_anterior);
if(file_exists($rutaAnterior)){ unlink(realpath($rutaAnterior)); }
$imagen = $request->file('urlfoto');
$nuevonombre = Str::slug($request->nombre).'.'.$imagen->guessExtension();
Image::make($imagen->getRealPath())
->resize(1024,null,function($constraint){ $constraint->aspectRatio(); })
->save( public_path('/img/producto/'.$nuevonombre));
$producto->urlfoto = $nuevonombre;
}
$producto->slug = Str::slug($request->nombre);
$producto->save();
return redirect('/admin/producto');
}
public function edit($id){
$producto = Producto::findOrFail($id);
return view('admin.producto.edit',compact('producto'));
}
public function destroy($id){
$producto = Producto::findOrFail($id);
$borrar = public_path('/img/producto/'.$producto->urlfoto);
if(file_exists($borrar)){ unlink(realpath($borrar)); }
$producto->delete();
return redirect('/admin/producto');
}
}
VISTAS BLADE
index.blade.php
@extends('layouts.app')
@section('content')
<div class="container">
<div class="row">
@include('admin.submenu')
<div class="col-sm-10">
<a href="{{route('producto.create')}}" class="btn btn-success">NUEVO</a>
<table class="table table-striped">
<thead>
<th>Orden</th>
<th>Nombre</th>
<th>Acción</th>
</thead>
<tbody>
@forelse ($productos as $item)
<tr>
<td>{{$item->orden}}</td>
<td>{{$item->nombre}}</td>
<td>
<a href="{{ route('producto.edit',$item->id)}}" class="btn btn-success">EDITAR</a>
{!! Form::open(['method'=>'DELETE','route'=>['producto.destroy',$item->id],'style'=>'display:inline']) !!}
{!! Form::submit('ELIMINAR',['class'=>'btn btn-success','onclick'=>'return confirm("ESTA SEGURO DE ELIMINAR")']) !!}
{!! Form::close() !!}
</td>
</tr>
@empty
@endforelse
</tbody>
</table>
</div>
</div>
</div>
@endsection
create.blade.php
@extends('layouts.app')
@section('content')
<div class="container-fluid">
<div class="row">
@include('admin.submenu')
<div class="col-sm-10">
{!! Form::open(['route'=>['producto.store'],'method'=>'POST','files'=>true]) !!}
<div class="jumbotron">
<div class="form-group">
<label for="title">INGRESE TITLE</label>
{!! Form::text('title',null ,['class'=>'form-control','maxlength'=>'67']) !!}
</div>
<div class="form-group">
<label for="description">INGRESE DESCRIPTION</label>
{!! Form::text('description',null ,['class'=>'form-control','maxlength'=>'67']) !!}
</div>
<div class="form-group">
<label for="nombre">INGRESE NOMBRE</label>
{!! Form::text('nombre',null ,['class'=>'form-control','maxlength'=>'67']) !!}
</div>
<div class="form-group">
<label for="descripcion">INGRESE DESCRIPCIÓN</label>
{!! Form::text('descripcion',null ,['class'=>'form-control','maxlength'=>'67']) !!}
</div>
<div class="form-group">
<label for="orden">INGRESE ORDEN</label>
{!! Form::text('orden',null ,['class'=>'form-control']) !!}
</div>
<div class="form-group">
<label for="urlfoto">IMAGEN</label> <br>
<img src="/img/producto/foto.jpg">
{!! Form::file('urlfoto') !!}
</div>
</div>
{!! Form::submit('GUARDAR',['class'=>'btn btn-success']) !!}
{!! Form::close() !!}
</div>
</div>
</div>
@endsection
edit.blade.php
@extends('layouts.app')
@section('content')
<div class="container-fluid">
<div class="row">
@include('admin.submenu')
<div class="col-sm-10">
{!! Form::open(['route'=>['producto.update',$producto],'method'=>'PUT','files'=>true]) !!}
<div class="jumbotron">
<div class="form-group">
<label for="title">INGRESE TITLE</label>
{!! Form::text('title',$producto->title,['class'=>'form-control','maxlength'=>'67']) !!}
</div>
<div class="form-group">
<label for="description">INGRESE description</label>
{!! Form::text('description',$producto->description,['class'=>'form-control','maxlength'=>'67']) !!}
</div>
<div class="form-group">
<label for="nombre">INGRESE NOMBRE</label>
{!! Form::text('nombre',$producto->nombre,['class'=>'form-control','maxlength'=>'67']) !!}
</div>
<div class="form-group">
<label for="descripcion">INGRESE DESCRIPCIÓN</label>
{!! Form::text('descripcion',$producto->descripcion,['class'=>'form-control','maxlength'=>'67']) !!}
</div>
<div class="form-group">
<label for="orden">INGRESE ORDEN</label>
{!! Form::text('orden',$producto->orden,['class'=>'form-control']) !!}
</div>
<div class="form-group">
<label for="urlfoto">IMAGEN</label> <br>
<img src="/img/producto/{{$producto->urlfoto}}">
{!! Form::file('urlfoto') !!}
</div>
</div>
{!! Form::submit('GUARDAR',['class'=>'btn btn-success']) !!}
{!! Form::close() !!}
</div>
</div>
</div>
@endsection
2257 visitas