Symfony - Компоненты

Как обсуждалось ранее, компоненты Symfony представляют собой автономную библиотеку PHP, предоставляющую определенную функцию, которая может использоваться в любом приложении PHP. Новые полезные компоненты вводятся в каждый выпуск Symfony. В настоящее время во фреймворке Symfony есть более 30 высококачественных компонентов. Давайте узнаем об использовании компонентов Symfony в этой главе.

Установка компонента Symfony

Компоненты Symfony можно легко установить с помощью команды composer. Следующая универсальная команда может использоваться для установки любого компонента Symfony.

cd /path/to/project/dir 
composer require symfony/<component_name>

Давайте создадим простое приложение php и попробуем установить Filesystem составная часть.

Step 1 - Создайте папку для приложения, filesystem-example

cd /path/to/dev/folder 
mdkir filesystem-example 
cd filesystem-example

Step 2 - Установите компонент файловой системы, используя следующую команду.

composer require symfony/filesystem

Step 3 - Создать файл main.php и введите следующий код.

<?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; 
   } 
?>

Очень важна первая строка, которая загружает все необходимые классы из всех компонентов, установленных с помощью команды Composer. В следующих строках используется класс Filesystem.

Step 4 - Запустите приложение, используя следующую команду, и оно создаст новую папку sample-dir и файл test.txt под ним.

php main.php

Подробная информация о компонентах Symfony

Symfony предоставляет компоненты, начиная от простой функции, например файловой системы, и заканчивая расширенной функцией, например событиями, контейнерной технологией и внедрением зависимостей. Сообщите нам обо всех компонентах один за другим в следующих разделах.

Файловая система

Компонент файловой системы обеспечивает базовую системную команду, относящуюся к файлам и каталогам, такие как создание файла, создание папки, существование файла и т. Д. Компонент файловой системы может быть установлен с помощью следующей команды.

composer require symfony/filesystem

Finder

Компонент Finder предоставляет бесплатные классы для поиска файлов и каталогов по указанному пути. Он обеспечивает простой способ перебора файлов в пути. Компонент Finder можно установить с помощью следующей команды.

composer require symfony/finder

Приставка

Компонент консоли предоставляет различные параметры для простого создания команд, которые можно выполнять в терминале. Symfony используетCommand компонент, чтобы обеспечить различные функции, такие как создание нового приложения, создание пакета и т. д. Даже сборка PHP на веб-сервере может быть вызвана с помощью команды Symfony, php bin/console server:runкак показано в разделе установки. ВConsole Компонент можно установить с помощью следующей команды.

composer require symfony/console

Давайте создадим простое приложение и создадим команду, HelloCommand используя Console компонент и вызвать его.

Step 1 - Создайте проект, используя следующую команду.

cd /path/to/project 
composer require symfony/console

Step 2 - Создать файл main.php и включите следующий код.

<?php 
   require __DIR__ . '/vendor/autoload.php'; 
   use Symfony\Component\Console\Application; 
   
   $app = new Application(); 
   $app->run(); 
?>

Application class устанавливает необходимые функциональные возможности простого консольного приложения.

Step 3 - Запустить приложение, php main.php, что даст следующий результат.

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 - Создайте класс под названием HelloCommand расширение Command класс в main.php сам.

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 { 
}

Приложение использует следующие четыре класса, доступные в Command составная часть.

  • Command - Используется для создания новой команды

  • InputInterface - Используется для установки пользовательского ввода

  • InputArgument - Используется для получения пользовательского ввода

  • OutputInterface - Используется для вывода вывода на консоль

step 5 - Создать функцию configure() и установите имя, описание и текст справки.

protected function configure() { 
   $this 
      ->setName('app:hello') 
      ->setDescription('Sample command, hello') 
      ->setHelp('This command is a sample command') 
}

step 6 - Создайте входной аргумент, user для команды и установить как обязательный.

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 - Создать функцию execute() с двумя аргументами InputArgument и OutputArgument.

protected function execute(InputInterface $input, OutputInterface $output) { 
}

step 8 - Использование InputArgument чтобы получить данные пользователя, введенные пользователем, и распечатать их на консоли, используя OutputArgument.

protected function execute(InputInterface $input, OutputInterface $output) { 
   $name = $input->getArgument('name'); 
   $output->writeln('Hello, ' . $name); 
}

