📜  Symfony-组件

📅  最后修改于: 2020-10-19 03:12:27             🧑  作者: Mango


如前所述,Symfony组件是独立的PHP库,提供了特定功能,可以在任何PHP应用程序中使用。 Symfony的每个发行版中都引入了有用的新组件。目前,Symfony框架中有30多个高质量组件。让我们了解本章中Symfony组件的用法。

安装Symfony组件

使用composer命令可以轻松安装Symfony组件。以下通用命令可用于安装任何Symfony组件。

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

让我们创建一个简单的php应用程序,然后尝试安装Filesystem组件。

步骤1-为应用程序创建一个文件夹,文件系统示例

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

步骤2-使用以下命令安装文件系统组件。

composer require symfony/filesystem  

步骤3-创建文件main.php并输入以下代码。

mkdir('./sample-dir'); 
      $fs->touch('./sample-dir/text.txt'); 
   } catch (IOExceptionInterface $e) { 
      echo $e; 
   } 
?>  

第一行非常重要,它从使用Composer命令安装的所有组件中加载所有必需的类。下几行使用Filesystem类。

步骤4-使用以下命令运行该应用程序,它将在其下创建一个新文件夹sample-dir和文件test.txt

php main.php

Symfony组件的详细信息

Symfony提供了从简单功能(例如文件系统)到高级功能(例如事件,容器技术和依赖项注入)的各种组件。在以下各节中,让我们逐一了解所有组件。

文件系统

文件系统组件提供了与文件和目录相关的基本系统命令,例如文件创建,文件夹创建,文件存在等。可以使用以下命令来安装文件系统组件。

composer require symfony/filesystem

发现者

Finder组件提供流利的类,以查找指定路径中的文件和目录。它提供了一种简单的方法来遍历路径中的文件。可以使用以下命令安装Finder组件。

composer require symfony/finder

安慰

控制台组件提供了各种选项,可轻松创建可在终端中执行的命令。 Symfony广泛使用Command组件来提供各种功能,例如创建新应用程序,创建捆绑包等。甚至可以使用Symfony命令调用web服务器中的PHP内置版本,即php bin / console服务器:运行,如安装部分所示。 。可以使用以下命令安装控制台组件。

composer require symfony/console

让我们创建一个简单的应用程序并使用控制台组件创建一个命令HelloCommand并调用它。

步骤1-使用以下命令创建一个项目。

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

步骤2-创建一个文件main.php并包含以下代码。

run(); 
?> 

应用程序类设置了裸机控制台应用程序的必要功能。

步骤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

步骤4-main.php本身中创建一个名为HelloCommand的类,扩展Command类。

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组件中可用的以下四个类。

  • 命令-用于创建新命令

  • InputInterface-用于设置用户输入

  • InputArgument-用于获取用户输入

  • OutputInterface-用于将输出打印到控制台

步骤5-创建一个函数configure()并设置名称,描述和帮助文本。

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

步骤6-创建输入参数,该命令的用户,并设置为必需。

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'); 
}

步骤7-创建一个带有两个参数InputArgumentOutputArgument的函数execute()

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

步骤8-使用InputArgument获取用户输入的用户详细信息,并使用OutputArgument将其打印到控制台。

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

步骤9-使用Application类的add方法将HelloCommand注册到应用程序中

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

完整的应用程序如下。

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

步骤10-现在,使用以下命令执行应用程序,结果将是预期的Hello,Jon。

php main.php app:hello Jon

Symfony在任何Symfony Web应用程序的bin目录中附带一个称为控制台的预构建二进制文件,可用于在应用程序中调用命令。

处理

流程组件提供了以安全有效的方式在子流程中运行任何系统命令的选项。可以使用以下命令安装过程组件。

composer require symfony/process

类加载器

ClassLoader组件为PSR-0PSR-4类加载器标准提供实现。它可以用来自动加载类。它将在不久的将来折旧。基于Composer的类加载器优先于此组件。可以使用以下命令安装ClassLoader组件。

composer require symfony/class-loader

