IMG-LOGO
×

Hướng dẫn cài đặt môi trường

[Bài Viết] Hướng dẫn cài composer [Bài Viết] Hướng dẫn tạo dự án Laravel đầu tay. [Bài Viết] Hướng dẫn cấu hình cơ sở dữ liệu và bật chức năng auth có sẵn trong Laravel [Bài Viết] Hướng dẫn cài theme Acacha AdminLTE cho Laravel [Bài Viết] Hướng dẫn tắt debug khi upload dự án laravel lên HOST [Video] Hướng dẫn cài đặt môi trường + tạo dự án + Tìm hiểu Route qua ví dụ - Lập trình Laravel [Video] Hướng dẫn cài đặt dự án Laravel + Cài đặt chức năng Auth (login + register) trong Laravel

Tìm hiểu Route & View & Controller

[Video] Tìm hiểu Route trong Laravel + Học lập trình laravel qua ví dụ Hello World, ax+b=0, Hiển thị danh sách sinh viên [Video] Tìm hiểu Route qua ví dụ quản lý sinh viên - Laravel [Video] Hướng dẫn tìm hiểu Route - Controller - View trong Laravel qua ví dụ [Video] Lập trình Laravel - Truyền dữ liệu từ Controller qua View - Ví dụ Hello World trong Laravel Phần 1 [Video] Lập trình Laravel - Truyền dữ liệu từ Controller qua View - Ví dụ Tính giai thừa trong Laravel Phần 2 [Video] Lập trình Laravel - Truyền dữ liệu từ Controller qua View - Ví dụ hiển thị danh sách sinh viên trong Laravel Phần 3

GET/POST trong Laravel

[Video] Tìm hiểu GET/POST trong Laravel qua ví dụ nhập thông tin người dùng - Lập trình Laravel [Video] Quản lý sinh viên bằng Laravel - Lập trình Laravel

Layout - Blade

[Video] Tìm hiểu Route - Blade (nhung css/js/photos) - cú pháp Blade - Xử lý GET/POST trong Laravel [Video] Hướng dẫn tìm hiểu layout trong Laravel - qua ví dụ tạo website tin tức - Lập Trình Laravel

Kết nối CSDL - Laravel

[Video] Hướng dẫn tìm hiểu view, migration, seeder, db - laravel - Qua ví dụ quản lý sinh viên [Video] Học Laravel qua ví dụ thêm & hiển thị tài khoản người dung - DB::Insert - DB::get - Paginate - Khoá Học Laravel [Video] - Chương trình quản lý điểm danh Aptech - Lập trình Laravel - Lập trình PHP/Laravel [Video] Bài tập quản lý sách bằng Laravel - Full Source Code quản lý sách - Lập trình Laravel [Video] - Tạo 1 POS bán hàng cho siêu thị - Supper Market - Lập trình Laravel [Video] Hướng dẫn tim hiểu Pagination + model qua ví dụ quản lý sinh viên - Lập trình Laravel

Phân quyền - Chức năng nâng cao

[Video] - Tìm hiểu Auth trong Laravel [Video] Phân Quyền-Hướng dẫn viết chức năng phân quyền người dùng theo role Lâp Trình PHP/Laravel [Video] API Resful Laravel - Hướng dẫn tạo API Resful bằng PHP/Laravel - Khóa học lập trình PHP/Laravel

Thực Chiến: Web bán hàng

[Video] Hướng dẫn tạo dự án super market - phần 1 - Laravel [Video] Hướng dẫn tạo dự án super market - phần 2- laravel [Video] Tạo giở hàng - học lập trình laravel qua project- Phần 3 - laravel




Trang Chủ Học Laravel Ôn tập - Chương trình quản lý sách + danh mục sách - Lập trình PHP, Laravel

Ôn tập - Chương trình quản lý sách + danh mục sách - Lập trình PHP, Laravel

by GokiSoft.com - 18:50 30/10/2021 3,522 Lượt Xem

