DEV Community

Faisal Salvatore
Faisal Salvatore

Posted on

crud for Faisal Khan Zada

Crud controller code

<?php



namespace App\Http\Controllers;



use App\Models\Product;

use Illuminate\Http\Request;



class ProductController extends Controller

{

    /**

     * Display a listing of the resource.

     *

     * @return \Illuminate\Http\Response

     */

    public function index()

    {

        // return view('imageUpload');

        $products = Product::latest()->paginate(5);



        return view('products.index',compact('products'))

            ->with('i', (request()->input('page', 1) - 1) * 5);

    }



    /**

     * Show the form for creating a new resource.

     *

     * @return \Illuminate\Http\Response

     */

    public function create()

    {

        return view('products.create');

    }



    /**

     * Store a newly created resource in storage.

     *

     * @param  \Illuminate\Http\Request  $request

     * @return \Illuminate\Http\Response

     */

    public function store(Request $request)

    {



        $request->validate([

            'name' => 'required',
            'phone' => 'required',
            'email' => 'required',
            'zip' => 'required',
            'detail' => 'required',

        ]);


        $imageName = time().'.'.$request->image->extension();  
        $request->image->move(public_path('images'), $imageName);

        // Product::create($request->all());

        $product= new Product;
        $product->name= $request->name;
        $product->email= $request->email;
        $product->phone= $request->phone;
        $product->zip= $request->zip;
        $product->detail= $request->detail;
        $product->image= $imageName;
        $product->save();



        return redirect()->route('products.index')

                        ->with('success','Product created successfully.');

    }



    /**

     * Display the specified resource.

     *

     * @param  \App\Product  $product

     * @return \Illuminate\Http\Response

     */

    public function show(Product $product)

    {

        return view('products.show',compact('product'));

    } 



    /**

     * Show the form for editing the specified resource.

     *

     * @param  \App\Product  $product

     * @return \Illuminate\Http\Response

     */

    public function edit(Product $product)

    {

        return view('products.edit',compact('product'));

    }



    /**

     * Update the specified resource in storage.

     *

     * @param  \Illuminate\Http\Request  $request

     * @param  \App\Product  $product

     * @return \Illuminate\Http\Response

     */

    public function update(Request $request, Product $product)

    {

        $request->validate([

            'name' => 'required',

            'detail' => 'required',

        ]);



        $product->update($request->all());



        return redirect()->route('products.index')

                        ->with('success','Product updated successfully');

    }



    /**

     * Remove the specified resource from storage.

     *

     * @param  \App\Product  $product

     * @return \Illuminate\Http\Response

     */

    public function destroy(Product $product)

    {

        $product->delete();



        return redirect()->route('products.index')

                        ->with('success','Product deleted successfully');

    }

}
Enter fullscreen mode Exit fullscreen mode

Crud Model

<?php



namespace App\Models;



use Illuminate\Database\Eloquent\Factories\HasFactory;

use Illuminate\Database\Eloquent\Model;



class Product extends Model

{

    use HasFactory;



    // protected $fillable = [

    //     'name', 'detail','phone','email','zip'

    // ];

}
Enter fullscreen mode Exit fullscreen mode

index.blade.php

<!doctype html>
<html lang="en">
  <head>
    <meta charset="utf-8">
    <meta name="viewport" content="width=device-width, initial-scale=1">
    <title>Bootstrap demo</title>
    <link href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.3/dist/css/bootstrap.min.css" rel="stylesheet" integrity="sha384-QWTKZyjpPEjISv5WaRU9OFeRpok6YctnYmDr5pNlyT2bRjXh0JMhjY6hW+ALEwIH" crossorigin="anonymous">
  </head>
  <body>

    <script src="https://cdn.jsdelivr.net/npm/bootstrap@5.3.3/dist/js/bootstrap.bundle.min.js" integrity="sha384-YvpcrYf0tY3lHB60NNkmXc5s9fDVZLESaAA55NDzOxhy9GkcIdslK1eN7N6jIeHz" crossorigin="anonymous"></script>



<div class="row">

    <div class="col-lg-12 margin-tb">

        <div class="pull-left">

            <h2>Laravel 8 CRUD Example from scratch - ItSolutionStuff.com</h2>

        </div>

        <div class="pull-right">

            <a class="btn btn-success" href="{{ route('products.create') }}"> Create New Product</a>

        </div>

    </div>

</div>



@if ($message = Session::get('success'))

    <div class="alert alert-success">

        <p>{{ $message }}</p>

    </div>

@endif