step 9 - Зарегистрируйте HelloCommand в приложение с помощью add метод Application класс.

$app->add(new HelloCommand());

Полное приложение выглядит следующим образом.

<?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 - Теперь запустите приложение, используя следующую команду, и результатом будет Hello, Jon, как и ожидалось.

php main.php app:hello Jon

Symfony поставляется с предварительно созданным двоичным файлом под названием console в каталоге bin любого веб-приложения Symfony, которое можно использовать для вызова команд в приложении.

Процесс

Компонент процесса предоставляет параметры для безопасного и эффективного выполнения любой системной команды в подпроцессе. Компонент процесса можно установить с помощью следующей команды.

composer require symfony/process

ClassLoader

Компонент ClassLoader обеспечивает реализацию как PSR-0 и PSR-4загрузчик классов стандартный. Его можно использовать для автоматической загрузки классов. В ближайшее время он будет амортизирован. Загрузчик классов на основе композитора предпочтительнее этого компонента. Компонент ClassLoader можно установить с помощью следующей команды.

composer require symfony/class-loader

PropertyAccess

Компонент PropertyAccess предоставляет различные параметры для чтения и записи деталей объекта и массива с использованием строковой нотации. Например, массивProduct с ключом price можно получить динамически, используя [price] строка.

$product = array( 
   'name' => 'Cake' 
   'price' => 10 
);  
var priceObj = $propertyAccesserObj->getValue($product, '[price]');

Компонент PropertyAccess можно установить с помощью следующей команды.

composer require symfony/property-access

PropertyInfo

Компонент PropertyInfo похож на компонент PropertyAccess, однако он работает только с объектами PHP и предоставляет гораздо больше функциональных возможностей.

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" 
   } 
*/

Компонент PropertyInfo можно установить с помощью следующей команды.

composer require symfony/property-info

EventDispatcher

Компонент EventDispatcher обеспечивает программирование на основе событий на PHP. Это позволяет объектам общаться друг с другом, отправляя события и слушая их. Мы узнаем, как создавать события и слушать их в главе «События и прослушиватель событий».

Компонент EventDispatcher можно установить с помощью следующей команды.

composer require symfony/event-dispatcher

Внедрение зависимости

Компонент DependencyInjection предоставляет простой и эффективный механизм для создания объекта с его зависимостью. Когда проект растет, в нем появляется множество классов с глубокой зависимостью, которые необходимо правильно обрабатывать. В противном случае проект провалится. DependencyInjection предоставляет простой и надежный контейнер для обработки зависимости. Мы узнаем о контейнерах и концепции внедрения зависимостей в главе Контейнер службы.

Компонент DependencyInjection можно установить с помощью следующей команды.

composer require symfony/dependency-injection

Сериализатор

Компонент сериализатора предоставляет возможность преобразовать объект PHP в определенный формат, такой как XML, JSON, двоичный и т. Д., А затем позволяет преобразовать его обратно в исходный объект без потери данных.

Компонент сериализатора можно установить с помощью следующей команды.

composer require symfony/serializer

Конфиг

Компонент Config предоставляет опции для загрузки, анализа, чтения и проверки конфигураций типа XML, YAML, PHP и ini. Он также предоставляет различные варианты для загрузки деталей конфигурации из базы данных. Это один из важных компонентов, полезных для ясной и краткой настройки веб-приложения. Компонент конфигурации можно установить с помощью следующей команды.

composer require symfony/config

ExpressionLanguage

Компонент ExpessionLanguage предоставляет полноценный механизм выражения. Выражения однострочны и предназначены для возврата значения. Механизм выражений позволяет легко компилировать, анализировать и получать значение из выражения. Он позволяет использовать одно или несколько выражений в среде (файле) конфигурации программистом, не работающим на PHP, например системным администратором. Компонент ExpressionLanguage можно установить с помощью следующей команды.

composer require symfony/expression-language

Параметры

Компонент OptionsResolver обеспечивает способ проверки системы опций, используемой в нашей системе. Например, настройка базы данных помещается в массив, dboption с хостом, именем пользователя, паролем и т. Д. В качестве ключей. Вам необходимо проверить записи, прежде чем использовать его для подключения к базе данных. OptionsResolver упрощает эту задачу, предоставляя простой класс OptionsResolver и преобразователь методов, который разрешает настройку базы данных и, если есть какие-либо проблемы с проверкой, он сообщит об этом.

