Laravel Zero - Build your own console application
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 ...
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' => [ AppProvidersAppServiceProvider::class, TmdbLaravelTmdbServiceProvider::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 // AppCommandsInfoCommand.php namespace AppCommands; use AppCommandsHelperMovieHelper; use IlluminateConsoleSchedulingSchedule; use LaravelZeroFrameworkCommandsCommand; 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)