Laravel Zero - Build your own console application
This post hasn't been updated for 6 years
Giới thiệu
Laravel Zero
được tạo ra và được duy trì bởi Nuno Maduro, và là micro framework
cho các ứng dụng console/command line
. Đây là một phiên bản không chính thức và tùy chỉnh của Laravel được tối ưu hóa để xây dựng các ứng dụng dòng lệnh (command-line application).
Các đặc điểm của Laravel Zero
:
- Được xây dựng dựa trên các
component
của Laravel. - Cho phép lựa chọn cài đặt Laravel Eloquent, Laravel Logging và nhiều thành phần khác.
- Hỗ trợ menu tương tác và các thông báo trên desktop trên Linux, Windows & MacOS.
- Đi kèm với Scheduler và một Standalone Compiler.
- Tích hợp với Collision (Collision là một trình hiển thị/thông báo lỗi Đẹp).
Cài đặt và sử dụng
Cài đặt
Requires: PHP 7.1.3+
Cài đặt Laravel Zero
khá là đơn giản và tương tự với laravel
:
$ composer create-project --prefer-dist laravel-zero/laravel-zero <your-app-name>
Sau khi cài đặt xong các bạn có thể chạy ngay ứng dụng ở ngay thư mục vừa tạo:
$ php <your-app-name>
Bạn có thể đổi tên của ứng dụng vừa tạo bằng cách gõ lệnh sau trong thư mục gốc của ứng dụng:
$ php <your-app-name> app:rename <new-app-name>
Sử dụng
Laravel Zero
có sẵn documents đầy đủ và dễ hiểu tại http://laravel-zero.com/#/?id=about nên mình sẽ không viết lại nữa mà tập trung cho phần demo
ở dưới nhé.
Demo
Trong bài viết này mình sẽ tạo một ứng dụng nho nhỏ để xem các phim đang/sắp/đã chiếu và thông tin của chúng.
$ composer create-project --prefer-dist laravel-zero/laravel-zero movie
$ cd movie
Mình sẽ sử dụng https://www.themoviedb.org để lấy các dữ liệu về phim. Trang này cho phép chúng ta tạo api key
miễn phí, các bạn chỉ cần tạo một tài khoản (cũng miễn phí luôn) và tạo api key để bắt đầu sử dụng. Sau khi login các bạn vào Setting để tạo api key
nhé, nó có 1 cái form điền thông tin, mình có thể điền thông tin fake hay thật đều được.
Ngoài ra để lấy các thông tin trên themoviedb
mình cần phải cài thêm php-tmdb/laravel, đây là 1 package
cung cấp các api
cho phép chúng ta lấy các dữ liệu về phim
$ composer require php-tmdb/laravel
Cập nhật lại config/app.php
,
'providers' => [
App\Providers\AppServiceProvider::class,
Tmdb\Laravel\TmdbServiceProvider::class,
],
Thêm config cho tmdb
:
<?php // config/tmdb.php
return [
/*
* Api key
*/
'api_key' => '<YOUR_API_KEY>',
/**
* Client options
*/
'options' => [
/**
* Use https
*/
'secure' => true,
/*
* Cache
*/
'cache' => [
'enabled' => true,
// Keep the path empty or remove it entirely to default to storage/tmdb
'path' => storage_path('tmdb')
],
/*
* Log
*/
'log' => [
'enabled' => true,
// Keep the path empty or remove it entirely to default to storage/logs/tmdb.log
'path' => storage_path('logs/tmdb.log')
]
],
];
Tạo command
Các thành phần yêu cầu cơ bản đã đầy đủ, tiếp theo chúng ta cần tạo ra các command
:
$ php movie make:command InfoCommand
$ php movie make:command TopRateCommand
$ php movie make:command NowPlayingCommand
$ php movie make:command PopuplarCommand
$ php movie make:command UpcomingCommand
Về cơ bản, cấu trúc các Command
được tạo ở trên tương tự với các Command
trong laravel, các bạn thao khảo thêm tại Laravel/Artisan
<?php // App\Commands\InfoCommand.php
namespace App\Commands;
use App\Commands\Helper\MovieHelper;
use Illuminate\Console\Scheduling\Schedule;
use LaravelZero\Framework\Commands\Command;
class InfoCommand extends Command
{
protected $signature = 'info {id? : Movie\'s ID}';
protected $description = 'Get movie\'s information';
public function handle(): void
{
$movieId = $this->argument("id");
while (empty($movieId)) {
$movieId = $this->ask("Please enter movie ID");
}
$rows = MovieHelper::getMovieInformation($movieId);
$this->table([], $rows);
}
public function schedule(Schedule $schedule): void { }
}
Ở trên, nếu trong command
của người dùng không chứa movieId
mình sẽ để họ nhập bằng tay.
Ngoài ra mình có sử dụng MovieHelper
để lấy các dữ liệu cần thiết. (mình sẽ post ở cuối bài)
Kết quả
Menu chính
Lấy thông tin của phim dựa trên ID
Lấy danh sách các phim đang chiếu (20 phim)
Source code: github
All Rights Reserved