Thiết kế website bằng laravel gồm các chức năng sau.

- Tạo 2 bảng : danh mục (id, tên danh mục), sách (id, id danh mục, tiêu đề, giá, href_param, nội dung, ngày tạo, ngày cập nhật)

- Viết chương trình gồm các chức năng sau

1. Thêm sửa xoá danh mục

2. Thêm sửa xoá sách

- Viết page hiển thị danh sách sách, click vào sách hiển thị trang chi tiết.

Bình luận



Chia sẻ từ lớp học

thienphu [T1907A]

Ngày viết: 09:31 08/07/2020


#ModalSeeder.php


<?php

use Illuminate\Database\Seeder;

class ModalSeeder extends Seeder
{
    /**
     * Run the database seeds.
     *
     * @return void
     */
    public function run()
    {
        DB::table('author')->insert([
            // [
            //     'nickname' => 'smileahjhj',
            //     'fullname' => 'do thien phu',
            //     'email' => '[email protected]',
            //     'address' => 'Ha noi',
            //     'phone_number' => '123456',
            //     'created_at' => date('Y-m-d H:i:s'),
            //     'updated_at' => date('Y-m-d H:i:s')],
            // [
            //     'nickname' => 'daikute',
            //     'fullname' => 'do thien phu',
            //     'email' => '[email protected]',
            //     'address' => 'Ha noi',
            //     'phone_number' => '123456',
            //     'created_at' => date('Y-m-d H:i:s'),
            //     'updated_at' => date('Y-m-d H:i:s')],
            // [
            //     'nickname' => 'cristiano',
            //     'fullname' => 'do thien phu',
            //     'email' => '[email protected]',
            //     'address' => 'Ha noi',
            //     'phone_number' => '123456',
            //     'created_at' => date('Y-m-d H:i:s'),
            //     'updated_at' => date('Y-m-d H:i:s')],
            // [
            //     'nickname' => 'yanio',
            //     'fullname' => 'do thien phu',
            //     'email' => '[email protected]',
            //     'address' => 'Ha noi',
            //     'phone_number' => '123456',
            //     'created_at' => date('Y-m-d H:i:s'),
            //     'updated_at' => date('Y-m-d H:i:s')],
            // [
            //     'nickname' => 'bicassto',
            //     'fullname' => 'do thien phu',
            //     'email' => '[email protected]',
            //     'address' => 'Ha noi',
            //     'phone_number' => '123456',
            //     'created_at' => date('Y-m-d H:i:s'),
            //     'updated_at' => date('Y-m-d H:i:s')],
            // [
            //     'nickname' => 'chicharit',
            //     'fullname' => 'do thien phu',
            //     'email' => '[email protected]',
            //     'address' => 'Ha noi',
            //     'phone_number' => '123456',
            //     'created_at' => date('Y-m-d H:i:s'),
            //     'updated_at' => date('Y-m-d H:i:s')],
            // [
            //     'nickname' => 'bicassto5',
            //     'fullname' => 'do thien phu',
            //     'email' => '[email protected]',
            //     'address' => 'Ha noi',
            //     'phone_number' => '123456',
            //     'created_at' => date('Y-m-d H:i:s'),
            //     'updated_at' => date('Y-m-d H:i:s')],
            // [
            //     'nickname' => 'tiket01',
            //     'fullname' => 'do thien phu',
            //     'email' => '[email protected]',
            //     'address' => 'Ha noi',
            //     'phone_number' => '123456',
            //     'created_at' => date('Y-m-d H:i:s'),
            //     'updated_at' => date('Y-m-d H:i:s')],
            // [
            //     'nickname' => 'maria',
            //     'fullname' => 'do thien phu',
            //     'email' => '[email protected]',
            //     'address' => 'Ha noi',
            //     'phone_number' => '123456',
            //     'created_at' => date('Y-m-d H:i:s'),
            //     'updated_at' => date('Y-m-d H:i:s')],
            // [
            //     'nickname' => 'osaka',
            //     'fullname' => 'do thien phu',
            //     'email' => '[email protected]',
            //     'address' => 'Ha noi',
            //     'phone_number' => '123456',
            //     'created_at' => date('Y-m-d H:i:s'),
            //     'updated_at' => date('Y-m-d H:i:s')],
            [
                'nickname' => 'tokura',
                'fullname' => 'do thien phu',
                'email' => '[email protected]',
                'address' => 'Ha noi',
                'phone_number' => '123456',
                'created_at' => date('Y-m-d H:i:s'),
                'updated_at' => date('Y-m-d H:i:s')],
        ]);
    }
}


