10. Curso de Laravel

10.-Laravel Tutorial en Español [crud] ¡¡En tiempo récord⚡!!

10. Curso%2Bde%2BLaravel

INTRODUCCION

En este tutorial vamos a trabajar con bases de datos osea CRUD para los que no sepan que es crud CRUD es esto
C= Create
R=Read
U=Update
D=Delete
En español
C= Crear
R=Leer
U=Actualizar
D=Borrar
En otras palabras vamos a crear , leer, actualizar y borrar registros de nuestra base de datos.

INSTALACION DE LARAVEL

Nos ubicamos en la carpeta de nuestra instalación de xampp en mi caso

cd /var/www/html

Creamos el proyecto de laravel con este comando

composer create-project laravel/laravel crudlaravel

Recordemos editar el archivo .env que esta en la raíz del proyecto con los accesos a nuestra bd.

Entramos en la carpeta del proyecto

cd crudlaravel

MIGRACIÓN Y MODELO

Creamos una migración

php artisan make:migration create_libros_table

Se creo un archivo en database/migrations/fecha_hash_create_libros_table.php lo editamos y debe quedar asi:

<?php

use IlluminateSupportFacadesSchema;
use IlluminateDatabaseSchemaBlueprint;
use IlluminateDatabaseMigrationsMigration;

class CreateLibrosTable extends Migration
{
    /**
     * Run the migrations.
     *
     * @return void
     */
    public function up()
    {
        Schema::create('libros', function (Blueprint $table) {
            $table->increments('id');
            $table->string('nombre');
            $table->string('resumen');
            $table->integer('npagina');
            $table->integer('edicion');
            $table->string('autor');
            $table->decimal('precio',5,2);
            $table->timestamps();
        });
    }

    /**
     * Reverse the migrations.
     *
     * @return void
     */
    public function down()
    {
        Schema::dropIfExists('libros');
    }
}

Ejecutamos la migracion:

php artisan migrate

Ahora creamos el modelo

php artisan make:model Libro

Se creo el archivo app/Libro.php ahora lo editamos para que quede asi:

<?php

namespace App;

use IlluminateDatabaseEloquentModel;

class Libro extends Model
{
    //
     protected $fillable = ['nombre', 'resumen', 'npagina','edicion','autor','precio'];
}

CONTROLADOR

Ahora creamos el controlador ejecutando este comando:

php artisan make:controller LibroController --resource

Se genero este archivo app/Http/Controllers/LibroController.php lo editamos para que quede asi:

<?php

namespace AppHttpControllers;

use IlluminateHttpRequest;
use AppLibro;

class LibroController extends Controller
{
    /**
     * Display a listing of the resource.
     *
     * @return IlluminateHttpResponse
     */
    public function index()
    {
        //
        $libros=Libro::orderBy('id','DESC')->paginate(3);
        return view('Libro.index',compact('libros'));
    }

    /**
     * Show the form for creating a new resource.
     *
     * @return IlluminateHttpResponse
     */
    public function create()
    {
        //
        return view('Libro.create');
    }

    /**
     * Store a newly created resource in storage.
     *
     * @param  IlluminateHttpRequest  $request
     * @return IlluminateHttpResponse
     */
    public function store(Request $request)
    {
        //
        $this->validate($request,[ 'nombre'=>'required', 'resumen'=>'required', 'npagina'=>'required', 'edicion'=>'required', 'autor'=>'required', 'npagina'=>'required', 'precio'=>'required']);
        Libro::create($request->all());
        return redirect()->route('libro.index')->with('success','Registro creado satisfactoriamente');
    }

    /**
     * Display the specified resource.
     *
     * @param  int  $id
     * @return IlluminateHttpResponse
     */
    public function show($id)
    {
        //
        $libros=Libro::find($id);
        return  view('Libro.show',compact('libros'));
    }

    /**
     * Show the form for editing the specified resource.
     *
     * @param  int  $id
     * @return IlluminateHttpResponse
     */
    public function edit($id)
    {
        //
        $libro=libro::find($id);
        return view('Libro.edit',compact('libro'));
    }

    /**
     * Update the specified resource in storage.
     *
     * @param  IlluminateHttpRequest  $request
     * @param  int  $id
     * @return IlluminateHttpResponse
     */
    public function update(Request $request, $id)
    {
        //
        $this->validate($request,[ 'nombre'=>'required', 'resumen'=>'required', 'npagina'=>'required', 'edicion'=>'required', 'autor'=>'required', 'npagina'=>'required', 'precio'=>'required']);
 
        libro::find($id)->update($request->all());
        return redirect()->route('libro.index')->with('success','Registro actualizado satisfactoriamente');
    }