<table class="table table-bordered">

    <tr>

        <th>No</th>
        <th>image</th>
        <th>Name</th>
        <th>phone</th>
        <th>email</th>
        <th>zip</th>

        <th>Details</th>

        <th width="280px">Action</th>

    </tr>

    @foreach ($products as $product)

    <tr>

        <td>{{ ++$i }}</td>
        <td>
            <img src="{{ asset('images/'.$product->image) }}" alt="My Image" width="250px" height="250px">

        </td>

        <td>{{ $product->name }}</td>
        <td>{{ $product->name }}</td>
        <td>{{ $product->phone }}</td>
        <td>{{ $product->email }}</td>
        <td>{{ $product->zip }}</td>

        <td>{{ $product->detail }}</td>

        <td>

            <form action="{{ route('products.destroy',$product->id) }}" method="POST">



                <a class="btn btn-info" href="{{ route('products.show',$product->id) }}">Show</a>



                <a class="btn btn-primary" href="{{ route('products.edit',$product->id) }}">Edit</a>



                @csrf

                @method('DELETE')



                <button type="submit" class="btn btn-danger">Delete</button>

            </form>

        </td>

    </tr>

    @endforeach

</table>


</body>
</html>
Enter fullscreen mode Exit fullscreen mode

Create.blade.php

<!doctype html>
<html lang="en">
  <head>
    <meta charset="utf-8">
    <meta name="viewport" content="width=device-width, initial-scale=1">
    <title>Bootstrap demo</title>
    <link href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.3/dist/css/bootstrap.min.css" rel="stylesheet" integrity="sha384-QWTKZyjpPEjISv5WaRU9OFeRpok6YctnYmDr5pNlyT2bRjXh0JMhjY6hW+ALEwIH" crossorigin="anonymous">
  </head>
  <body>

    <script src="https://cdn.jsdelivr.net/npm/bootstrap@5.3.3/dist/js/bootstrap.bundle.min.js" integrity="sha384-YvpcrYf0tY3lHB60NNkmXc5s9fDVZLESaAA55NDzOxhy9GkcIdslK1eN7N6jIeHz" crossorigin="anonymous"></script>




<div class="row">

    <div class="col-lg-12 margin-tb">

        <div class="pull-left">

            <h2>Add New Product</h2>

        </div>

        <div class="pull-right">

            <a class="btn btn-primary" href="{{ route('products.index') }}"> Back</a>

        </div>

    </div>

</div>



@if ($errors->any())

    <div class="alert alert-danger">

        <strong>Whoops!</strong> There were some problems with your input.<br><br>

        <ul>

            @foreach ($errors->all() as $error)

                <li>{{ $error }}</li>

            @endforeach

        </ul>

    </div>

@endif



<form action="{{ route('products.store') }}" method="POST"  enctype="multipart/form-data">

    @csrf



     <div class="row">

        <div class="col-xs-12 col-sm-12 col-md-12">

            <div class="form-group">

                <strong>Name:</strong>

                <input type="text" name="name" class="form-control" placeholder="Name">

            </div>

        </div>


        <div class="col-xs-12 col-sm-12 col-md-12">

            <div class="form-group">

                <strong>Phone:</strong>

                <input type="text" name="phone" class="form-control" placeholder="phone">

            </div>

        </div>



        <div class="col-xs-12 col-sm-12 col-md-12">

            <div class="form-group">

                <strong>Email:</strong>

                <input type="text" name="email" class="form-control" placeholder="email">

            </div>

        </div>



        <div class="col-xs-12 col-sm-12 col-md-12">

            <div class="form-group">

                <strong>Zip:</strong>

                <input type="text" name="zip" class="form-control" placeholder="zip">

            </div>

        </div>


        <div class="col-xs-12 col-sm-12 col-md-12">

            <div class="form-group">

                <strong>Detail:</strong>

                <textarea class="form-control" style="height:150px" name="detail" placeholder="Detail"></textarea>

            </div>

        </div>
        <div class="mb-3">

            <label class="form-label" for="inputImage">Image:</label>

            <input 

                type="file" 

                name="image" 

                id="inputImage"

                class="form-control @error('image') is-invalid @enderror">



            @error('image')

                <span class="text-danger">{{ $message }}</span>

            @enderror

        </div>
        <div class="col-xs-12 col-sm-12 col-md-12 text-center">

                <button type="submit" class="btn btn-primary">Submit</button>

        </div>

    </div>



</form>

</body>
</html>
Enter fullscreen mode Exit fullscreen mode

Edit.blade.php

