How to use component in PHP

Đặt vấn đề

Khi xây dựng một app dùng php thuần hay một framework nào đó. Thường chúng ta chỉ sử dụng những tool mà framework đó hỗ trợ. Nếu framework đó không hỗ trợ thì chúng ta thường phải tiêu tốn thời gian để viết và test những function mà chúng ta viết mới để dùng. Còn trong app dùng php thuần thì hầu hết chúng ta phải viết tất. Nhưng code chúng ta viết có thể xảy ra lỗi mà chúng ta không lường trước được. Ví dụ như tại chúng ta lại viết một thư viện PHP request và respone khi đã có guzzle/http làm việc đó, Tại sao chúng ta lại tốn thời gian để viết một router trong trong aura/router làm rất tốt việc đó. Hay khi bạn có nhu cầu làm việc với file csv, tại sao chúng ta phải viết những chức năng đó khi đã có league/csv hỗ trợ chúng ta làm việc với file csv rất dễ dàng. Tất cả các tên mình nói ở trên được gọi là component, tức là người ta đã viết sẳn và chúng ta chỉ dùng lại trong app của chúng ta thôi.

Vậy component là gi?

Một component là nhóm code giúp giải quyết một vấn đề cụ thể trong ứng dụng PHP của bạn. Ví dụ, nếu ứng dụng PHP của bạn gửi và nhận các yêu cầu HTTP, component guzzle/http có thể làm điều đó. Nếu ứng dụng PHP của bạn đọc file csv thì component league/csv có thể giúp bạn làm điều đó thật dễ dàng và nhanh chóng . Thay vì xây dựng lại chức năng đã được xây dựng sẵn, chúng ta sử dụng các component của PHP và dành thời gian giải quyết các mục tiêu lớn hơn của dự án.

Ví dụ sử dụng component vào trong app đọc url từ file csv, gửi request và nhận respone từ url trong file csv.

Để thực hiện ví dụ này các bạn cần có hiểu biết cơ bản về autoload và composer hai cái này google ra cả đống nên các bạn tự tìm hiểu nhé. Thứ hai là máy của bạn phải cài php và composer nhé. Let go!

Tạo thư mục và cài đặt các component mà chúng ta cần.

1. Tạo thư mục

Tôi sẽ tạo một thư mục có tên phpcomponent, tất cả code của chúng ta sẽ nằm trong thư mục này. Trong thu mục phpcomponent tôi tạo một file index.php.

2. Tìm và cài các component cần thiết.

Các component mà chúng ta cài bằng composer có thể tìm thấy trên trang https://packagist.org/. Trong ví dụ này tôi dùng component league/csvđể đọc một file csv. Tôi nhập "league/csv" vào ô tìm kiếm, trong kết quả tìm kiếm tôi chọn league/csv để xem hưởng dẫn cài đặt sử dụng. Bây giờ tôi cài đặt league/csv bằng composer trong terminal như sau:

$ composer require league/csv

Để gửi request và nhận respone từ server tôi sử dụng component guzzlehttp/guzzle. Cài đặt guzzlehttp/guzzle bằng composer như sau.

$ composer require guzzlehttp/guzzle

3. Tạo file csv có chứa các url để app chúng ta đọc.

Các bạn vào đây tải về, giải nén được file url.csv, sau đó copy file url.csv vào thư mục phpcomponent, ngang hàng với file index.php nhé.

Mọi thứ đã chuẩn bị xong. Code thôi

Trong file index.php tôi insert nội dung như sau:

<?php
// 1. Use Composer autoloader
require 'vendor/autoload.php';
// 2. Instantiate Guzzle HTTP client
$client = new \GuzzleHttp\Client();
// 3. Open and iterate CSV
$csv = new \League\Csv\Reader('url.csv');
foreach ($csv as $csvRow) {
    try {
        // 4. Send HTTP OPTIONS request
        $httpResponse = $client->options($csvRow[0]);
        // 5. Inspect HTTP response status code
        if ($httpResponse->getStatusCode() >= 400) {
        throw new \Exception();
    }
    } catch (\Exception $e) {
        // 6. Send bad URLs to standard out
        echo $csvRow[0] . PHP_EOL;
    }
}

Mỗi dòng code trên đã có giải thích rõ ràng, tôi không giải thích gì thêm. save lại và chạy lệnh sau trong terminal

php -server localhost:8000 

Giờ mở trình duyệt lên truy cập vào http://localhost:8000 để xem kết quả nhé.

Kết luận

Qua ví dụ trên các bạn thấy thay vì phải viết lại các chức năng như đọc file csv, gửi request lên server và nhận lại respone từ server trả về rất tốn thời gian. Thì tôi chỉ cẩn sử dùng composer để cài đặt các component và sử dụng chúng rất nhanh mà vẫn giải quyết được vần đề của tôi. Tới đây chắc các bạn nhận thấy tại sao nên dùng component. Cuối cùng chúc các bạn code khỏe