物业访问

PropertyAccess组件提供各种选项来读取和写入对象以及使用字符串表示法的数组详细信息。例如,可以使用[price]字符串动态访问具有关键价格的产品数组。

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

可以使用以下命令安装PropertyAccess组件。

composer require symfony/property-access 

物业信息

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,Binary等,然后允许其将其转换回原始对象而不会丢失任何数据。

可以使用以下命令安装序列化程序组件。

composer require symfony/serializer

设定档

Config组件提供了用于加载,解析,读取和验证XML,YAML,PHP和ini类型的配置的选项。它还提供了各种选项来从数据库中加载配置详细信息。这是对以清晰简洁的方式配置Web应用程序有用的重要组件之一。可以使用以下命令安装Config组件。

composer require symfony/config

表达语言

ExpessionLanguage组件提供了完整的表达式引擎。表达式是一种返回值的直线。表达式引擎使您可以轻松地编译,解析并从表达式中获取值。它使非PHP程序员(例如系统管理员)在配置环境(文件)中使用一个或多个表达式。可以使用以下命令安装ExpressionLanguage组件。

composer require symfony/expression-language

OptionsResolver

OptionsResolver组件提供了一种验证我们系统中使用的选项系统的方法。例如,数据库设置放置在数组中,dboption以主机,用户名,密码等作为键。您需要先验证条目,然后再使用它来连接数据库。 OptionsResolver通过提供一个简单的类OptionsResolver和一个方法解析器来简化此任务,该方法解析器可以解析数据库设置,如果存在任何验证问题,它将报告该问题。

$options = array( 
   'host'     => '', 
   'username' => '', 
   'password' => '', 
);  
$resolver = new OptionsResolver(); 
$resolver->setDefaults(array( 
   'host'     => '', 
   'username' => '', 
   'password' => '', 
)); 
$resolved_options = $resolver->resolve($options);

可以使用以下命令安装OptionsResolver组件。

composer require symfony/options-resolver 

多滕夫

Dotenv组件提供各种选项来解析.env文件,并定义它们中的变量以通过getenv(),$ _ENV$ _SERVER进行访问。可以使用以下命令安装Dotenv组件。

composer require symfony/dotenv

快取

缓存组件提供了扩展的PSR-6实现。它可以用来向我们的Web应用程序添加缓存功能。由于它遵循PSR-6 ,因此很容易上手,并且可以轻松地代替另一个基于PSR-6的缓存组件使用。可以使用以下命令安装缓存组件。

composer require symfony/cache 

国际

Intl组件是C Intl扩展的替换库。可以使用以下命令安装Intl组件。

composer require symfony/intl

翻译

翻译组件提供了各种选项来国际化我们的应用程序。通常,不同语言的翻译详细信息将存储在一个文件中,每种语言一个文件,并且将在应用程序运行时动态加载。编写翻译文件有多种格式。翻译组件提供了各种选项来加载任何类型的格式,例如纯PHP文件,CSV,ini,Json,Yaml,ICU资源文件等。可以使用以下命令安装翻译组件。

composer require symfony/translation

工作流程

工作流组件提供了高级工具来处理有限状态机。通过以一种简单的面向对象的方式提供此功能,Workflow组件可以相对轻松地实现PHP中的高级编程。我们将在“高级概念”一章中详细了解它。

可以使用以下命令安装工作流组件。

composer require symfony/workflow 

Yaml

Yaml组件提供了一个选项,用于解析YAML文件格式并将其转换为PHP数组。它还能够从纯PHP数组写入YAML文件。可以使用以下命令安装Yaml组件。

composer require symfony/yaml

Ldap

Ldap组件提供PHP类以连接到LDAP或Active Directory服务器,并根据该服务器对用户进行身份验证。它提供了连接到Windows域控制器的选项。可以使用以下命令安装Ldap组件。

composer require symfony/ldap

除错