#2020_07_06_133011_create_author_table.php


<?php

use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;

class CreateAuthorTable extends Migration
{
    /**
     * Run the migrations.
     *
     * @return void
     */
    public function up()
    {
        Schema::create('author', function (Blueprint $table) {
            $table->string('nickname',25);
            $table->primary('nickname');
            $table->string('fullname',150);
            $table->string('email',150);
            $table->string('address',250);
            $table->string('phone_number',15);
            $table->timestamps();
        });
    }

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


#2020_07_07_001011_create_book_table.php


<?php

use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;

class CreateBookTable extends Migration
{
    /**
     * Run the migrations.
     *
     * @return void
     */
    public function up()
    {
        Schema::create('book', function (Blueprint $table) {
            $table->increments('id');
            $table->string('title',250);
            $table->text('content');
            $table->float('price');
            $table->string('nxb',50);
            $table->string('nickname',25);
            $table->foreign('nickname')->references ('nickname')->on('author');
            $table->timestamps();
        });
    }

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


#AuthorController.php


<?php

namespace App\Http\Controllers\Modal;

use App\Http\Controllers\Controller;
use DB;
use Illuminate\Http\Request;

class AuthorController extends Controller
{
    public function index(Request $request)
    {
        //hiển thị theo ý muốn khi lấy dư liệu về
        $userList = DB::table('author')
        ->orderBy('created_at','asc') 
        ->paginate(10);
        return view('Modal.author.index')->with([
            'userList' => $userList,
        ]);

    }
    public function viewAdd(Request $request)
    {
        return view('Modal.author.viewadd');
    }
    public function postAddAuthor(Request $request)
    {
        //check validate
        $nickname = $request->nickname;
        $authorList = DB::table('author')
            ->where('nickname', $nickname)
            ->get();
        if ($authorList != null && count($authorList) > 0) {
            return 'error';
        }
        DB::table('author')->insert([
            'nickname' => $request->nickname,
            'fullname' => $request->fullname,
            'email' => $request->email,
            'address' => $request->address,
            'phone_number' => $request->phone_number,
            'created_at' => date('Y-m-d H:i:s'),
            'updated_at' => date('Y-m-d H:i:s'),
        ]);
        return redirect()->route('viewAuthorList');

    }
}


#BookController.php


<?php

namespace App\Http\Controllers\Modal;

use App\Http\Controllers\Controller;
use DB;
use Illuminate\Http\Request;

class BookController extends Controller
{
    public function index(Request $request)
    {
        //hiển thị theo ý muốn khi lấy dư liệu về
        $BookList = DB::table('book')
            ->leftJoin('author', 'author.nickname', '=', 'book.nickname') // nối bảng author vs book
            ->select('book.*', 'author.fullname')
            ->orderBy('author.created_at', 'asc')
            ->paginate(10);
        return view('Modal.book.index')->with([
            'index' => 1,
            'BookList' => $BookList,
        ]);

    }
    public function viewAdd(Request $request)
    {
        $authorList = DB::table('author')
            ->select('nickname', 'fullname') // lay dữ liệu chỉ cột nickname,fullname
            ->orderBy('created_at', 'asc')
            ->get();
        return view('Modal.book.viewaddbook')->with([
            'authorList' => $authorList,
        ]);
    }
    public function postAddBook(Request $request)
    {
        DB::table('book')->insert([
            'title' => $request->title,
            'content' => $request->content,
            'price' => $request->price,
            'nxb' => $request->nxb,
            'nickname' => $request->nickname,
            'created_at' => date('Y-m-d H:i:s'),
            'updated_at' => date('Y-m-d H:i:s'),
        ]);
        return redirect()->route('viewBookList');
    }
    public function deletedIdBook(Request $request)
    {
        DB::table('book')->where('id', $request->id)->delete();
        return redirect()->route('viewBookList');
    }
    public function editbook(Request $request)
    {
        $authorList = DB::table('author')
            ->select('nickname')
            ->orderBy('created_at', 'asc')
            ->get();
        $book = DB::table('book')
            ->where('id', $request->id)
            ->get();
        $book1 = $book[0];
        return view('Modal.book.editbook')->with([
            'authorList' => $authorList,
            'book1' => $book1,
        ]);
    }
    public function updateBook(Request $request)
    {

        //cột nào update mới add vào
        DB::table('book')->where('id', $request->id)
            ->update([
                'title' => $request->title,
                'content' => $request->content,
                'price' => $request->price,
                'nxb' => $request->nxb,
                'nickname' => $request->nickname,
                'updated_at' => date('Y-m-d H:i:s'),
            ]);

        return redirect()->route('viewBookList');

    }
    public function searchBook(Request $request)
    {
        $timkiem = $request->get('timkiem');
        $BookList = DB::table('book')
            ->where('title', 'like', '%' . $timkiem . '%')
            ->paginate(5);
        return view('Modal.book.index')->with([
            'index' => 1,
            'BookList' => $BookList,
        ]);

    }
}


#index.blade.php


<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Show List Author</title>
	<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.4.1/css/bootstrap.min.css">
  <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js"></script>
  <script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.4.1/js/bootstrap.min.js"></script>
</head>
<body>
    <div class='container'>
    <h1><center>Author Manage</center></h1>
        <table class="table table-bordered">
        <!-- <button class='btn btn-success'  onclick="window.open('{{route('viewadd')}}')">Add Author</button> -->
        <button class='btn btn-success'  onclick="window.location=('{{route('viewadd')}}')">Add Author</button>
            <thead>
                <tr>
                    <th>nickname</th>
                    <th>fullname</th>
                    <th>email</th>
                    <th>address</th>
                    <th>phone_number</th>
                    <th>created_at</th>
                    <th>updated_at</th>
                    <th></th>
                    <th></th>