$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);

Компонент OptionsResolver можно установить с помощью следующей команды.

composer require symfony/options-resolver

Dotenv

Компонент Dotenv предоставляет различные параметры для анализа файлов .env и определенной в них переменной для доступа через getenv(), $_ENV, или же $_SERVER. Компонент Dotenv можно установить с помощью следующей команды.

composer require symfony/dotenv

Кеш

Компонент кеширования обеспечивает расширенный PSR-6реализация. Его можно использовать для добавления функций кеширования в наше веб-приложение. Поскольку следуетPSR-6, его легко начать, и его можно легко использовать вместо другого компонента кэша на основе PSR-6. Компонент кеширования можно установить с помощью следующей команды.

composer require symfony/cache

Intl

Компонент Intl - это библиотека замены для расширения C Intl. Компонент Intl можно установить с помощью следующей команды.

composer require symfony/intl

Перевод

Компонент перевода предоставляет различные варианты интернационализации нашего приложения. Обычно детали перевода для разных языков хранятся в файле, по одному на каждый язык, и загружаются динамически во время выполнения приложения. Есть разные форматы для написания файла перевода. Компонент перевода предоставляет различные параметры для загрузки любого типа формата, такого как простой файл PHP, CSV, ini, Json, Yaml, файл ресурсов ICU и т. Д. Компонент перевода может быть установлен с помощью следующей команды.

composer require symfony/translation

Рабочий процесс

Компонент рабочего процесса предоставляет расширенные инструменты для обработки конечного автомата. Предоставляя эту функциональность простым и объектно-ориентированным способом, компонент Workflow позволяет относительно легко расширять возможности программирования на PHP. Мы узнаем об этом подробно в главе Advanced Concept.

Компонент рабочего процесса можно установить с помощью следующей команды.

composer require symfony/workflow

Ямл

Компонент YAML предоставляет параметр, который анализирует формат файла YAML и преобразует его в массивы PHP. Он также может записывать файл YAML из простого массива php. Компонент Yaml можно установить с помощью следующей команды.

composer require symfony/yaml

Ldap

Компонент Ldap предоставляет классы PHP для подключения к серверу LDAP или Active Directory и аутентификации пользователя на нем. Он предоставляет возможность подключиться к контроллеру домена Windows. Компонент Ldap можно установить с помощью следующей команды.

composer require symfony/ldap

Отлаживать

Компонент отладки предоставляет различные параметры для включения отладки в среде PHP. Обычно отладка кода PHP сложна, но компонент отладки предоставляет простые классы, чтобы упростить процесс отладки и сделать его чистым и структурированным. Компонент отладки можно установить с помощью следующей команды.

composer require symfony/debug

Секундомер

Компонент Stopwatch предоставляет класс Stopwatch для профилирования нашего PHP-кода. Простое использование выглядит следующим образом.

use Symfony\Component\Stopwatch\Stopwatch; 
$stopwatch = new Stopwatch(); 
$stopwatch->start('somename');  

// our code to profile 
$profiled_data = $stopwatch->stop('somename');  
echo $profiled_data->getPeriods()

Компонент секундомера можно установить с помощью следующей команды.

composer require symfony/stopwatch

VarDumper

Компонент VarDumper обеспечивает лучшее dump()функция. Просто включите компонент VarDumper и используйте функцию дампа, чтобы получить улучшенную функциональность. Компонент VarDumper можно установить с помощью следующей команды.

composer require symfony/var-dumper

BrowserKit

Компонент BrowserKit предоставляет абстрактный клиентский интерфейс браузера. Его можно использовать для программного тестирования веб-приложений. Например, он может запросить форму, ввести образцы данных и отправить их, чтобы программно найти любую проблему в форме. Компонент BrowserKit можно установить с помощью следующей команды.

composer require symfony/browser-kit

Мост PHPUnit

Компонент PHPUnit Bridge предоставляет множество возможностей для улучшения среды тестирования PHPUnit. Компонент PHPUnit Bridge можно установить с помощью следующей команды.

