Bài đăng nổi bật

Trong hướng dẫn này, chúng ta sẽ triển khai một ứng dụng CRUD đơn giản dành cho người mới bắt đầu. Chúng ta sẽ đi lần lượt từng bước từng bước nha !!!!!

Step 1 : Install Laravel 8

Trước hết, chúng ta cần tải ứng dụng phiên bản Laravel 8 mới bằng cách sử dụng lệnh dưới đây, Vì vậy, hãy mở Terminal và viết lệnh: 


composer create-project --prefer-dist laravel/laravel codelean

Bước 2: Cấu hình cơ sở dữ liệuTrong bước thứ hai, chúng ta sẽ tạo cấu hình cơ sở dữ liệu, ví dụ: tên cơ sở dữ liệu, tên người dùng, mật khẩu, v.v.  Vì vậy, hãy mở tệp .env và điền tất cả các chi tiết như dưới đây:

.env

DB_CONNECTION=mysql

DB_HOST=127.0.0.1

DB_PORT=3306

DB_DATABASE=here your database name(blog)

DB_USERNAME=here database username(root)

DB_PASSWORD=here database password(root)

Step 3: Create Migration

Chúng ta sẽ tạo ứng dụng thô cho sản phẩm. Vì vậy chúng ta phải tạo chuyển đổi cho bảng "Product" bằng cách sử dụng lệnh php artisan, vì vậy, trước tiên hãy chạy lệnh dưới đây:

php artisan make:migration create_products_table --create=products

Sau lệnh này, bạn sẽ tìm thấy một tệp trong đường dẫn sau "database/migrations" và bạn phải đặt mã dưới đây vào migration file của mình để tạo bảng sản phẩm.

<?php

use Illuminate\Database\Migrations\Migration;

use Illuminate\Database\Schema\Blueprint;

use Illuminate\Support\Facades\Schema;

class CreateProductsTable extends Migration

{

/**

* Run the migrations.

*

* @return void

*/

public function up()

{

Schema::create('products', function (Blueprint $table) {

$table->id();

$table->string('name');

$table->text('detail');

$table->timestamps();

});

}

/**

* Reverse the migrations.

*

* @return void

*/

public function down()

{

Schema::dropIfExists('products');

}

}

Nào, bây giờ bạn hãy chạy lệnh sau để để thực hiện migration:

php artisan migrate

Step 4: Add Resource Route

Ở đây, chúng ta cần thêmresource rout cho ứng dụng CRUD sản phẩm. Vì vậy hãy mở tệp "route / web.php" của bạn và thêm route sau.

routes/web.php


use App\Http\Controllers\ProductController;

Route::resource('products', ProductController::class);

Step 5: Add Controller and Model

Trong bước này, bây giờ chúng ta nên tạo controller mới là ProductController. Vì vậy, chạy lệnh dưới đây và tạo controller mới.

php artisan make:controller ProductController --resource --model=Product


Sau lệnh dưới đây, bạn sẽ tìm thấy tệp mới trong đường dẫn này "app/Http/Controllers/ProductController.php"

Trong bộ điều khiển này sẽ tạo bảy phương thức theo mặc định như các phương thức dưới đây:

1)index()

2)create()

3)store()

4)show()

5)edit()

6)update()

7)destroy()

Vì vậy, hãy sao chép mã dưới đây và đặt vào tệp ProductController.php.

app/Http/Controllers/ProductController.php

<?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()

{

$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',

'detail' => 'required',

]);

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

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');

}

}


Ok, vì vậy sau khi chạy lệnh dưới đây, bạn sẽ tìm thấy "app/Models/Product.php" và code Product.php như dưới đây:

app/Models/Product.php

<?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'

];

}

Step 6: Add Blade Files

Trong bước cuối cùng này ta cần tạo các blade files. 

1) layout.blade.php

2) index.blade.php

3) create.blade.php

4) edit.blade.php

5) show.blade.php

Lần lượt các đoạn code như sau:

resources/views/products/layout.blade.php

<!DOCTYPE html>

<html>

<head>

<title>Laravel 8 CRUD Application - ItSolutionStuff.com</title>

<link href="https://cdnjs.cloudflare.com/ajax/libs/twitter-bootstrap/4.0.0-alpha/css/bootstrap.css" rel="stylesheet">

</head>

<body>

<div class="container">

@yield('content')

</div>

</body>

</html>

resources/views/products/index.blade.php

@extends('products.layout')

@section('content')

<div class="row">

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

<div class="pull-left">

<h2>Laravel 8 CRUD Example from scratch -CodeLean.vn</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>Name</th>

<th>Details</th>

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

</tr>

@foreach ($products as $product)

<tr>

<td>{{ ++$i }}</td>

<td>{{ $product->name }}</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>

{!! $products->links() !!}

@endsection

resources/views/products/create.blade.php

@extends('products.layout')

@section('content')

<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">

@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>Detail:</strong>

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

</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>

@endsection

resources/views/products/edit.blade.php

@extends('products.layout')

@section('content')

<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">

@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>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 text-center">

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

</div>

</div>

</form>

@endsection

resources/views/products/show.blade.php

@extends('products.layout')

@section('content')

<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>

<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>

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

<div class="form-group">

<strong>Details:</strong>

{{ $product->detail }}

</div>

</div>

</div>

@endsection

Bây giờ chúng ta đã sẵn sàng chạy ví dụ ứng dụng thô của mình vớ Laravel, vì vậy hãy chạy lệnh dưới đây để chạy:

php artisan serve

Bây giờ bạn có thể view trên trình duyệt 

http://localhost:8000/products

Bạn sẽ thấy kết quả như hình: 

List Page:



Add Page:



Edit Page:



Hy vọng hướng dẫn này đã giúp được bạn điều gì đó ;) 

Post a Comment

أحدث أقدم