<!doctype html>
<html lang="en">
  <head>
    <meta charset="utf-8">
    <meta name="viewport" content="width=device-width, initial-scale=1">
    <title>Edit Product</title>
    <link href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.3/dist/css/bootstrap.min.css" rel="stylesheet" integrity="sha384-QWTKZyjpPEjISv5WaRU9OFeRpok6YctnYmDr5pNlyT2bRjXh0JMhjY6hW+ALEwIH" crossorigin="anonymous">
  </head>
  <body>

    <script src="https://cdn.jsdelivr.net/npm/bootstrap@5.3.3/dist/js/bootstrap.bundle.min.js" integrity="sha384-YvpcrYf0tY3lHB60NNkmXc5s9fDVZLESaAA55NDzOxhy9GkcIdslK1eN7N6jIeHz" crossorigin="anonymous"></script>

    <div class="container mt-4">
      <div class="row">
          <div class="col-lg-12 margin-tb">
              <div class="pull-left">
                  <h2>Edit Product</h2>
              </div>
              <div class="pull-right">
                  <a class="btn btn-primary" href="{{ route('products.index') }}">Back</a>
              </div>
          </div>
      </div>

      @if ($errors->any())
          <div class="alert alert-danger">
              <strong>Whoops!</strong> There were some problems with your input.<br><br>
              <ul>
                  @foreach ($errors->all() as $error)
                      <li>{{ $error }}</li>
                  @endforeach
              </ul>
          </div>
      @endif

      <form action="{{ route('products.update', $product->id) }}" method="POST" enctype="multipart/form-data">
          @csrf
          @method('PUT')

          <div class="row">
              <div class="col-xs-12 col-sm-12 col-md-12">
                  <div class="form-group">
                      <strong>Name:</strong>
                      <input type="text" name="name" value="{{ $product->name }}" class="form-control" placeholder="Name">
                  </div>
              </div>

              <div class="col-xs-12 col-sm-12 col-md-12">
                  <div class="form-group">
                      <strong>Phone:</strong>
                      <input type="text" name="phone" value="{{ $product->phone }}" class="form-control" placeholder="Phone">
                  </div>
              </div>

              <div class="col-xs-12 col-sm-12 col-md-12">
                  <div class="form-group">
                      <strong>Email:</strong>
                      <input type="text" name="email" value="{{ $product->email }}" class="form-control" placeholder="Email">
                  </div>
              </div>

              <div class="col-xs-12 col-sm-12 col-md-12">
                  <div class="form-group">
                      <strong>Zip:</strong>
                      <input type="text" name="zip" value="{{ $product->zip }}" class="form-control" placeholder="Zip">
                  </div>
              </div>

              <div class="col-xs-12 col-sm-12 col-md-12">
                  <div class="form-group">
                      <strong>Detail:</strong>
                      <textarea class="form-control" style="height:150px" name="detail" placeholder="Detail">{{ $product->detail }}</textarea>
                  </div>
              </div>

              <div class="col-xs-12 col-sm-12 col-md-12">
                  <div class="form-group">

                      <strong>Current Image:</strong><br>
                      <img src=" {{asset('images/'. $product->image) }} " alt="Product Image" class="img-fluid mb-2" style="max-width: 200px; height: auto;">
                  </div>
                  <div class="form-group">
                      <strong>Upload New Image:</strong>
                      <input type="file" name="image" class="form-control">
                  </div>
              </div>

              <div class="col-xs-12 col-sm-12 col-md-12 text-center">
                  <button type="submit" class="btn btn-primary">Submit</button>
              </div>
          </div>
      </form>
    </div>

  </body>
</html>

Enter fullscreen mode Exit fullscreen mode

Show.blade.php

