Symfony - Linh kiện
Như đã thảo luận trước đó, các thành phần Symfony là thư viện PHP độc lập cung cấp một tính năng cụ thể, có thể được sử dụng trong bất kỳ ứng dụng PHP nào. Các thành phần mới hữu ích đang được giới thiệu trong mỗi bản phát hành của Symfony. Hiện tại, có hơn 30 thành phần chất lượng cao trong Symfony framework. Hãy để chúng tôi tìm hiểu về cách sử dụng các thành phần Symfony trong chương này.
Cài đặt thành phần Symfony
Các thành phần của Symfony có thể được cài đặt dễ dàng bằng lệnh composer. Lệnh chung sau có thể được sử dụng để cài đặt bất kỳ thành phần Symfony nào.
cd /path/to/project/dir
composer require symfony/<component_name>
Hãy để chúng tôi tạo một ứng dụng php đơn giản và cố gắng cài đặt Filesystem thành phần.
Step 1 - Tạo một thư mục cho ứng dụng, filesystem-example
cd /path/to/dev/folder
mdkir filesystem-example
cd filesystem-example
Step 2 - Cài đặt thành phần hệ thống tập tin bằng lệnh sau.
composer require symfony/filesystem
Step 3 - Tạo tệp main.php và nhập mã sau.
<?php
require_once __DIR__ . '/vendor/autoload.php';
use Symfony\Component\Filesystem\Filesystem;
use Symfony\Component\Filesystem\Exception\IOExceptionInterface;
$fs = new Filesystem();
try {
$fs->mkdir('./sample-dir');
$fs->touch('./sample-dir/text.txt');
} catch (IOExceptionInterface $e) {
echo $e;
}
?>
Dòng đầu tiên rất quan trọng, dòng này tải tất cả các lớp cần thiết từ tất cả các thành phần được cài đặt bằng lệnh Composer. Các dòng tiếp theo sử dụng lớp Hệ thống tập tin.
Step 4 - Chạy ứng dụng bằng lệnh sau và nó sẽ tạo một thư mục mới sample-dir và một tập tin test.txt dưới nó.
php main.php
Chi tiết các thành phần của Symfony
Symfony cung cấp các thành phần từ tính năng đơn giản, ví dụ như hệ thống tệp đến tính năng nâng cao, nói sự kiện, công nghệ vùng chứa và tiêm phụ thuộc. Hãy cho chúng tôi biết về tất cả các thành phần lần lượt trong các phần sau.
Hệ thống tập tin
Thành phần hệ thống tệp cung cấp lệnh hệ thống cơ bản liên quan đến tệp và thư mục như tạo tệp, tạo thư mục, tồn tại tệp, v.v. Thành phần hệ thống tệp có thể được cài đặt bằng lệnh sau.
composer require symfony/filesystem
Người tìm kiếm
Thành phần Finder cung cấp các lớp thông thạo để tìm các tệp và thư mục trong một đường dẫn cụ thể. Nó cung cấp một cách dễ dàng để lặp lại các tệp trong một đường dẫn. Thành phần Finder có thể được cài đặt bằng lệnh sau.
composer require symfony/finder
Bảng điều khiển
Thành phần bảng điều khiển cung cấp các tùy chọn khác nhau để dễ dàng tạo các lệnh, có thể được thực thi trong một thiết bị đầu cuối. Symfony sử dụngCommand mở rộng thành phần để cung cấp các chức năng khác nhau như tạo ứng dụng mới, tạo gói, v.v. Ngay cả bản dựng PHP trong máy chủ web cũng có thể được gọi bằng lệnh Symfony, php bin/console server:runnhư đã thấy trong phần cài đặt. CácConsole thành phần có thể được cài đặt bằng lệnh sau.
composer require symfony/console
Hãy để chúng tôi tạo một ứng dụng đơn giản và tạo một lệnh, HelloCommand sử dụng Console và gọi nó.
Step 1 - Tạo một dự án bằng lệnh sau.
cd /path/to/project
composer require symfony/console
Step 2 - Tạo tệp main.php và bao gồm đoạn mã sau.
<?php
require __DIR__ . '/vendor/autoload.php';
use Symfony\Component\Console\Application;
$app = new Application();
$app->run();
?>
Application lớp thiết lập các chức năng cần thiết của một ứng dụng console cơ bản.
Step 3 - Chạy ứng dụng, php main.php, sẽ tạo ra kết quả sau.
Console Tool
Usage:
command [options] [arguments]
Options:
-h, --help Display this help message
-q, --quiet Do not output any message
-V, --version Display this application version
--ansi Force ANSI output
--no-ansi Disable ANSI output
-n, --no-interaction Do not ask any interactive question
-v|vv|vvv, --verbose Increase the verbosity of messages: 1 for normal output,
2 for more verbose output and 3 for debug
Available commands:
help Displays help for a command
list Lists commands
Step 4 - Tạo một lớp gọi là HelloCommand kéo dài Command lớp học trong main.php chinh no.
use Symfony\Component\Console\Command\Command;
use Symfony\Component\Console\Input\InputInterface;
use Symfony\Component\Console\Output\OutputInterface;
use Symfony\Component\Console\Input\InputArgument;
class HelloCommand extends Command {
}
Ứng dụng sử dụng bốn lớp sau có sẵn trong Command thành phần.
Command - Được sử dụng để tạo một lệnh mới
InputInterface - Được sử dụng để đặt đầu vào của người dùng
InputArgument - Được sử dụng để lấy thông tin đầu vào của người dùng
OutputInterface - Dùng để in đầu ra cho bảng điều khiển
step 5 - Tạo một chức năng configure() và đặt tên, mô tả và văn bản trợ giúp.
protected function configure() {
$this
->setName('app:hello')
->setDescription('Sample command, hello')
->setHelp('This command is a sample command')
}
step 6 - Tạo đối số đầu vào, user cho lệnh và đặt là bắt buộc.
protected function configure() {
$this
->setName('app:hello')
->setDescription('Sample command, hello')
->setHelp('This command is a sample command')
->addArgument('name', InputArgument::REQUIRED, 'name of the user');
}
step 7 - Tạo một chức năng execute() với hai đối số InputArgument và OutputArgument.
protected function execute(InputInterface $input, OutputInterface $output) {
}
step 8 - Sử dụng InputArgument để lấy chi tiết người dùng do người dùng nhập và in ra bảng điều khiển bằng cách sử dụng OutputArgument.
protected function execute(InputInterface $input, OutputInterface $output) {
$name = $input->getArgument('name');
$output->writeln('Hello, ' . $name);
}
step 9 - Đăng ký HelloCommand vào ứng dụng bằng cách sử dụng add phương pháp của Application lớp học.
$app->add(new HelloCommand());
Các ứng dụng đầy đủ như sau.
<?php
require __DIR__ . '/vendor/autoload.php';
use Symfony\Component\Console\Application;
use Symfony\Component\Console\Command\Command;
use Symfony\Component\Console\Input\InputInterface;
use Symfony\Component\Console\Output\OutputInterface;
use Symfony\Component\Console\Input\InputArgument;
class HelloCommand extends Command {
protected function configure() {
$this
->setName('app:hello')
->setDescription('Sample command, hello')
->setHelp('This command is a sample command')
->addArgument('name', InputArgument::REQUIRED, 'name of the user');
}
protected function execute(InputInterface $input, OutputInterface $output) {
$name = $input->getArgument('name');
$output->writeln('Hello, ' . $name);
}
$app = new Application();
$app->add(new HelloCommand());
$app->run();
}
?>
Step 10 - Bây giờ, hãy thực thi ứng dụng bằng câu lệnh sau và kết quả sẽ là Hello, Jon như mong đợi.
php main.php app:hello Jon
Symfony đi kèm với một tệp nhị phân được tạo sẵn có tên là console trong thư mục bin của bất kỳ ứng dụng web Symfony nào, có thể được sử dụng để gọi các lệnh trong ứng dụng.
Quá trình
Thành phần quy trình cung cấp các tùy chọn để chạy bất kỳ lệnh hệ thống nào trong một quy trình con, một cách an toàn và hiệu quả. Thành phần quy trình có thể được cài đặt bằng lệnh sau.
composer require symfony/process
ClassLoader
Thành phần ClassLoader cung cấp triển khai cho cả hai PSR-0 và PSR-4tiêu chuẩn trình nạp lớp. Nó có thể được sử dụng để tự động tải các lớp. Nó sẽ được giảm giá trong tương lai gần. Trình tải lớp dựa trên trình soạn thảo được ưu tiên hơn thành phần này. Thành phần ClassLoader có thể được cài đặt bằng lệnh sau.
composer require symfony/class-loader
PropertyAccess
Thành phần PropertyAccess cung cấp các tùy chọn khác nhau để đọc và ghi một đối tượng và chi tiết mảng bằng cách sử dụng ký hiệu chuỗi. Ví dụ, một mảngProduct cùng với chìa khóa price có thể được truy cập động bằng cách sử dụng [price] chuỗi.
$product = array(
'name' => 'Cake'
'price' => 10
);
var priceObj = $propertyAccesserObj->getValue($product, '[price]');
Thành phần PropertyAccess có thể được cài đặt bằng lệnh sau.
composer require symfony/property-access
PropertyInfo
Thành phần PropertyInfo tương tự như thành phần PropertyAccess, tuy nhiên nó chỉ hoạt động với các đối tượng PHP và cung cấp nhiều chức năng hơn.
class Product {
private $name = 'Cake';
private $price = 10;
public function getName() {
return $this->name;
}
public function getPrice() {
return $this->price;
}
}
$class = Product::class;
$properties = $propertyInfoObj->getProperties($class);
/*
Example Result
--------------
array(2) {
[0] => string(4) "name"
[1] => string(5) "price"
}
*/
Thành phần PropertyInfo có thể được cài đặt bằng lệnh sau.
composer require symfony/property-info
EventDispatcher
Thành phần EventDispatcher cung cấp một chương trình dựa trên sự kiện trong PHP. Nó cho phép các đối tượng giao tiếp với nhau bằng cách gửi các sự kiện và lắng nghe chúng. Chúng ta sẽ tìm hiểu cách tạo sự kiện và lắng nghe chúng trong chương Sự kiện và Trình xử lý sự kiện.
Thành phần EventDispatcher có thể được cài đặt bằng lệnh sau.
composer require symfony/event-dispatcher
DependencyInjection
Thành phần DependencyInjection cung cấp một cơ chế dễ dàng và hiệu quả để tạo một đối tượng với sự phụ thuộc của nó. Khi một dự án phát triển, nó có rất nhiều lớp với sự phụ thuộc sâu sắc, cần được xử lý chính xác. Nếu không, dự án không thành công. DependencyInjection cung cấp một vùng chứa đơn giản và mạnh mẽ để xử lý sự phụ thuộc. Chúng ta sẽ tìm hiểu về các vùng chứa và khái niệm tiêm phụ thuộc trong chương Vùng chứa dịch vụ.
Thành phần DependencyInjection có thể được cài đặt bằng lệnh sau.
composer require symfony/dependency-injection
Bộ nối tiếp
Thành phần Serializer cung cấp một tùy chọn để chuyển đổi một đối tượng PHP thành một định dạng cụ thể như XML, JSON, Binary, v.v., sau đó cho phép nó chuyển đổi trở lại thành một đối tượng ban đầu mà không bị mất dữ liệu.
Thành phần Serializer có thể được cài đặt bằng lệnh sau.
composer require symfony/serializer
Cấu hình
Thành phần cấu hình cung cấp các tùy chọn để tải, phân tích cú pháp, đọc và xác thực các cấu hình kiểu XML, YAML, PHP và ini. Nó cũng cung cấp các tùy chọn khác nhau để tải chi tiết cấu hình từ cơ sở dữ liệu. Đây là một trong những thành phần quan trọng hữu ích trong việc cấu hình ứng dụng web một cách rõ ràng và ngắn gọn. Thành phần cấu hình có thể được cài đặt bằng lệnh sau.
composer require symfony/config
Biểu cảm
Thành phần ExpessionLanguage cung cấp một công cụ biểu thức chính thức. Biểu thức là một lớp lót nhằm trả về một giá trị. Công cụ biểu thức cho phép dễ dàng biên dịch, phân tích cú pháp và nhận giá trị từ một biểu thức. Nó cho phép một hoặc nhiều biểu thức được sử dụng trong môi trường cấu hình (tệp) bởi một lập trình viên không phải PHP, quản trị viên hệ thống nói. Thành phần ExpressionLanguage có thể được cài đặt bằng lệnh sau.
composer require symfony/expression-language
OptionsResolver
Thành phần OptionsResolver cung cấp một cách để xác nhận hệ thống tùy chọn được sử dụng trong hệ thống của chúng tôi. Ví dụ, cài đặt cơ sở dữ liệu được đặt trong một mảng, dboption với máy chủ lưu trữ, tên người dùng, mật khẩu, v.v., làm khóa. Bạn cần xác thực các mục nhập trước khi sử dụng nó để kết nối với cơ sở dữ liệu. OptionsResolver đơn giản hóa tác vụ này bằng cách cung cấp một lớp đơn giản OptionsResolver và một trình phân giải phương thức, giải quyết cài đặt cơ sở dữ liệu và nếu có bất kỳ vấn đề xác thực nào, nó sẽ báo cáo.
$options = array(
'host' => '<db_host>',
'username' => '<db_user>',
'password' => '<db_password>',
);
$resolver = new OptionsResolver();
$resolver->setDefaults(array(
'host' => '<default_db_host>',
'username' => '<default_db_user>',
'password' => '<default_db_password>',
));
$resolved_options = $resolver->resolve($options);
Thành phần OptionsResolver có thể được cài đặt bằng lệnh sau.
composer require symfony/options-resolver
Dotenv
Thành phần Dotenv cung cấp các tùy chọn khác nhau để phân tích cú pháp tệp .env và biến được xác định trong chúng để có thể truy cập thông qua getenv(), $_ENV, hoặc là $_SERVER. Thành phần Dotenv có thể được cài đặt bằng lệnh sau.
composer require symfony/dotenv
Bộ nhớ đệm
Thành phần bộ nhớ đệm cung cấp một PSR-6thực hiện. Nó có thể được sử dụng để thêm chức năng bộ nhớ cache vào ứng dụng web của chúng tôi. Vì nó theo sauPSR-6, nó rất dễ bắt đầu và có thể dễ dàng sử dụng nó thay cho một thành phần bộ đệm dựa trên PSR-6 khác. Thành phần bộ nhớ đệm có thể được cài đặt bằng lệnh sau.
composer require symfony/cache
Intl
Thành phần Intl là thư viện thay thế cho phần mở rộng C Intl. Thành phần Intl có thể được cài đặt bằng lệnh sau.
composer require symfony/intl
Dịch
Thành phần dịch thuật cung cấp các tùy chọn khác nhau để quốc tế hóa ứng dụng của chúng tôi. Thông thường, chi tiết bản dịch của các ngôn ngữ khác nhau sẽ được lưu trữ trong một tệp, một tệp cho mỗi ngôn ngữ và nó sẽ được tải động trong thời gian chạy của ứng dụng. Có nhiều định dạng khác nhau để viết một tệp dịch. Thành phần dịch cung cấp các tùy chọn khác nhau để tải bất kỳ loại định dạng nào, chẳng hạn như tệp PHP thuần, tệp CSV, ini, Json, Yaml, ICU Resource, v.v. Thành phần dịch có thể được cài đặt bằng lệnh sau.
composer require symfony/translation
Quy trình làm việc
Thành phần quy trình làm việc cung cấp các công cụ nâng cao để xử lý một máy trạng thái hữu hạn. Bằng cách cung cấp chức năng này một cách đơn giản và hướng đối tượng, thành phần Dòng công việc cho phép lập trình nâng cao trong PHP một cách tương đối dễ dàng. Chúng ta sẽ tìm hiểu chi tiết về nó trong chương Khái niệm nâng cao.
Thành phần quy trình làm việc có thể được cài đặt bằng lệnh sau.
composer require symfony/workflow
Yaml
Thành phần Yaml cung cấp một tùy chọn phân tích cú pháp định dạng tệp YAML và chuyển đổi nó thành các mảng PHP. Nó cũng có thể ghi tệp YAML từ mảng php thuần túy. Thành phần Yaml có thể được cài đặt bằng lệnh sau.
composer require symfony/yaml
Ldap
Thành phần Ldap cung cấp các lớp PHP để kết nối với máy chủ thư mục LDAP hoặc Active và xác thực người dùng chống lại nó. Nó cung cấp một tùy chọn để kết nối với bộ điều khiển miền Windows. Thành phần Ldap có thể được cài đặt bằng lệnh sau.
composer require symfony/ldap
Gỡ lỗi
Thành phần gỡ lỗi cung cấp các tùy chọn khác nhau để cho phép gỡ lỗi trong môi trường PHP. Thông thường, gỡ lỗi mã PHP là khó nhưng thành phần gỡ lỗi cung cấp các lớp đơn giản để dễ dàng quá trình gỡ lỗi và làm cho nó sạch sẽ và có cấu trúc. Thành phần gỡ lỗi có thể được cài đặt bằng lệnh sau.
composer require symfony/debug
Đồng hồ bấm giờ
Thành phần Đồng hồ bấm giờ cung cấp lớp Đồng hồ bấm giờ để cấu hình mã PHP của chúng tôi. Một cách sử dụng đơn giản như sau.
use Symfony\Component\Stopwatch\Stopwatch;
$stopwatch = new Stopwatch();
$stopwatch->start('somename');
// our code to profile
$profiled_data = $stopwatch->stop('somename');
echo $profiled_data->getPeriods()
Thành phần đồng hồ bấm giờ có thể được cài đặt bằng lệnh sau.
composer require symfony/stopwatch
VarDumper
Thành phần VarDumper cung cấp tốt hơn dump()chức năng. Chỉ cần bao gồm thành phần VarDumper và sử dụng chức năng kết xuất để cải thiện chức năng. Thành phần VarDumper có thể được cài đặt bằng lệnh sau.
composer require symfony/var-dumper
BrowserKit
Thành phần BrowserKit cung cấp một giao diện khách trình duyệt trừu tượng. Nó có thể được sử dụng để kiểm tra ứng dụng web theo chương trình. Ví dụ: nó có thể yêu cầu một biểu mẫu, nhập dữ liệu mẫu và gửi nó để tìm bất kỳ vấn đề nào trong biểu mẫu theo chương trình. Thành phần BrowserKit có thể được cài đặt bằng lệnh sau.
composer require symfony/browser-kit
Cầu PHPUnit
Thành phần PHPUnit Bridge cung cấp nhiều tùy chọn để cải thiện môi trường thử nghiệm PHPUnit. Thành phần PHPUnit Bridge có thể được cài đặt bằng lệnh sau.
composer require symfony/phpunit-bridge
Tài sản
Thành phần nội dung cung cấp một xử lý nội dung chung trong một ứng dụng web. Nó tạo URL cho các nội dung như CSS, HTML, JavaScript và cũng thực hiện bảo trì phiên bản. Chúng tôi sẽ kiểm tra chi tiết thành phần nội dung trong chương View Engine. Thành phần tài sản có thể được cài đặt bằng lệnh sau.
composer require symfony/asset
CssSelector
Thành phần CssSelector cung cấp một tùy chọn để chuyển đổi Bộ chọn dựa trên CSS thành biểu thức XPath. Một nhà phát triển web biết biểu thức Bộ chọn dựa trên CSS nhiều hơn biểu thức XPath, nhưng biểu thức hiệu quả nhất để tìm một phần tử trong tài liệu HTML và XML làXPath Expression.
CssSelector cho phép nhà phát triển viết biểu thức trong Bộ chọn CSS , tuy nhiên, thành phần chuyển đổi nó thành biểu thức XPath trước khi thực thi nó. Do đó, nhà phát triển có lợi thế về sự đơn giản của Bộ chọn CSS và hiệu quả của biểu thức XPath.
Thành phần CssSelector có thể được cài đặt bằng lệnh sau.
composer require symfony/css-selector
DomCrawler
Thành phần DomCrawler cung cấp các tùy chọn khác nhau để tìm phần tử trong tài liệu HTML và XML bằng cách sử dụng khái niệm DOM. Nó cũng cung cấp tùy chọn sử dụng biểu thức XPath để tìm một phần tử. Thành phần DomCrawler có thể được sử dụng cùng với thành phần CssSelector để sử dụng bộ chọn CSS thay vì biểu thức XPath. Thành phần DomCrawler có thể được cài đặt bằng lệnh sau.
composer require symfony/dom-crawler
Hình thức
Thành phần biểu mẫu cho phép dễ dàng tạo biểu mẫu trong ứng dụng web. Chúng ta sẽ tìm hiểu chi tiết về lập trình biểu mẫu trong chương Biểu mẫu. Thành phần biểu mẫu có thể được cài đặt bằng lệnh sau.
composer require symfony/form
HttpFoundation
Thành phần HttpFoundation cung cấp một lớp hướng đối tượng cho đặc tả HTTP. Theo mặc định, PHP cung cấp chi tiết yêu cầu và phản hồi HTTP dưới dạng đối tượng dựa trên mảng, chẳng hạn như$_GET, $_POST, $_FILES, $_SESSION, v.v. Chức năng dựa trên HTTP như cài đặt cookie có thể được thực hiện bằng chức năng cũ đơn giản, thuần túy setCookie(). HttpFoundation cung cấp tất cả các chức năng liên quan đến HTTP trong một nhóm nhỏ các lớp như Request, Response, RedirectResponse, v.v., Chúng ta sẽ tìm hiểu về các lớp này trong các chương sau.
Thành phần HttpFoundation có thể được cài đặt bằng lệnh sau.
composer require symfony/http-foundation
HttpKernel
Thành phần HttpKernel là thành phần cốt lõi trong thiết lập web Symfony. Nó cung cấp tất cả các chức năng cần thiết cho một ứng dụng web - từ việc nhậnRequest phản đối việc gửi lại Responsevật. Kiến trúc hoàn chỉnh của ứng dụng web Symfony được cung cấp bởi HttpKernel như đã thảo luận trong kiến trúc của khung công tác web Symfony.
Thành phần HttpKernel có thể được cài đặt bằng lệnh sau.
composer require symfony/http-kernel
định tuyến
Thành phần định tuyến ánh xạ yêu cầu HTTP tới một tập hợp các biến cấu hình được xác định trước. Định tuyến quyết định phần nào của ứng dụng của chúng tôi sẽ xử lý một yêu cầu. Chúng ta sẽ tìm hiểu thêm về định tuyến trong chương Định tuyến.
Thành phần định tuyến có thể được cài đặt bằng lệnh sau.
composer require symfony/filesystem
Đúc
Thành phần khuôn mẫu cung cấp cơ sở hạ tầng cần thiết để xây dựng một hệ thống khuôn mẫu hiệu quả. Symfony sử dụng thành phần Templating để triển khai công cụ View. Chúng ta sẽ tìm hiểu thêm về thành phần Templating trong chương View engine.
Thành phần khuôn mẫu có thể được cài đặt bằng lệnh sau.
composer require symfony/templating
Trình xác thực
Thành phần trình xác thực cung cấp việc triển khai JSR-303 Bean Validation Specification. Nó có thể được sử dụng để xác nhận một biểu mẫu trong môi trường web. Chúng ta sẽ tìm hiểu thêm về Validator trong chương Validation.
Thành phần trình xác thực có thể được cài đặt bằng lệnh sau.
composer require symfony/validator
Bảo vệ
Thành phần bảo mật cung cấp hệ thống bảo mật hoàn chỉnh cho ứng dụng web của chúng tôi, có thể là xác thực cơ bản HTTP, xác thực thông báo HTTP, xác thực dựa trên biểu mẫu tương tác, đăng nhập chứng nhận X.509, v.v. Nó cũng cung cấp cơ chế ủy quyền dựa trên vai trò người dùng thông qua hệ thống ACL tích hợp sẵn . Chúng ta sẽ tìm hiểu chi tiết hơn trong chương Khái niệm nâng cao.
Thành phần bảo mật có thể được cài đặt bằng lệnh sau.
composer require symfony/security