ccc

Mostrando entradas con la etiqueta Laravel: Crud. Mostrar todas las entradas
Mostrando entradas con la etiqueta Laravel: Crud. Mostrar todas las entradas

Laravel: Crud (3º parte)

PAGINACIÓN
En el ClienteControllers en el show:
$arr = Cliente::simplePaginate(5);
return \View::make('cliente/show',compact('arr'));

En la vista resources/views/cliente/show.blade.php:
@if($arr->previousPageUrl())
   <a href="{{ $arr->previousPageUrl() }}" class="btn btn-success pull-right btn-sm">Anterior <i class="fa fa-arrow-circle-right"></i></a>
@endif

@if($arr->nextPageUrl())
   <a href="{{ $arr->nextPageUrl() }}" class="btn btn-success pull-right btn-sm">Siguiente <i class="fa fa-arrow-circle-right"></i></a>
@endif

Métodos de paginator:
$results->count()
$results->currentPage()
$results->firstItem()
$results->hasMorePages()
$results->lastItem()
$results->lastPage() (Not available when using simplePaginate)
$results->nextPageUrl()
$results->perPage()
$results->previousPageUrl()
$results->total() (Not available when using simplePaginate)
$results->url($page)


Subir ficheros tipo FILE de los formularios:
Modificamos el create.blade.php:
<form action="{{url('cliente')}}" method="post" enctype="multipart/form-data">
    {{ csrf_field() }}
    @include("cliente/listErrores")

    Nombre: <input type="text" name="nombre" value="{{old('nombre')}}"><br>
    Apellidos: <input type="text" name="apellidos" value="{{old('apellidos')}}"><br>
    Foto: <input type="file" name="urlFoto">
    <br><br>

    <input type="submit">
</form>

En ClienteController:
use Illuminate\Support\Facades\Storage;
public function store(Request $request)
    {
        $this->validate($request, [
            'nombre' => ['required', 'max:10'],
            'apellidos' => ['required', 'max:20'],
        ]);
        $item = new Cliente;
        $img = $request->file('urlFoto');
        $ruta_fich = time()."_".$img->getClientOriginalName();
        Storage::disk('imgClientes')->put($ruta_fich, file_get_contents($img->getRealPath()));

        $arr = $request->all();
        $arr["urlFoto"] = $ruta_fich;
        $item->create($arr);
        return redirect('cliente/show');
    }

