Giới thiệu
Chú ý: Loạt bài viết này giả sử rằng bạn đã có kiến thức về MVC và cách Laravel triển khai khái niệm này. Nếu bạn muốn tìm hiểu về chủ đề này, hãy đọc loạt bài viết của tôi về MVC trong Laravel bắt đầu từ cài đặt Laravel 5.4.
Trong loạt bài này, tôi sẽ tạo một ứng dụng hoàn chỉnh sử dụng Laravel 5.4. Trong ứng dụng này, sẽ đề cập đến nhiều khái niệm của Laravel bao gồm Migrations, Authentication, FileSystem và Eloquent ORM.
Các bài viết trong loạt bài này:
Phần 1 -- Tạo ứng dụng ToDo trong Laravel 5.4: Migrating Table, Controllers & Models
Phần 2 -- Laravel 5.4 ToDo App: Thiết lập Authentication và ToDo Functionality
Phần 3 -- Giới thiệu về Laravel dusk: kiểm thử ứng dụng Todo
Cái tôi sẽ tạo là gì?
Tôi sẽ tạo một ứng dụng ToDo với các chức năng sau:
Xác thực người dùng với đăng nhập và đăng ký
Chỉ người dùng đã được xác thực có thể thực hiện các hành động CRUD (Create, Read, Update, Delete)
Hãy bắt đầu với việc tạo một ứng dụng Laravel với tên todoapp
Tạo dự án Laravel
Để tạo một dự án Laravel với tên todoapp, chạy lệnh sau:
composer create-project laravel/laravel todoapp
Tạo Database
Tiếp theo, tôi sẽ tạo một database với tên todoapp trên server.
Sau khi tạo database, tôi sẽ cấu hình tệp tin .env
cho database.
Mở thư mục của dự án, sau đó mở tệp tin .env
trong trình soạn thảo. Thêm thông tin cài đặt cho database như sau:
DB_CONNECTION=mysql
DB_HOST=127.0.0.1
DB_PORT=3306
DB_DATABASE=todoapp
DB_USERNAME=root
DB_PASSWORD=
Bây giờ database đã sẵn sàng để sử dụng. Tiếp theo tôi sẽ tạo các migration table và sau đó migrate chúng.
Tạo các table cho Migration
Mặc định Laravel đã tạo sẵn 2 migration table (một là Users
và một cho Password_resets
). Tôi sẽ chỉnh sửa bảng Users
và tạo một migration table mới là Todo.
Đầu tiên chỉnh sửa bảng Users
. Mở tệp tin {{timestamp}}_create_users_table.php
trong thư mục database/migrations
. Tại thời điểm này phương thức up()
sẽ trông như dưới đây:
public function up()
{
Schema::create('users', function (Blueprint $table) {
$table->increments('id');
$table->string('name');
$table->string('email')->unique();
$table->string('password',255);
$table->rememberToken();
$table->timestamps();
});
}
Bây giờ hãy thêm một vài trường. Một cho userimage và trường thứ hai cho API key của nó.
Trước khi tiếp tục hãy tìm hiểu cái mà 2 phương thức up()
và down()
làm trong tệp tin migration. Trong up()
, tôi sẽ định nghĩa schema (lược đồ) cho bảng, và thêm các cột mới,... Trong down()
, tôi sẽ làm các hành động đảo ngược (reverse) chẳng hạn như drop (xóa) bảng hay đảo ngược về các thay đổi trước đó.
Bây giờ tôi sẽ chỉnh sửa phương thức up()
:
public function up()
{
Schema::create('users', function (Blueprint $table) {
$table->increments('id');
$table->string('name');
$table->string('email')->unique();
$table->string('password');
$table->string('userimage');
$table->string('api_key')->nullable()->unique();
$table->rememberToken();
$table->timestamps();
});
}
Việc chỉnh sửa bảng users
đã hoàn tất, tiếp theo tôi sẽ tạo một migration table mới cho Todo bằng cách chạy lệnh sau trong thư mục todoapp
:
php artisan make:migration create_todo_table
Khi lệnh trên kết thúc, một tệp tin migration sẽ được tạo. Tôi sẽ tạo một scheme trong phương thức up()
của tệp tin này.
public function up()
{
Schema::create('todo', function (Blueprint $table) {
$table->increments('id');
$table->string('todo');
$table->string('description');
$table->string('category');
$table->integer('user_id')->unsigned();
$table->timestamps();
$table->foreign('user_id')->references('id')->on('users')->onDelete('cascade');
});
}
Trong bảng todo
, tôi đã tạo một primary key (khóa chính), một cột todo và một cột description. Tôi cũng tạo một cột category và tạo một foreign key (khóa ngoài) trên user_id
nó sẽ ánh xạ tới id
của một người dùng trong bảng users
. Cuối cùng, tôi cũng tạo 2 cột timestamps sử dụng phương thức timestamps()
. Hai cột này sẽ tự động cập nhật bất cứ khi nào một todo
được thêm hay thay đổi.
Migrating các bảng sử dụng Artisan
Hiện tại chúng ta đã tạo tất cả các migration cần thiết cho các bảng, tôi sẽ thực thi migration với một lệnh duy nhất:
php artisan migrate
Khi lệnh hoàn tất, tất cả các bảng sẽ được tạo trong database:
Chú ý:
Nếu lệnh trên thất bại và bạn nhận được lỗi Specified key was too long
, có thể là bạn đang sử dụng một phiên bản MySQL cũ hơn 5.7. Trong trường hợp này, bạn cần định nghĩa default string length
trong tệp tin AppServiceProvider.php
(lưu trữ trong thư mục app/Providers
). Mở tệp tin và thêm dòng code sau vào trước khai báo class.
use Illuminate\Support\Facades\Schema;
Và trong phương thức boot()
của class, thêm dòng code sau:
Schema::defaultStringLength(191);
Bây giờ, thử chạy lại lệnh. Nó sẽ làm việc. Để biết rõ hơn tham khảo laravel-news.com
Tạo các Model và Controller
Bây giờ tôi đã có các bảng trong database. Tiếp theo tôi sẽ tạo các model cho các bảng. Model cho bảng Users
đi kèm với cài đặt mặc định của Laravel. Model và controler cho bảng todo sẽ được tạo với một lệnh duy nhất:
php artisan make:controller TodoController --resource --model=Todo
Khi lệnh trên thực thi, nó sẽ hỏi bạn nếu Todo
model chưa tồn tại. Khi bạn nhập yes
, nó sẽ tạo model và liên kết nó với controller.
Khi lệnh kết thúc, controller và model đã sẵn sàng để sử dụng.
Chỉnh sửa các model
Todo
model
Hãy bắt đầu thêm các cột fillable vào Todo
model. Mở tệp tin Todo.php
(trong thư mục app
). Thêm dòng sau bên trong class:
protected $table = 'todo';
protected $fillable = ['todo','category','user_id','description'];
Đến đây Todo
model sẽ trông như thế này:
<?php
namespace App;
use Illuminate\Database\Eloquent\Model;
class Todo extends Model
{
protected $table = 'todo';
protected $fillable = ['todo','category','user_id','description'];
}
User
model
Tiếp theo, tôi sẽ chỉnh sửa Users
model và thêm cột user_image vào trong fillable của nó. Ngoài ra, tôi sẽ định nghĩa quan hệ với Todo
model. Mở tệp tin User.php
và thực hiện các thay đổi sau:
Đầu tiên, thêm
user_image
bên trong mảng$fillable
.Thứ hai, tạo một phương thức
public todo()
, nó sẽ tạo quan hệ một - nhiều với với bảngtodo
.
public function todo()
{
return $this->hasMany('App\Todo');
}
Phương thức hasMany()
định nghĩa quan hệ một - nhiều trong Eloquent.
Tại điểm này, tệp tin User.php
mới sẽ trông như thế này:
<?php
namespace App;
use Illuminate\Notifications\Notifiable;
use Illuminate\Foundation\Auth\User as Authenticatable;
class User extends Authenticatable
{
use Notifiable;
/**
* The attributes that are mass assignable.
*
* @var array
*/
protected $fillable = [
'name', 'email', 'password','userimage'
];
/**
* The attributes that should be hidden for arrays.
*
* @var array
*/
protected $hidden = [
'password', 'remember_token',
];
/*
* Get Todo of User
*
*/
public function todo()
{
return $this->hasMany('App\Todo');
}
}
Tổng kết phần 1
Trong phần này, tôi đã tạo một ứng dụng Laravel mới, với database, migration table cho todo
và chỉnh sửa users
migration table. Tiếp theo tôi đã migrate tất cả các bảng trong database sử dụng Artisan (giao diện dòng lệnh của Laravel). Sau đó tạo và chỉnh sửa các controller và model liên quan.
Cái tôi sẽ làm trong phần tiếp theo?
Trong phần tiếp theo, tôi sẽ tạo authentication cho người dùng sử dụng Artisan và chỉnh sửa nó cho ứng dụng todo. Tôi cũng sẽ chỉnh sửa TodoController
và thiết lập nó để thực hiện CRUD. Tôi cũng sẽ tạo các views, và chỉnh sửa các item của todo.
Tham khảo
Link bài viết gốc https://www.cloudways.com/blog/create-todo-app-laravel-5-4/
Bài liên quan Laravel vs Symfony - Cuộc chiến của các framework
Khóa học lập trình PHP 7 Laravel 5.5 đào tạo trên dự án thực tế, trực quan và đảm bảo việc làm.
Bình luận