How to Build Command-Line Apps Part 3

Sau một thời gian thì chúng ta lại gặp nhau trong series How to Build Command-Line Apps Part 3

Ở 2 phần trước thì mình đã giới thiệu đến các bạn về cách sử dụng cơ bản của package : symfony/console

Hôm nay mình sẽ mang đến những ứng dụng mà package : symfony/console có thể làm tạo ra được.

Chắc hẳn nếu làm việc với laravel các bạn cũng đã rất quen thuộc với command-line : laravel new blog dùng để create 1 project mới. Nhưng đã bao giờ các bạn tự hỏi cơ chế hoạt động của command-line này là như thế nào chưa ???

Hôm nay chúng ta sẽ cùng thử tạo ra command-line này nhé.

Đầu tiên chúng ta sẽ edit lại 1 số phần đoạn code ở Part 2 để viết thay đổi 1 chút về tên gọi cũng như việc xử lý của các function nhé

Tại file main để chạy chúng ta sẽ edit lại 1 chút như sau :

Chúng ta sẽ gọi new NewCommand() . Đồng thời edit name class cũ thành NewCommand.php

Tiếp đó là sửa function trong file NewCommand.php. Đầu tiên trong function configure() chúng ta sửa name, description và hiện giờ chúng ta chỉ cần required tên của project truyền vào

Việc tiếp theo chúng ta phải xác định được các việc sẽ làm trong function execute() như sau :

Sau đó chúng ta sẽ bắt tay vào xử lý từng việc một. Đầu tiên là check xem folder chứa project mới đã tồn tại chưa

Lưu ý tại function assertApplicationDoesNotExist() chúng ta cần truyền đường dẫn folder để check và output để in ra message cho người dùng.Okie giờ thì chúng ta sẽ thực hiện unitest. Để thực hiện test thì đơn giản là chúng ta tạo ra 1 folder bằng lệnh mkdir. Sau đó tạo thêm new 1 project trùng tên

Okie vậy là function của chúng ta đã hoạt động. Thêm 1 chút style cho message trả về nhé

Vậy là trông đã khá chuyên nghiệp hơn khá nhiều rồi. Việc xử lý tiếp theo là download phiên bản mới nhất của laravel và giải nén file zip đó ra. Để luôn download phiên bản mới nhất của Laravel chúng ta sẽ thực hiện cron job mỗi khi chạy đến function download này để thực hiện việc này chúng ta sẽ cần thêm package guzzlehttp/guzzle. Chúng ta chỉ cần chạy trên terminal composer require guzzlehttp/guzzle sau đó chờ trong ít phút

Tiếp theo là tạo 1 function khởi tạo như sau

Sau đó chúng ta sẽ thực hiện việc download tại function download()

Trong function này chúng ta sẽ tiến hành việc download file zip và save nó bằng tên mà chúng ta truyền vào trong function download()

Để đảm bảo rằng tên file không bị trùng chúng ta sẽ viết thêm 1 function makeFileName()

Sau đó để thực hiện việc giải nén chúng ta sẽ sử dụng ZipArchive

Cuối cùng chúng ta sẽ thêm function đã viết vào function execute() và thêm message thông báo thành công cho người dùng

Giờ hãy cùng run thử lại App mà chúng ta vừa viết

Đã có lỗi xảy ra vì chúng ta chưa truyền GuzzleHttp\Client() vào hàm khởi tạo, edit lại 1 chút file main

Vậy là chúng ta đã có được kết quả 1 project laravel mới được tạo theo như ý muốn.

Hẹn gặp lại các bạn trong những phần tiếp theo của series