composer require symfony/phpunit-bridge

Актив

Компонент актива обеспечивает общую обработку активов в веб-приложении. Он генерирует URL-адреса для таких ресурсов, как CSS, HTML, JavaScript, а также выполняет обслуживание версий. Мы подробно проверим компонент актива в главе View Engine. Компонент актива можно установить с помощью следующей команды.

composer require symfony/asset

CssSelector

Компонент CssSelector предоставляет возможность конвертировать селекторы на основе CSS в выражение XPath. Веб-разработчик знает выражение селекторов на основе CSS больше, чем выражение XPath, но наиболее эффективным выражением для поиска элемента в документе HTML и XML являетсяXPath Expression.

CssSelector позволяет разработчику записывать выражение в селекторах CSS , однако компонент преобразует его в выражение XPath перед его выполнением. Таким образом, разработчик имеет преимущество в простоте селекторов CSS и эффективности выражения XPath.

Компонент CssSelector можно установить с помощью следующей команды.

composer require symfony/css-selector

DomCrawler

Компонент DomCrawler предоставляет различные варианты поиска элемента в документе HTML и XML с использованием концепции DOM. Он также предоставляет возможность использовать выражение XPath для поиска элемента. Компонент DomCrawler можно использовать вместе с компонентом CssSelector для использования селекторов CSS вместо выражения XPath. Компонент DomCrawler можно установить с помощью следующей команды.

composer require symfony/dom-crawler

Форма

Компонент формы позволяет легко создавать формы в веб-приложении. Мы подробно изучим программирование форм в главе «Формы». Компонент формы можно установить с помощью следующей команды.

composer require symfony/form

HttpFoundation

Компонент HttpFoundation обеспечивает объектно-ориентированный уровень спецификации HTTP. По умолчанию PHP предоставляет детали HTTP-запроса и ответа в виде объекта на основе массива, например$_GET, $_POST, $_FILES, $_SESSIONи т. д. Функциональные возможности на основе HTTP, такие как установка файла cookie, могут быть выполнены с помощью простой старой функции. setCookie(). HttpFoundation предоставляет все функции, связанные с HTTP, в небольшом наборе классов, таких как Request, Response, RedirectResponse и т. Д. Мы узнаем об этих классах в следующих главах.

Компонент HttpFoundation можно установить с помощью следующей команды.

composer require symfony/http-foundation

HttpKernel

Компонент HttpKernel - это основной компонент в веб-настройке Symfony. Он предоставляет все функции, необходимые для веб-приложения - от полученияRequest возражать против отправки обратно Responseобъект. Полная архитектура веб-приложения Symfony предоставляется HttpKernel, как описано в архитектуре веб-фреймворка Symfony.

Компонент HttpKernel можно установить с помощью следующей команды.

composer require symfony/http-kernel

Маршрутизация

Компонент маршрутизации отображает HTTP-запрос на заранее определенный набор переменных конфигурации. Маршрутизация решает, какая часть нашего приложения должна обрабатывать запрос. Мы узнаем больше о маршрутизации в главе «Маршрутизация».

Компонент маршрутизации можно установить с помощью следующей команды.

composer require symfony/filesystem

Шаблоны

Компонент шаблонов предоставляет необходимую инфраструктуру для построения эффективной системы шаблонов. Symfony использует компонент Templating для реализации движка View. Мы узнаем больше о компоненте Templating в главе View Engine.

Компонент шаблонов можно установить с помощью следующей команды.

composer require symfony/templating

Валидатор

Компонент валидатора обеспечивает реализацию JSR-303 Bean Validation Specification. Его можно использовать для проверки формы в веб-среде. Мы узнаем больше о Валидаторе в главе «Проверка».

Компонент валидатора можно установить с помощью следующей команды.

composer require symfony/validator

Безопасность

Компонент безопасности обеспечивает полную систему безопасности для нашего веб-приложения, будь то базовая аутентификация HTTP, дайджест-аутентификация HTTP, аутентификация на основе интерактивной формы, вход в систему сертификации X.509 и т. Д. Он также обеспечивает механизм авторизации на основе роли пользователя через встроенную систему ACL. . Мы узнаем более подробно в главе Advanced Concept.

Компонент безопасности можно установить с помощью следующей команды.

composer require symfony/security