Demo project CRUD (chức năng Thêm, Sửa, Xoá) bằng laravel 5.4 trên Mac OSX với MAMP ( Phần 1 )

Spread the love

Mở đầu

Để tập tành học PHP/Laravel mình đã thử tạo một project CRUD. Mình dùng máy MacBook và cài MAMP để thực hiện, quá trình thực hiện cũng gặp một vấn đề nên mình quyết định viết lại bài này.

Bài mình sẽ tạo một trang web với quản lý To-do-list

Chuẩn bị môi trường thực hiện

Step 1: Tạo project

Mở Terminal, di chuyển đến thư mục /Applications/MAMP/htdocs/

cd /Applications/MAMP/htdocs/

Tạo project bằng lệnh Composer create-project

composer create-project –prefer-dist laravel/laravel todolist

Ở đây todolist sẽ là tên thư mục chứa project, source của laravel sẽ tự động download về thư mục này

Dùng Finder vào thư mục /Applications/MAMP/htdocs/ kiểm tra xem thư mục todolist đã được tạo chưa

Mở MAMP, start servers và dùng trình duyệt mở thử link http://localhost:8888/todolist/public/

Lưu ý kiểm tra port đang được dùng bởi MAMP trong Preferences của MAMP. Như ở đây MAMP đang mở bằng port 8888

Nếu trình duyệt hiển thị như sau là mọi thứ đang ok.

Ngoài ra sẽ có trường hợp link http://localhost:8888/todolist/public/ không hiện gì cả có thể là do Mac OSX mặc định cấm quyền truy cập vào những folder cần thiết để chạy trang web

Chúng ta cần cấp permission để truy cập 2 thứ mục /Applications/MAMP/htdocs/todolist/boostrap/Applications/MAMP/htdocs/todolist/storage. Mở lại Terminal

 
cd bootstrap
chmod -R 777 *
cd ..
cd storage
chmod -R 777 *

Chúng ta vừa set để toàn quyền truy cập vào 2 thực mục trên, giờ thử mở lại link http://localhost:8888/todolist/public/ nhé

Vậy là chúng ta đã hoàn thành bước tạo project bằng laravel và chạy nó trên local host

Step 2: Set up database

Trước tiên, mở phpMyAdmin bằng link http://localhost:8888/MAMP/index.php?page=phpmyadmin&language=Engli
và tạo một database cho project là todolist

Tiếp theo chúng ta config để project có thể kết nối với database vừa tạo

Mở thư mục file .env trong thự mục todolist, sửa các thông số như bên dưới

DB_HOST=127.0.0.1
DB_PORT=3306
DB_DATABASE=homestead
DB_USERNAME=homestead
DB_PASSWORD=secret

Để biết được thông số chính xác mình sẽ mở link http://localhost:8888/MAMP/ để check

Dưới vào các thông số trên mình sẽ update lại file .env như sau

DB_HOST=localhost
DB_PORT=3306
DB_DATABASE=todolist
DB_USERNAME=root
DB_PASSWORD=root

Lưu ý todolist chính là database đã tạo ở phần đầu

Tiếp theo chúng ta sẽ tạo table bằng Migrations, mở Terminal gõ lệnh sau:

php artisan make:migration create_todo_table –create=todo

Bây giờ vào thư mục database/migrations sẽ thấy file có name theo dạng xxxx_xx_xx_xxxxxx_create_todo_table.php. create_todo_table chính là tên file mà mình đã viết ở câu lệnh migration phía trên. Mở file check nội dung

Mình sẽ sửa lại port đã set up trong file .env thành 8889 như sau (hoặc cũng thể sửa lại port của MAMP và restart lại server)

DB_HOST=localhost
DB_PORT=8889
DB_DATABASE=todolist
DB_USERNAME=root
DB_PASSWORD=root

Và thử chạy lại lệnh migrate trong Terminal

php artisan migrate

Lần này vẫn bị lỗi

SQLSTATE[HY000] [1045] Access denied for user ‘root’@’localhost’   
  (using password: YES)

Sau khi tìm hiểu trên internet mình tìm thấy câu trả lời ở đây https://laracasts.com/discuss/channels/servers/correct-method-to-specify-a-port-number/replies/86102

Theo như link trên, mình sẽ thử config DB_HOST là 127.0.0.1 thay vì localhost để tránh việc artisan commands sử dụng các local socket, sửa lại file .env như sau

DB_CONNECTION=mysql
DB_HOST=127.0.0.1
DB_PORT=8889
DB_DATABASE=todolist
DB_USERNAME=root
DB_PASSWORD=root

Và thử chạy lại lệnh migrate trong Terminal

php artisan migrate

Lần này kết quả là

Migration table created successfully.

Nhưng chưa được perfect lắm vì vẫn có thêm một thông báo lỗi

SQLSTATE[42000]: Syntax error or access violation: 1071 Specified  
   key was too long; max key length is 767 bytes

Nguyên nhân là do MySQL giới hạn chiều dài ký tự, mình sẽ thử fix theo hướng dẫn từ link https://github.com/laravel/framework/issues/17508#issuecomment-274881144

Mở file /app/Providers/AppServiceProvider.php, sửa lại như sau:

 
namespace App\Providers;
use Illuminate\Support\Facades\Schema;
use Illuminate\Support\ServiceProvider;
 
class AppServiceProvider extends ServiceProvider
{
    /**
     * Bootstrap any application services.
     *
     * @return void
     */
    public function boot()
    {
        Schema::defaultStringLength(191);
    }
 
    /**
     * Register any application services.
     *
     * @return void
     */
    public function register()
    {
        // 
    }
}

Để thử migrate lại mình mở phpMyAdmin để xoá toàn bộ table (đã được tạo do lần migrate trước) trong todolist, và chạy lại lệnh

php artisan migrate

Lần này không có lỗi này xãy ra nữa rồi, perfect !

Tổng kết

Như vậy đến đây chúng ta đã hoàn thành việc config database bằng lệnh migrate với laravel. Phần này quan trọng nhất là các cấu hình để connect được với database bằng file .env.

Trong phần tiếp theo mình sẽ thử làm quen với MVC của laravel bằng cách tạo các chức năng thêm, xoá, sửa để thao tác với database

Leave a Reply

Your email address will not be published. Required fields are marked *