Bài 11. Sử dụng Eloquent trong Laravel 5 - phần 3

Bài trước chúng ta đã ứng dụng Eloquent tạo trang quản lý tin tức cho dự án website tin tức. Bài hôm nay chúng ta sẽ ứng dụng Eloquent tạo trang quản lý user cho dự án website user.

Mục Lục:

5. Ứng dụng Eloquent tạo trang quản lý user

Chuẩn bị giao diện:

Cái này mình đã chuẩn bị sẵn cho các bạn, bạn nào đã từng làm việc với adminlte rồi có thể tự thiết kế lại theo ý của minh tùy thích. Download: tại đây

Sau khi download load về các bạn giải nén vào thư mục resources/views/admin

route cho trang quản trị user

        Route::group(['prefix' => 'user'], function () {
            // hiển thị danh sách user
             Route::get('list', ['as' => 'getListUser', 'uses' => 'Admin\UserController@getList']);

            // hiển thị form thêm user
             Route::get('insert', ['as' => 'getInsertUser', 'uses' => 'Admin\UserController@getInsert']);

            // nhận request method post từ trang thêm gủi về để tiến hành insert dữ liệu
            Route::post('insert', ['as' => 'postInsertUser', 'uses' => 'Admin\UserController@postInsert']);

            // hiển thị form cập nhật dữ liệu
            Route::get('update/{id}', ['as' => 'getUpdateUser', 'uses' => 'Admin\UserController@getUpdate']);

            // nhận request method post từ trang update gủi về để tiến hành update dữ liệu
            Route::post('update/{id}', ['as' => 'postUpdateUser', 'uses' => 'Admin\UserController@postUpdate']);

            // xóa user
             Route::get('delete/{id}', ['as' => 'getDeleteUser', 'uses' => 'Admin\UserController@getDelete']);
        });
    });
    

Tạo controller xử lý trang quản lý user:

        $ php artisan make:controller Admin\UserController
    

Thêm mới một user

Sử dụng route gủi request tới UserController cụ thể là function getInsert() trong UserController

function này sẽ return về view insert, cụ thể là file resources/views/admin/user/insert.blade.php

        public function getInsert(){
            return view('admin.user.insert');
        }
    

view thêm user resources/views/admin/user/insert.blade.php có nội dung như sau:

        @extends('admin.base.base')
        @section('title')
            Thêm user
        @endsection
        @section('content')
            

user quản lý

Thêm user

{{ empty($errors->messages()['txtName']) ? '' : showError($errors->messages()['txtName']) }}
{{ empty($errors->messages()['txtEmail']) ? '' : showError($errors->messages()['txtEmail']) }}
{{ empty($errors->messages()['txtUsername']) ? '' : showError($errors->messages()['txtUsername']) }}
{{ empty($errors->messages()['txtPassword']) ? '' : showError($errors->messages()['txtPassword']) }}
{{ empty($errors->messages()['txtPasswordAgain']) ? '' : showError($errors->messages()['txtPasswordAgain']) }}
@endsection

Validate Form

        $ php artisan make:request UserRequest
    

Mở file app/Http/UserRequest.php

        namespace App\Http\Requests;

        use Illuminate\Foundation\Http\FormRequest;

        class UserRequest extends FormRequest
        {
            /**
             * Determine if the user is authorized to make this request.
             *
             * @return bool
             */
            public function authorize()
            {
                return true;
            }

            /**
             * Get the validation rules that apply to the request.
             *
             * @return array
             */
            public function rules()
            {
                $postId = $this->route()->parameter('id');
                return [
                    'txtName' => 'required',
                    'txtEmail' => 'required|email',
                    'txtUsername' => 'required|unique:users,username,'.$postId,
                    'txtPassword' => 'required',
                    'txtPasswordAgain' => 'required|same:txtPassword'
                ];
            }

            public function messages() {
                return [
                    'txtName.required' => 'Bạn chưa nhập họ tên',
                    'txtEmail.required' => 'Bạn chưa nhập email',
                    'txtEmail.email' => 'Email không hợp lệ',
                    'txtUsername.required' => 'Bạn chưa nhập username',
                    'txtUsername.unique' => 'Username đã tồn tại',
                    'txtPassword.required' => 'Bạn chưa nhập password',
                    'txtPasswordAgain.required' => 'Bạn chưa xác nhận lại password',
                    'txtPasswordAgain.same' => 'Xác nhận password chưa khớp'
                ];
            }
        }
    