                </tr>
            </thead>
            <tbody>
                @foreach($userList as $item)
                    <tr>
                        <td>{{ $item->nickname}}</td>
                        <td>{{ $item->fullname}}</td>
                        <td>{{ $item->email}}</td>
                        <td>{{ $item->address}}</td>
                        <td>{{ $item->phone_number}}</td>
                        <td>{{ $item->created_at}}</td>
                        <td>{{ $item->updated_at}}</td>
                        <td><button class="btn btn-warning">Edit</button></td>
                        <td><button class="btn btn-danger">Deleted</button></td>
                    </tr>

                @endforeach
            </tbody>
        </table>
        <!-- câu lệnh phân trang -->
        {!! $userList->links() !!}

    </div>
</body>
</html>


#viewadd.blade.php


<!DOCTYPE html>
<html>
<head>
	<title>Registation Form * Form Tutorial</title>
	<!-- Latest compiled and minified CSS -->
	<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/4.4.1/css/bootstrap.min.css">

	<!-- jQuery library -->
	<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js"></script>

	<!-- Popper JS -->
	<script src="https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.16.0/umd/popper.min.js"></script>

	<!-- Latest compiled JavaScript -->
	<script src="https://maxcdn.bootstrapcdn.com/bootstrap/4.4.1/js/bootstrap.min.js"></script>
</head>
<body>
	<div class="container">
		<div class="panel panel-primary">
			<div class="panel-heading">
				<h2 class="text-center">Add Author</h2>
			</div>
			<div class="panel-body">
				<form action="{{route('postAdd')}}" method="POST">
				<div class="form-group">
				{{ csrf_field()}}
				  <label for="usr">NickName:</label>
				  <input required="true" type="text" class="form-control" name='nickname' id="usr">
				</div>
				<div class="form-group">
				  <label for="fullname">FullName:</label>
				  <input required="true" type="text" class="form-control" name='fullname'>
				</div>
				<div class="form-group">
				  <label for="email">Email:</label>
				  <input type="email" class="form-control" name='email'>
				</div>
				<div class="form-group">
				  <label for="pwd">Address:</label>
				  <input required="true" type="text" class="form-control" name="address">
				</div>
				<div class="form-group">
				  <label for="phone_number">Phone Number:</label>
				  <input required="true" type="text" class="form-control" name='phone_number'>
				</div>