    /**
     * Remove the specified resource from storage.
     *
     * @param  int  $id
     * @return IlluminateHttpResponse
     */
    public function destroy($id)
    {
        //
        Libro::find($id)->delete();
        return redirect()->route('libro.index')->with('success','Registro eliminado satisfactoriamente');
    }
}

RUTAS

Vamos a las rutas en el archivo routes/web.php y lo editamos para que quede asi:

<?php

/*
|--------------------------------------------------------------------------
| Web Routes
|--------------------------------------------------------------------------
|
| Here is where you can register web routes for your application. These
| routes are loaded by the RouteServiceProvider within a group which
| contains the "web" middleware group. Now create something great!
|
*/

Route::get('/', function () {
    return view('welcome');
});

Route::resource('libro', 'LibroController');

VISTAS

Creanos la carpeta /resources/views/layouts y dentro de layouts creamos el archivo layout.blade.php donde colocaremos este codigo:

<!DOCTYPE html>
<html lang="es">
<head>
 <meta charset="utf-8">
 <meta name="viewport"
 content="width=device-width, initial-scale=1, user-scalable=yes">
 <link href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.6/css/bootstrap.min.css" rel="stylesheet">
 <script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.6/js/bootstrap.min.js"></script>
</head>
<body>

 <div class="container-fluid" style="margin-top: 100px">

  @yield('content')
 </div>
 <style type="text/css">
 .table {
  border-top: 2px solid #ccc;

 }
</style>
</body>
</html>

Creanos la carpeta /resources/views/Libro y dentro de Libro creamos el archivo index.blade.php donde colocaremos este codigo:

@extends('layouts.layout')
@section('content')
<div class="row">
  <section class="content">
    <div class="col-md-8 col-md-offset-2">
      <div class="panel panel-default">
        <div class="panel-body">
          <div class="pull-left"><h3>Lista Libros</h3></div>
          <div class="pull-right">
            <div class="btn-group">
              <a href="{{ route('libro.create') }}" class="btn btn-info" >Añadir Libro</a>
            </div>
          </div>
          <div class="table-container">
            <table id="mytable" class="table table-bordred table-striped">
             <thead>
               <th>Nombre</th>
               <th>Resumen</th>
               <th>No. Páginas</th>
               <th>Edicion</th>
               <th>Autor</th>
               <th>Precio</th>
               <th>Editar</th>
               <th>Eliminar</th>
             </thead>
             <tbody>
              @if($libros->count())  
              @foreach($libros as $libro)  
              <tr>
                <td>{{$libro->nombre}}</td>
                <td>{{$libro->resumen}}</td>
                <td>{{$libro->npagina}}</td>
                <td>{{$libro->edicion}}</td>
                <td>{{$libro->autor}}</td>
                <td>{{$libro->precio}}</td>
                <td><a class="btn btn-primary btn-xs" href="{{action('[email protected]', $libro->id)}}" ><span class="glyphicon glyphicon-pencil"></span></a></td>
                <td>
                  <form action="{{action('[email protected]', $libro->id)}}" method="post">
                   {{csrf_field()}}
                   <input name="_method" type="hidden" value="DELETE">

                   <button class="btn btn-danger btn-xs" type="submit"><span class="glyphicon glyphicon-trash"></span></button>
                 </td>
               </tr>
               @endforeach 
               @else
               <tr>
                <td colspan="8">No hay registro !!</td>
              </tr>
              @endif
            </tbody>

          </table>
        </div>
      </div>
      {{ $libros->links() }}
    </div>
  </div>
</section>

@endsection

Dentro de la carpeta /resources/views/Libro creamos el archivo create.blade.php donde colocaremos este codigo:

@extends('layouts.layout')
@section('content')
<div class="row">
 <section class="content">
  <div class="col-md-8 col-md-offset-2">
   @if (count($errors) > 0)
   <div class="alert alert-danger">
    <strong>Error!</strong> Revise los campos obligatorios.<br><br>
    <ul>
     @foreach ($errors->all() as $error)
     <li>{{ $error }}</li>
     @endforeach
    </ul>
   </div>
   @endif
   @if(Session::has('success'))
   <div class="alert alert-info">
    {{Session::get('success')}}
   </div>
   @endif

   <div class="panel panel-default">
    <div class="panel-heading">
     <h3 class="panel-title">Nuevo Libro</h3>
    </div>
    <div class="panel-body">     
     <div class="table-container">
      <form method="POST" action="{{ route('libro.store') }}"  role="form">
       {{ csrf_field() }}
       <div class="row">
        <div class="col-xs-6 col-sm-6 col-md-6">
         <div class="form-group">
          <input type="text" name="nombre" id="nombre" class="form-control input-sm" placeholder="Nombre del libro">
         </div>
        </div>
        <div class="col-xs-6 col-sm-6 col-md-6">
         <div class="form-group">
          <input type="text" name="npagina" id="npagina" class="form-control input-sm" placeholder="Número de Páginas">
         </div>
        </div>
       </div>

       <div class="form-group">
        <textarea name="resumen" class="form-control input-sm" placeholder="Resumen"></textarea>
       </div>
       <div class="row">
        <div class="col-xs-6 col-sm-6 col-md-6">
         <div class="form-group">
          <input type="text" name="edicion" id="edicion" class="form-control input-sm" placeholder="Edición del libro">
         </div>
        </div>
        <div class="col-xs-6 col-sm-6 col-md-6">
         <div class="form-group">
          <input type="text" name="precio" id="precio" class="form-control input-sm" placeholder="Precio del libro">
         </div>
        </div>
       </div>
       <div class="form-group">
        <textarea name="autor" class="form-control input-sm" placeholder="Autor"></textarea>
       </div>
       <div class="row">

        <div class="col-xs-12 col-sm-12 col-md-12">
         <input type="submit"  value="Guardar" class="btn btn-success btn-block">
         <a href="{{ route('libro.index') }}" class="btn btn-info btn-block" >Atrás</a>
        </div> 

       </div>
      </form>
     </div>
    </div>

   </div>
  </div>
 </section>
 @endsection

Dentro de la carpeta /resources/views/Libro creamos el archivo edit.blade.php donde colocaremos este codigo:

@extends('layouts.layout')
@section('content')
<div class="row">
 <section class="content">
  <div class="col-md-8 col-md-offset-2">
   @if (count($errors) > 0)
   <div class="alert alert-danger">
    <strong>Error!</strong> Revise los campos obligatorios.<br><br>
    <ul>
     @foreach ($errors->all() as $error)
     <li>{{ $error }}</li>
     @endforeach
    </ul>
   </div>
   @endif
   @if(Session::has('success'))
   <div class="alert alert-info">
    {{Session::get('success')}}
   </div>
   @endif

   <div class="panel panel-default">
    <div class="panel-heading">
     <h3 class="panel-title">Nuevo Libro</h3>
    </div>
    <div class="panel-body">     
     <div class="table-container">
      <form method="POST" action="{{ route('libro.update',$libro->id) }}"  role="form">
       {{ csrf_field() }}
       <input name="_method" type="hidden" value="PATCH">
       <div class="row">
        <div class="col-xs-6 col-sm-6 col-md-6">
         <div class="form-group">
          <input type="text" name="nombre" id="nombre" class="form-control input-sm" value="{{$libro->nombre}}">
         </div>
        </div>
        <div class="col-xs-6 col-sm-6 col-md-6">
         <div class="form-group">
          <input type="text" name="npagina" id="npagina" class="form-control input-sm" value="{{$libro->npagina}}">
         </div>
        </div>
       </div>

       <div class="form-group">
        <textarea name="resumen" class="form-control input-sm"  placeholder="Resumen">{{$libro->resumen}}</textarea>
       </div>
       <div class="row">
        <div class="col-xs-6 col-sm-6 col-md-6">
         <div class="form-group">
          <input type="text" name="edicion" id="edicion" class="form-control input-sm" value="{{$libro->edicion}}">
         </div>
        </div>
        <div class="col-xs-6 col-sm-6 col-md-6">
         <div class="form-group">
          <input type="text" name="precio" id="precio" class="form-control input-sm" value="{{$libro->precio}}">
         </div>
        </div>
       </div>
       <div class="form-group">
        <textarea name="autor" class="form-control input-sm" placeholder="Autor">{{$libro->autor}}</textarea>
       </div>
       <div class="row">

        <div class="col-xs-12 col-sm-12 col-md-12">
         <input type="submit"  value="Actualizar" class="btn btn-success btn-block">
         <a href="{{ route('libro.index') }}" class="btn btn-info btn-block" >Atrás</a>
        </div> 

       </div>
      </form>
     </div>
    </div>

   </div>
  </div>
 </section>
 @endsection
Ads Blocker Image Powered by Code Help Pro

Ads Blocker Detected!!!

En Programador Novato vivimos de los anuncios, hemos detectado que está utilizando extensiones para bloquear anuncios. Ayudanos deshabilitando tu bloqueador de anuncios. :)