<!doctype html>
<html lang="en">
  <head>
    <meta charset="utf-8">
    <meta name="viewport" content="width=device-width, initial-scale=1">
    <title>Edit Product</title>
    <link href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.3/dist/css/bootstrap.min.css" rel="stylesheet" integrity="sha384-QWTKZyjpPEjISv5WaRU9OFeRpok6YctnYmDr5pNlyT2bRjXh0JMhjY6hW+ALEwIH" crossorigin="anonymous">
  </head>
  <body>

    <script src="https://cdn.jsdelivr.net/npm/bootstrap@5.3.3/dist/js/bootstrap.bundle.min.js" integrity="sha384-YvpcrYf0tY3lHB60NNkmXc5s9fDVZLESaAA55NDzOxhy9GkcIdslK1eN7N6jIeHz" crossorigin="anonymous"></script>

    <div class="container mt-4">
      <div class="row">
          <div class="col-lg-12 margin-tb">
              <div class="pull-left">
                  <h2>Edit Product</h2>
              </div>
              <div class="pull-right">
                  <a class="btn btn-primary" href="{{ route('products.index') }}">Back</a>
              </div>
          </div>
      </div>

      @if ($errors->any())
          <div class="alert alert-danger">
              <strong>Whoops!</strong> There were some problems with your input.<br><br>
              <ul>
                  @foreach ($errors->all() as $error)
                      <li>{{ $error }}</li>
                  @endforeach
              </ul>
          </div>
      @endif

      <form action="{{ route('products.update', $product->id) }}" method="POST" enctype="multipart/form-data">
          @csrf
          @method('PUT')

          <div class="row">
              <div class="col-xs-12 col-sm-12 col-md-12">
                  <div class="form-group">
                      <strong>Name:</strong>
                      <input type="text" name="name" value="{{ $product->name }}" class="form-control" placeholder="Name">
                  </div>
              </div>

              <div class="col-xs-12 col-sm-12 col-md-12">
                  <div class="form-group">
                      <strong>Phone:</strong>
                      <input type="text" name="phone" value="{{ $product->phone }}" class="form-control" placeholder="Phone">
                  </div>
              </div>

              <div class="col-xs-12 col-sm-12 col-md-12">
                  <div class="form-group">
                      <strong>Email:</strong>
                      <input type="text" name="email" value="{{ $product->email }}" class="form-control" placeholder="Email">
                  </div>
              </div>

              <div class="col-xs-12 col-sm-12 col-md-12">
                  <div class="form-group">
                      <strong>Zip:</strong>
                      <input type="text" name="zip" value="{{ $product->zip }}" class="form-control" placeholder="Zip">
                  </div>
              </div>

              <div class="col-xs-12 col-sm-12 col-md-12">
                  <div class="form-group">
                      <strong>Detail:</strong>
                      <textarea class="form-control" style="height:150px" name="detail" placeholder="Detail">{{ $product->detail }}</textarea>
                  </div>
              </div>

              <div class="col-xs-12 col-sm-12 col-md-12">
                  <div class="form-group">

                      <strong>Current Image:</strong><br>
                      <img src=" {{asset('images/'. $product->image) }} " alt="Product Image" class="img-fluid mb-2" style="max-width: 200px; height: auto;">
                  </div>
                  <div class="form-group">
                      <strong>Upload New Image:</strong>
                      <input type="file" name="image" class="form-control">
                  </div>
              </div>

              <div class="col-xs-12 col-sm-12 col-md-12 text-center">
                  <button type="submit" class="btn btn-primary">Submit</button>
              </div>
          </div>
      </form>
    </div>

  </body>
</html>

Enter fullscreen mode Exit fullscreen mode

Show.blade.php

<!doctype html>
<html lang="en">
  <head>
    <meta charset="utf-8">
    <meta name="viewport" content="width=device-width, initial-scale=1">
    <title>Bootstrap demo</title>
    <link href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.3/dist/css/bootstrap.min.css" rel="stylesheet" integrity="sha384-QWTKZyjpPEjISv5WaRU9OFeRpok6YctnYmDr5pNlyT2bRjXh0JMhjY6hW+ALEwIH" crossorigin="anonymous">
  </head>
  <body>

    <script src="https://cdn.jsdelivr.net/npm/bootstrap@5.3.3/dist/js/bootstrap.bundle.min.js" integrity="sha384-YvpcrYf0tY3lHB60NNkmXc5s9fDVZLESaAA55NDzOxhy9GkcIdslK1eN7N6jIeHz" crossorigin="anonymous"></script>




<div class="row">

    <div class="col-lg-12 margin-tb">

        <div class="pull-left">

            <h2> Show Product</h2>

        </div>

        <div class="pull-right">

            <a class="btn btn-primary" href="{{ route('products.index') }}"> Back</a>

        </div>

    </div>

</div>

</body>
</html>



<div class="row">

    <div class="col-xs-12 col-sm-12 col-md-12">

        <div class="form-group">

            <strong>Name:</strong>

            {{ $product->name }}

        </div>

        <div class="col-xs-12 col-sm-12 col-md-12">

            <div class="form-group">

                <strong>Phone:</strong>

                {{ $product->phone }}

            </div>


            <div class="col-xs-12 col-sm-12 col-md-12">

                <div class="form-group">

                    <strong>Email:</strong>

                    {{ $product->email }}

                </div>


                <div class="col-xs-12 col-sm-12 col-md-12">

                    <div class="form-group">

                        <strong>Zip:</strong>

                        {{ $product->zip }}

                    </div>

    </div>

    <div class="col-xs-12 col-sm-12 col-md-12">

        <div class="form-group">

            <strong>Details:</strong>

            {{ $product->detail }}

        </div>

    </div>


    <img src="{{asset('images/'. $product->image )}}" >


</div>
Enter fullscreen mode Exit fullscreen mode

Top comments (0)