En config/filesystems.php añadimos:
'disks' => [
        'imgClientes' => [
            'driver' => 'local',
            'root' => public_path('imgClientes'),
        ],

En el modelo de Cliente modificamos:
class Cliente extends Model
{
    protected $fillable = ["nombre", "apellidos", "urlFoto"];
}

También creamos ese nuevo campo de urlFoto en la BD

Para poder ver luego la imagen en la vista:
<img src="{{ asset('imgClientes') }}/{{ $item->urlFoto }}">

Laravel: Crud (2º parte)

use App\Cliente;
class ClienteController extends Controller
{

    public function index()
    {
        //
    }


    public function create()
    {
        $arr = array();
        return \View::make('cliente/create',compact('arr'));
        break;
    }


    public function store(Request $request)
    {
        $item = new Cliente;
        $item->create($request->all());
        return redirect('cliente/show');
    }

    public function show($id)
    {
        $arr = Cliente::all();
        return \View::make('cliente/show',compact('arr'));
        break;
    }


    public function edit($id)
    {
        $item = Cliente::find($id);
        return \View::make('cliente/edit',compact('item'));
    }


    public function update(Request $request, $id)
    {
        $item = Cliente::find($id);
        $item->nombre = $request->nombre;
        $item->apellidos = $request->apellidos;
        $item->save();
        return redirect('cliente/show');
    }

    public function destroy($id)
    {
        $item = Cliente::find($id);
        $item->delete();
        return redirect('cliente/show');
    }

    public function search(Request $request) {
        $arr = Cliente::where('nombre','like','%'.$request->buscando.'%')
            ->orWhere('apellidos','like','%'.$request->buscando.'%')
            ->get();

        return \View::make('cliente/show',compact('arr'));
        break;
    }
}

En Routes/web:
Route::resource('/cliente','ClienteController');
Route::post('/cliente/search', 'ClienteController@search');

Crear en resources/views/app.blade.php: // va a ser la estructura común para el resto de las vistas
<html>
<head>
    @section('head')
        <meta name="viewport" content="width=device-width, initial-scale=1.0">
        <link rel="stylesheet" href="http://maxcdn.bootstrapcdn.com/bootstrap/3.3.5/css/bootstrap.min.css">
    @show
</head>
<body>
<div class="container">
    @yield('content')
</div>

@section('footer_scripts')
    <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.3/jquery.min.js"></script>
    <script src="http://maxcdn.bootstrapcdn.com/bootstrap/3.3.5/js/bootstrap.min.js"></script>
@show
</body>
</html>

En resources/views/cliente/show.blade.php:
@extends('app')
@section('content')
    <div class="container">
        <div class="row">


<form method="post" action="{{url('cliente/search')}}">
    {{ csrf_field() }}
    <div class="form-group">
        <input type="text" class="form-control" name="buscando">
    </div>
    <button type="submit" class="btn btn-default">Buscar</button>
</form>

<hr>
<a href="{{ url('cliente/create') }}" class="btn btn-primary">Añadir nuevo</a>
<hr>

<table class="table table-condensed table-striped table-bordered">
    <thead>
    <tr>
        <th>Nombre</th>
        <th>Apellidos</th>
        <th></th>
        <th></th>
    </tr>
    </thead>
    <tbody>
    @foreach($arr as $item)
        <tr>
            <td>{{ $item->nombre }}</td>
            <td>{{ $item->apellidos }}</td>
            <td>
                <!-- <a class="btn btn-primary btn-xs" href="{{ url('cliente/'.$item->id.'/edit')}}" >MODIFICAR</a> -->
                <form method="post" action="{{route('cliente.edit', $item->id)}}">
                    {{ csrf_field() }}
                    <input name="_method" type="hidden" value="GET">
                    <input type="submit" value="MODIFICAR">
                </form>
            </td>
            <td>
                <form method="post" action="{{route('cliente.destroy', $item->id)}}">
                    {{ csrf_field() }}
                    <input name="_method" type="hidden" value="DELETE">
                    <input type="submit" value="BORRAR" onclick="return confirm('¿Estás seguro de querer borrarlo?');">
                </form>
            </td>

        </tr>
    @endforeach
    </tbody>
</table>
            </div>
        </div>

En resources/views/cliente/create.blade.php:
<form action="{{url('cliente')}}" method="post"> <!-- No hay que poner cliente/store -->
    {{ csrf_field() }}
    Nombre: <input type="text" name="nombre"><br>
    Apellidos: <input type="text" name="apellidos"><br>

    <input type="submit">
</form>

En resources/views/cliente/edit.blade.php:
<form action="{{route('cliente.update', $item->id)}}" method="post">
    {{ csrf_field() }}
    <input name="_method" type="hidden" value="PUT">
    Nombre: <input type="text" name="nombre" value="{{$item->nombre}}"><br>
    Apellidos: <input type="text" name="apellidos" value="{{$item->apellidos}}"><br>

    <input type="submit">
</form>

Laravel: Crud (1º parte)

Crear el modelo desde consola:
php artisan make:model Pelicula -m

Editar el modelo en app/Pelicula.php con los campos que va a tener:
protected $fillable = ["titulo", "director"];

Editar en database/migrations/create_peliculas_table:
Schema::create('literas', function (Blueprint $table) {
            $table->increments('id');
            $table->string("titulo");
            $table->string("director");
            $table->timestamps();
        });

Migrar para que se cree la table en la BD:
php artisan migrate

Crear el controlador:
php artisan make:controller PeliculaController --resource

En routes/web.php:
Route::resource('/pelicula','PeliculaController');