调试组件提供了各种选项来启用PHP环境中的调试。通常,调试PHP代码很困难,但是debug组件提供了简单的类来简化调试过程并使之干净整洁。可以使用以下命令安装调试组件。

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组件提供了抽象的浏览器客户端界面。它可以用于以编程方式测试Web应用程序。例如,它可以请求一个表格,输入示例数据,然后以编程方式提交它以查找该表格中的任何问题。可以使用以下命令安装BrowserKit组件。

composer require symfony/browser-kit

PHPUnit桥

PHPUnit Bridge组件提供了许多选项来改善PHPUnit测试环境。可以使用以下命令安装PHPUnit Bridge组件。

composer require symfony/phpunit-bridge

资产

资产组件在Web应用程序中提供常规资产处理。它会为资产(例如CSS,HTML,JavaScript)生成URL,并执行版本维护。我们将在“ View Engine”一章中详细检查资产组件。可以使用以下命令安装资产组件。

composer require symfony/asset

CssSelector

CssSelector组件提供了一个选项,可以将基于CSS的选择器转换为XPath表达式。 Web开发人员比XPath表达式更了解基于CSS的Selectors表达式,但是在HTML和XML文档中查找元素的最有效的表达式是XPath Expression

CssSelector使开发人员可以使用CSS Selectors编写表达式,但是,组件在执行之前将其转换为XPath表达式。因此,开发人员具有CSS选择器简单和XPath表达式效率高的优点。

可以使用以下命令安装CssSelector组件。

composer require symfony/css-selector

DomCrawler

DomCrawler组件提供了各种选项,可以使用DOM概念在HTML和XML文档中查找元素。它还提供了使用XPath表达式查找元素的选项。 DomCrawler组件可以与CssSelector组件一起使用,以使用CSS选择器代替XPath表达式。可以使用以下命令安装DomCrawler组件。

composer require symfony/dom-crawler

形成

表单组件使在Web应用程序中轻松创建表单成为可能。我们将在“表单”一章中详细学习表单编程。可以使用以下命令安装表单组件。

composer require symfony/form

HttpFoundation

HttpFoundation组件为HTTP规范提供了一个面向对象的层。默认情况下,PHP提供HTTP请求和响应详细信息作为基于数组的对象,例如$ _GET,$ _ POST$ _ FILES,$ _ SESSION等。基于HTTP的功能(例如设置cookie)可以使用简单的普通旧函数setCookie( ) 。 HttpFoundation在少量类(例如Request,Response,RedirectResponse等)中提供了所有与HTTP相关的功能,我们将在后面的章节中学习这些类。

可以使用以下命令安装HttpFoundation组件。

composer require symfony/http-foundation

Http内核

HttpKernel组件是Symfony Web设置中的核心组件。它提供了Web应用程序所需的所有功能-从接收Request对象到发回Response对象。 HttpKernel提供了Symfony Web应用程序的完整体系结构,如Symfony Web框架的体系结构中所述。

可以使用以下命令安装HttpKernel组件。

composer require symfony/http-kernel

路由

路由组件将HTTP请求映射到一组预定义的配置变量。路由决定了我们应用程序的哪一部分应该处理请求。我们将在“路由”一章中了解有关路由的更多信息。

可以使用以下命令安装路由组件。

composer require symfony/filesystem

模板化

模板组件为构建有效的模板系统提供了必要的基础结构。 Symfony将模板组件用于其View引擎实现。我们将在“视图引擎”一章中了解有关模板组件的更多信息。

可以使用以下命令安装模板组件。

composer require symfony/templating

验证器

验证程序组件提供了JSR-303 Bean验证规范的实现。它可用于在Web环境中验证表单。我们将在“验证”一章中了解有关验证器的更多信息。

可以使用以下命令安装验证器组件。

composer require symfony/validator

安全

安全组件为我们的Web应用程序提供了完整的安全系统,包括HTTP基本身份验证,HTTP摘要身份验证,基于交互式表单的身份验证,X.509认证登录等。它还通过内置ACL系统提供了基于用户角色的授权机制。 。我们将在“高级概念”一章中详细了解更多。

可以使用以下命令安装安全组件。

composer require symfony/security