laravel5.8 crud

antes que nada:

Añadí las siguiente líneas de código en app/Providers/AppServiceProvider.php
use Illuminate\Support\Facades\Schema;

public function boot()
{
    Schema::defaultStringLength(191);
}
antes de hacer

php artisan migrate

( para rehacer todas las tablas: php artisan migrate:fresh )

-----------------------

crear el modelo (para nuestro ejemplo se creara uno llamado "Share")

php artisan make:model Share -m

editar el archivo de migracion creado para Share

y agregarle los campos del modelo:

$table->string('share_name'); 
$table->integer('share_price'); 
$table->integer('share_qty');


ejecutar la migracion para crear la tabla:

php artisan migrate

en Share.php agregar los campos a la propiedad fillable:

protected $fillable = [ 'share_name', 'share_price', 'share_qty' ];

crear el Controlador de Share con su respectivo recurso que haga referencia a los endpoints
del crud

php artisan make:controller ShareController --resource

editar routes/web.php
y agregar este nuevo recurso:

Route::resource('shares', 'ShareController');

crear en resources/views/ una carpeta nueva llamada shares en donde residiran 

las vistas de create/edit/index

los cuales deben un layout
empecemos por crear uno:

layout.blade.php

<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <meta http-equiv="X-UA-Compatible" content="ie=edge"> <title>Laravel 5.7 CRUD Example Tutorial</title> <link href="{{ asset('css/app.css') }}" rel="stylesheet" type="text/css" /> </head> <body> <div class="container"> @yield('content') </div> <script src="{{ asset('js/app.js') }}" type="text/js"></script> </body> </html>

en resources/views

crear la vista para la creacion de un Share llamado

create.blade.php

la cual se llamar desde el metodo create del controlador

en ShareController.php


  public function create()
    {
         return view('shares.create');
    }

http://localhost:8000/shares/create



Para guardar los datos en ShareController.php
implementamos el metodo store


use App\Share;
public function store(Request $request)
    {
      $request->validate([
        'share_name'=>'required',
        'share_price'=> 'required|integer',
        'share_qty' => 'required|integer'
      ]);
      $share = new Share([
        'share_name' => $request->get('share_name'),
        'share_price'=> $request->get('share_price'),
        'share_qty'=> $request->get('share_qty')
      ]);
      $share->save();
      return redirect('/shares')->with('success', 'Stock has been added');
    }


el cual si es exitoso va a llamar al metodo index, por lo que vamos a implementarlo asi:

  public function index()
    {
        $shares = Share::all();

        return view('shares.index', compact('shares'));
    }

y creamos la vista index.blade.php

@extends('layout')

@section('content')
<style>
  .uper {
    margin-top: 40px;
  }
</style>
<div class="uper">
  @if(session()->get('success'))
    <div class="alert alert-success">
      {{ session()->get('success') }}  
    </div><br />
  @endif
  <table class="table table-striped">
    <thead>
        <tr>
          <td>ID</td>
          <td>Stock Name</td>
          <td>Stock Price</td>
          <td>Stock Quantity</td>
          <td colspan="2">Action</td>
        </tr>
    </thead>
    <tbody>
        @foreach($shares as $share)
        <tr>
            <td>{{$share->id}}</td>
            <td>{{$share->share_name}}</td>
            <td>{{$share->share_price}}</td>
            <td>{{$share->share_qty}}</td>
            <td><a href="{{ route('shares.edit',$share->id)}}" class="btn btn-primary">Edit</a></td>
            <td>
                <form action="{{ route('shares.destroy', $share->id)}}" method="post">
                  @csrf
                  @method('DELETE')
                  <button class="btn btn-danger" type="submit">Delete</button>
                </form>
            </td>
        </tr>
        @endforeach
    </tbody>
  </table>
<div>
@endsection

editar 
ShareController.php

public function edit($id)
    {
        $share = Share::find($id);

        return view('shares.edit', compact('share'));
    }

y creamos la vista edit.blade.php

@extends('layout')

@section('content')
<style>
  .uper {
    margin-top: 40px;
  }
</style>
<div class="card uper">
  <div class="card-header">
    Edit Share
  </div>
  <div class="card-body">
    @if ($errors->any())
      <div class="alert alert-danger">
        <ul>
            @foreach ($errors->all() as $error)
              <li>{{ $error }}</li>
            @endforeach
        </ul>
      </div><br />
    @endif
      <form method="post" action="{{ route('shares.update', $share->id) }}">
        @method('PATCH')
        @csrf
        <div class="form-group">
          <label for="name">Share Name:</label>
          <input type="text" class="form-control" name="share_name" value={{ $share->share_name }} />
        </div>
        <div class="form-group">
          <label for="price">Share Price :</label>
          <input type="text" class="form-control" name="share_price" value={{ $share->share_price }} />
        </div>
        <div class="form-group">
          <label for="quantity">Share Quantity:</label>
          <input type="text" class="form-control" name="share_qty" value={{ $share->share_qty }} />
        </div>
        <button type="submit" class="btn btn-primary">Update</button>
      </form>
  </div>
</div>
@endsection


e implementamos el metodo que actualiza el modelo editado:

public function update(Request $request, $id)
     {
       $request->validate([
         'share_name'=>'required',
         'share_price'=> 'required|integer',
         'share_qty' => 'required|integer'
       ]);

       $share = Share::find($id);
       $share->share_name = $request->get('share_name');
       $share->share_price = $request->get('share_price');
       $share->share_qty = $request->get('share_qty');
       $share->save();

       return redirect('/shares')->with('success', 'Stock has been updated');
     }


Borrar un registro


implementamos el metodo destroyde ShareController

public function destroy($id)
{
     $share = Share::find($id);
     $share->delete();

     return redirect('/shares')->with('success', 'Stock has been deleted Successfully');
}





No hay comentarios:

Publicar un comentario

linux ubuntu mint actualizar chrome

 desde una terminal: $ sudo apt update $ sudo apt install google-chrome-stable