				<button class="btn btn-success">Register</button>
				</form>
			</div>
		</div>
	</div>
</body>
</html>


#editbook.blade.php


<!DOCTYPE html>
<html>
<head>
	<title>Update Book</title>
	<!-- Latest compiled and minified CSS -->
	<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/4.4.1/css/bootstrap.min.css">

	<!-- jQuery library -->
	<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js"></script>

	<!-- Popper JS -->
	<script src="https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.16.0/umd/popper.min.js"></script>

	<!-- Latest compiled JavaScript -->
	<script src="https://maxcdn.bootstrapcdn.com/bootstrap/4.4.1/js/bootstrap.min.js"></script>
</head>
<body>
	<div class="container">
		<div class="panel panel-primary">
			<div class="panel-heading">
				<h2 class="text-center">Update Book</h2>
			</div>
			<div class="panel-body">
				<form action=" {{route('smileahjhj')}} " method="POST">
				<div class="form-group">
                <input required="true" type="text" class="form-control" name='id' value="{{$book1->id}}" hidden="">
				{{ csrf_field()}}
				  <label for="usr">Title:</label>
				  <input required="true" type="text" class="form-control" name='title' value="{{$book1->title}}" >
				</div>
				<div class="form-group">
				  <label for="content">Content:</label>
				  <input required="true" type="text" class="form-control" name='content'value="{{$book1->content}}">
				</div>
				<div class="form-group">
				  <label for="price">Price:</label>
				  <input type="text" class="form-control" name='price' value="{{$book1->price}}">
				</div>
				<div class="form-group">
				  <label for="pwd">NXB:</label>
				  <input required="true" type="text" class="form-control" name="nxb" value="{{$book1->nxb}}">
				</div>
                
				 <div class="form-group">
				  <label for="nickname">Nick name:</label>
				  <select name="nickname" class="form-control">
                  <option value="{{$book1->nickname}}">{{$book1->nickname}}</option>
                  @foreach($authorList as $author)
						<option value="{{$author->nickname}}">{{$author->nickname}}</option>
					  @endforeach
				  </select>
				</div> 

				<button class="btn btn-success">Update</button>
				</form>
			</div>
		</div>
	</div>
</body>
</html>


#index.blade.php


<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Book Manage</title>
	<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.4.1/css/bootstrap.min.css">
  <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js"></script>
  <script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.4.1/js/bootstrap.min.js"></script>
</head>
<body>
    <div class='container'>
    <h1><center>Book Manage</center></h1>
        <table class="table table-bordered">
        <!-- <button class='btn btn-success'  onclick="window.open('{{route('viewadd')}}')">Add Author</button> -->

        <form method="get" action="{{route('searchBook')}}">
					<input type="text" name="timkiem" class="form-control" style="margin-top: 15px; margin-bottom: 15px;" placeholder="Tìm kiếm theo tên">
				</form>
            <thead>
                <tr>
                    <th>STT</th>
                    <th>title</th>
                    <th>content</th>
                    <th>price</th>
                    <th>nickname</th>
                    
                    <th>created_at</th>
                    <th>updated_at</th>
                    <th></th>
                    <th></th>