Chú ý: action form phải gủi về route postInsertUser

Sau khi nhấn submit sẻ sử dụng route postInsertUser gủi request tới UserController cụ thể là function postInsert() trong UserController

function này có nhiệm vụ gửi request tới model là file app/User.php để tiến hành giao tiếp với database để insert dữ liệu

         public function postInsert(UserRequest $request){
            $user =  new User();
            $user->name = $request->txtName;
            $user->email = $request->txtEmail;
            $user->username = $request->txtUsername;
            $user->password = bcrypt($request->txtPassword); // mã hóa password trong laravel
            $user->save();
            return redirect('administrator/user/list')->with(['success' => 'Thêm thành công']);
        }
    

Form insert

Validate form

Hiển thị danh sách user

Sử dụng route getListUser gủi request tới UserController cụ thể là function getList() trong UserController

function này sẽ lấy tất cả dữ liệu bảng users tryền qua view list, cụ thể là file resources/views/admin/user/list.blade.php

         public function getList(){
            $users = User::all();
            return view('admin.user.list', compact('users'));
        }
    

view danh sách userresources/views/admin/user/list.blade.php có nội dung như sau:

        @extends('admin.base.base')
        @section('title')
            Danh sách tin
        @endsection
        @section('css')
                
            
        @endsection
        @section('content')
            

Danh mục quản lý

Danh sách Tin

@foreach($users as $user) @endforeach
Tên Email Username
{{ $user->name }} {{ $user->email }} {{ $user->username }}
Tên Mô tả Hiển thị
@endsection @section('javascript') @endsection

Danh sách

Cập nhật một user

Sử dụng route getUpdateUser gủi request tới UserController cụ thể là function getUpdate() trong UserController

function này sẽ lấy dữ liệu column cần cập nhật trong bảng categories truyền qua view update, cụ thể là file resources/views/admin/user/update.blade.php

            public function getUpdate($id){
                $user = User::find($id);
                return view('admin.user.update', compact('user'));
            }
    

view danh sách loại tin resources/views/admin/user/update.blade.php có nội dung như sau:

        @extends('admin.base.base')
        @section('title')
            Cập nhật user
        @endsection
        @section('content')
            

user quản lý

Cập nhật user

{{ empty($errors->messages()['txtName']) ? '' : showError($errors->messages()['txtName']) }}
{{ empty($errors->messages()['txtEmail']) ? '' : showError($errors->messages()['txtEmail']) }}
{{ empty($errors->messages()['txtUsername']) ? '' : showError($errors->messages()['txtUsername']) }}
{{ empty($errors->messages()['txtPassword']) ? '' : showError($errors->messages()['txtPassword']) }}
{{ empty($errors->messages()['txtPasswordAgain']) ? '' : showError($errors->messages()['txtPasswordAgain']) }}
Làm mới Hủy
@endsection

Sau khi nhấn submit sẻ sử dụng route postUpdateUser gủi request tới UserController cụ thể là function postUpdate() trong UserController

function này có nhiệm vụ gửi request tới model là file app/User.php để tiến hành giao tiếp với database để update dữ liệu

        public function postUpdate(UserRequest $request, $id){
        $user = User::find($id);
        $user->name = $request->txtName;
        $user->email = $request->txtEmail;
        $user->username = $request->txtUsername;
        $user->password = bcrypt($request->txtPassword);
        $user->save();
        return redirect('administrator/user/list')->with(['success' => 'Cập nhật thành công']);
    }
    

Xóa một user

Sử dụng route getDeleteUser gủi request tới UserController cụ thể là function getDelete() trong UserController

function này sẽ lấy dữ liệu column cần xóa trong bảng users để tiến hành xóa

       public function getDelete($id){
           $user = User::find($id);
           $user->delete();
           return redirect('administrator/user/list')->with(['success' => 'Xóa thành công']);
       }
    

Soure code: download

Trong bài này mình đã hướng dẫn các bạn ứng dụng Eloquent tạo trang quản lý user. Trong series bài viết tiếp theo mình sẽ hướng dẫn các bạn tạo chức năng thêm, sữa, xóa cho trang user. Mời các bạn đón đọc. Bài viết trên là những hiểu biết của cá nhân mình nên không tránh phải sai sót, rất mong sự đóng góp ý kiến của các bạn để bài viết trở nên hữu ích hơn.