                </tr>
            </thead>
            <tbody>
                @foreach($BookList as $item)
                    <tr>
                        <td>{{$index++}}</td>
                        <td>{{ $item->title}}</td>
                        <td>{{ $item->content}}</td>
                        <td>{{ number_format($item->price)}}</td>
                        <td>{{ $item->nickname}}</td>
                        
                        <td>{{ $item->created_at}}</td>
                        <td>{{ $item->updated_at}}</td>
                        <td><button class="btn btn-warning" onclick="window.location=('/modal/book/editBook/{{ $item->id}}')">Edit</button></td>
                        <!-- deletedIdBook -->
                        <td><a href="/modal/book/deletedIdBook/{{ $item->id}}"><button class="btn btn-danger">Deleted</button></a></td>


                    </tr>

                @endforeach
            </tbody>
        </table>
        <!-- câu lệnh phân trang -->
        {!! $BookList->links() !!}
        <button class='btn btn-success'  onclick="window.location=('{{route('viewaddbook')}}')">Add Book</button>
    </div>
</body>
</html>


#test.blade.php


u뚀


#viewaddbook.blade.php


<!DOCTYPE html>
<html>
<head>
	<title>Add Book</title>
	<!-- Latest compiled and minified CSS -->
	<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/4.4.1/css/bootstrap.min.css">

	<!-- jQuery library -->
	<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js"></script>

	<!-- Popper JS -->
	<script src="https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.16.0/umd/popper.min.js"></script>

	<!-- Latest compiled JavaScript -->
	<script src="https://maxcdn.bootstrapcdn.com/bootstrap/4.4.1/js/bootstrap.min.js"></script>
</head>
<body>
	<div class="container">
		<div class="panel panel-primary">
			<div class="panel-heading">
				<h2 class="text-center">Add Author</h2>
			</div>
			<div class="panel-body">
				<form action="{{route('postAddBook')}}" method="POST">
				<div class="form-group">
				{{ csrf_field()}}
				  <label for="usr">Title:</label>
				  <input required="true" type="text" class="form-control" name='title' >
				</div>
				<div class="form-group">
				  <label for="content">Content:</label>
				  <input required="true" type="text" class="form-control" name='content'>
				</div>
				<div class="form-group">
				  <label for="price">Price:</label>
				  <input type="text" class="form-control" name='price'>
				</div>
				<div class="form-group">
				  <label for="pwd">NXB:</label>
				  <input required="true" type="text" class="form-control" name="nxb">
				</div>

				<div class="form-group">
				  <label for="nickname">Nick name:</label>
				  <select name="nickname" class="form-control">
				  	@foreach($authorList as $author)
						<option value="{{$author->nickname}}">{{$author->fullname}}</option>
					  @endforeach
				  </select>
				</div>

				<button class="btn btn-success">Register</button>
				</form>
			</div>
		</div>
	</div>
</body>
</html>


#modal.php


<?php
Route::group(['prefix' => '/modal/author'], function () {
    Route::get('/index', 'Modal\[email protected]')->name('viewAuthorList');

    Route::get('/view_add', 'Modal\[email protected]')->name('viewadd');
    Route::post('/post_addAuthor', 'Modal\[email protected]')->name('postAdd');
});

Route::group(['prefix' => '/modal/book'], function () {
    Route::get('/index', 'Modal\[email protected]')->name('viewBookList');

    Route::get('/view_add', 'Modal\[email protected]')->name('viewaddbook');
    Route::post('/post_addBook', 'Modal\[email protected]')->name('postAddBook');
    Route::get('/deletedIdBook/{id}', 'Modal\[email protected]')->name('deletedIdBook');
    Route::get('/editBook/{id}', 'Modal\[email protected]')->name('editbook');
    Route::post('/updateBook', 'Modal\[email protected]')->name('smileahjhj');
    Route::get('/search', 'Modal\[email protected]')->name('searchBook');
});


Tài Liệu Tham Khảo

Đã sao chép!!!