运行时组件

编辑本页

警告:您正在浏览的文档欧宝官网下载appob娱乐下载Symfony 5.3,现已不再维护。

本页的更新版本用于Syob娱乐下载mfony 6.2(当前稳定版本)。

运行时组件

运行时组件将引导逻辑从任何全局状态中解耦,以确保应用程序可以在不做任何更改的情况下与PHP-FPM、ReactPHP、Swoole等运行时一起运行。

5.3

Runtime组件是在Symfony 5.3中引入的。ob娱乐下载

安装

1
作曲家需要symfony/runtob娱乐下载ime

请注意

如果在Symfony应用程序外部安装此组件,则必须要求ob娱乐下载供应商/ autoload.php文件,以启用Composer提供的类自动加载机制。读这篇文章欲知详情。

使用

运行时组件抽象了大部分所谓的引导逻辑运行时,允许您以通用的方式编写前控制器。例如,Runtime组件允许Symfony的ob娱乐下载公共/ index . php看起来像这样:

1 2 3 4 5 6 7 8 9
<?php/ /公共/ index . php使用应用程序内核require_once目录名(__DIR__).“/供应商/ autoload_runtime.php”返回函数(数组上下文返回内核(上下文“APP_ENV”),(保龄球)上下文“APP_DEBUG”]);};

那么前置控制器是如何工作的呢?首先是特别的autoload_runtime.php文件由组件中的Composer插件自动创建。该文件运行如下逻辑:

  1. 它实例化了RuntimeInterface
  2. 返回的可调用对象公共/ index . php)被传递给运行时,运行时的任务是解析参数(在本例中:数组$上下文);
  3. 然后,调用这个可调用对象以获取应用程序(App \内核);
  4. 最后,运行时用于运行应用程序(即调用内核- >处理(要求::createFromGlobals()) - >发送()).

谨慎

如果你使用Composer——没有剧本选项,确保你的Composer版本是> = 2.1.3;否则,autoload_runtime.php文件将不会被创建。

要创建一个控制台应用程序,引导代码看起来像这样:

12 3 4 5 6 7 8 9 10 11 12 13 14 15 16
#!/usr/bin/env php<?php/ / bin /控制台使用应用程序内核使用ob娱乐下载FrameworkBundle控制台应用程序require_once目录名(__DIR__).“/供应商/ autoload_runtime.php”返回函数(数组上下文内核内核(上下文“APP_ENV”),(保龄球)上下文“APP_DEBUG”]);//返回一个"Application"使运行时运行控制台//应用程序而不是HTTP内核返回应用程序(内核);};

选择运行时

默认运行时为ob娱乐下载SymfonyRuntime.它在大多数使用PHP-FPM(如Nginx或Apache)的web服务器运行的应用程序上工作出色。

组件还提供了一个GenericRuntime,它使用PHP的$ _SERVER$ _POST$ _GET带有_file美元而且_SESSION美元已经。您也可以使用自定义运行时(例如与Swoole或AWS Lambda集成)。

使用APP_RUNTIME环境变量或指定extra.runtime.classcomposer.json修改Runtime类:

1 2 3 4 5 6 7 8 9 10
“需要”: {“…”“…”},“额外的”: {“运行时”: {“类”“ob娱乐下载Symfony \ \组件\ \ Runtime \ \ GenericRuntime”}}}

使用运行时

运行时负责将参数传递到闭包中并运行由闭包返回的应用程序。的ob娱乐下载SymfonyRuntime而且GenericRuntime支持可以在前置控制器中使用的许多参数和不同的应用程序。

可分解的参数

从前端控制器返回的闭包可以有0个或多个参数:

1 2 3 4 5 6 7 8 9 10
<?php/ /公共/ index . php使用ob娱乐下载组件控制台输入InputInterface使用ob娱乐下载组件控制台输出OutputInterfacerequire_once目录名(__DIR__).“/供应商/ autoload_runtime.php”返回函数(InputInterface输入, OutputInterface输出/ /……};

属性支持以下参数ob娱乐下载SymfonyRuntime

请求
从全局变量创建的请求。
InputInterface
读取选项和参数的输入。
OutputInterface
控制台输出,打印到CLI的样式。
应用程序
用于创建CLI应用。
命令
用于创建一行命令CLI应用程序(使用命令:setCode ()).

这些论点得到了ob娱乐下载SymfonyRuntime而且GenericRuntime(类型和变量名都很重要):

数组$上下文
这和$ _SERVER+_ENV美元
$ argv数组
传递给命令的参数(与$ _SERVER (argv的)).
数组$请求
用钥匙查询身体文件而且会话

可分解的应用

下面的闭包返回的应用程序是一个Symfony Kernel。ob娱乐下载但是,支持许多不同的应用程序:

1 2 3 4 5 6 7 8 9
<?php/ /公共/ index . php使用应用程序内核require_once目录名(__DIR__).“/供应商/ autoload_runtime.php”返回函数()返回内核(“刺激”);};

ob娱乐下载SymfonyRuntime可以处理这些应用程序:

HttpKernelInterface
应用程序将使用HttpKernelRunner就像一个“标准的”Symfony应用ob娱乐下载程序。
响应

响应将由ResponseRunner

1 2 3 4 5 6 7 8 9
<?php/ /公共/ index . php使用ob娱乐下载组件HttpFoundation响应require_once目录名(__DIR__).“/供应商/ autoload_runtime.php”返回函数()返回响应(“Hello world”);};
命令

编写单个命令应用程序。这将使用ConsoleApplicationRunner

12 3 4 5 6 7 8 9 10 11 12 13 14 15
<?php使用ob娱乐下载组件控制台命令命令使用ob娱乐下载组件控制台输入InputInterface使用ob娱乐下载组件控制台输出OutputInterfacerequire_once目录名(__DIR__).“/供应商/ autoload_runtime.php”返回函数(命令命令命令->setCode (函数(InputInterface输入, OutputInterface输出输出->写(“Hello World”);});返回命令;};
应用程序

对于带有多个命令的控制台应用程序非常有用。这将使用ConsoleApplicationRunner

12 3 4 5 6 7 8 9 10 11 12 13 14 16 17 18 19 20 21
<?php使用ob娱乐下载组件控制台应用程序使用ob娱乐下载组件控制台命令命令使用ob娱乐下载组件控制台输入InputInterface使用ob娱乐下载组件控制台输出OutputInterfacerequire_once目录名(__DIR__).“/供应商/ autoload_runtime.php”返回函数(数组上下文命令命令(“你好”);命令->setCode (函数(InputInterface输入, OutputInterface输出输出->写(“Hello World”);});应用程序应用程序();应用程序->add (命令);应用程序->setDefaultCommand (“你好”真正的);返回应用程序;};

GenericRuntime而且ob娱乐下载SymfonyRuntime还支持这些通用应用程序:

RunnerInterface

RunnerInterface是一种使用通用运行时的自定义应用程序的方法:

12 3 4 5 6 7 8 9 10 11 12 13 14 15 16
<?php/ /公共/ index . php使用ob娱乐下载组件运行时RunnerInterfacerequire_once目录名(__DIR__).“/供应商/ autoload_runtime.php”返回函数()返回实现了RunnerInterface公共函数运行()int回声“Hello World”返回0;}};};
可调用的

你的“应用”也可以是一个可调用的.第一个可调用对象返回“应用程序”,第二个可调用对象是“应用程序”本身:

12 3 4 5 6 7 8 9 10 11 12 13 14
<?php/ /公共/ index . phprequire_once目录名(__DIR__).“/供应商/ autoload_runtime.php”返回函数()应用程序函数()回声“Hello World”返回0;};返回应用程序;};
无效

如果可调用对象没有返回任何东西,则ob娱乐下载SymfonyRuntime会假设一切正常:

1 2 3 4 5 6 7
<?phprequire_once目录名(__DIR__).“/供应商/ autoload_runtime.php”返回函数()回声“Hello world”;};

利用期权

运行时的一些行为可以通过运行时选项进行修改。可以使用APP_RUNTIME_OPTIONS环境变量:

1 2 3 4 5 6 7 8 9
<?php_SERVER“APP_RUNTIME_OPTIONS”] = [“project_dir”= >“/ var /任务”,);require_once目录名(__DIR__).“/供应商/ autoload_runtime.php”/ /……

您还可以配置extra.runtime.optionscomposer.json

1 2 3 4 5 6 7 8 9 10
“需要”: {“…”“…”},“额外的”: {“运行时”: {“project_dir”“/ var /任务”}}}

方法支持以下选项ob娱乐下载SymfonyRuntime

env(默认值:APP_ENV环境变量,或“开发”
定义应用程序运行的环境的名称。
disable_dotenv(默认值:
禁用查找.env文件。
dotenv_path(默认值:.env
定义。env文件的路径。
use_putenv
告诉Dotenv设置环境变量使用putenv ()(不推荐)。
prod_envs(默认值:["刺激"]
定义生产环境的名称。
test_envs(默认值:(“测试”)
定义测试环境的名称。

除此之外,GenericRuntime而且ob娱乐下载SymfonyRuntime还支持以下选项:

调试(默认值:APP_DEBUG环境变量,或真正的
切换显示错误。
运行时
将“应用程序类型”映射到GenericRuntime一个知道如何处理每一个的实现。
error_handler(默认值:BasicErrorHandlerob娱乐下载SymfonyErrorHandlerob娱乐下载SymfonyRuntime
定义用于处理PHP错误的类。

创建自己的运行时

这是一个高级主题,描述Runtime组件的内部结构。

使用Runtime组件将使维护者受益,因为引导逻辑可以作为普通包的一部分进行版本控制。如果应用程序作者决定使用此组件,则Runtime类的包维护者将拥有更多控制权,可以修复错误并添加特性。

请注意

在Symfonob娱乐下载y 5.3之前,Symfony引导逻辑是Flex配方的一部分。由于用户很少更新食谱,因此很少会安装错误补丁。

Runtime组件被设计为完全通用的,能够在全局状态之外运行任何应用程序,分为6步:

  1. 主入口点返回可调用的(“应用程序”)包装应用程序;
  2. 应用程序可调用的传递给RuntimeInterface: getResolver (),该函数返回ResolverInterface.这个解析器返回一个数组,在索引0处有应用程序可调用对象(或者修饰这个可调用对象的东西),在索引1处有它的所有已解析参数。
  3. 应用程序可调用的时,它将返回一个表示应用程序的对象。
  4. 应用程序对象传递给RuntimeInterface: getRunner (),该函数返回RunnerInterface:知道如何“运行”应用程序对象的实例。
  5. RunnerInterface:运行应用程序对象($)调用,它返回退出状态代码为' int '。
  6. PHP引擎使用此状态代码终止。

在创建一个新的运行时时,有两件事需要考虑:首先,最终用户将使用什么参数?其次,用户的应用程序将是什么样子?

例如,假设您想创建一个运行时ReactPHP

最终用户将使用什么参数?

对于一般的ReactPHP应用程序,通常不需要特殊的参数。这意味着您可以使用GenericRuntime

用户的应用程序看起来会是什么样子?

也没有典型的React应用程序,因此您可能需要依赖PSR-15接口用于HTTP请求处理。

但是,ReactPHP应用程序将需要一些特殊的逻辑来实现运行.该逻辑被添加到一个新的类实现中RunnerInterface

12 34 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40
使用PsrHttp消息ServerRequestInterface使用PsrHttp服务器RequestHandlerInterface使用反应EventLoop工厂作为ReactFactory使用反应Http服务器作为ReactHttpServer使用反应套接字服务器作为ReactSocketServer使用ob娱乐下载组件运行时RunnerInterfaceReactPHPRunner实现了RunnerInterface私人应用程序私人港口公共函数__construct(RequestHandlerInterface应用程序, int港口->应用=应用程序->端口=港口;}公共函数运行()int应用程序->应用程序;循环= ReactFactory::create ();//配置ReactPHP以正确处理PSR-15应用程序服务器ReactHttpServer (循环函数(ServerRequestInterface请求使用应用程序返回应用程序->处理(请求);});启动ReactPHP服务器套接字ReactSocketServer (->港口,循环);服务器->听(套接字);循环->run ();返回0;}}

通过扩展GenericRuntime,你要确保应用程序总是在使用这个ReactPHPRunner

12 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24
使用ob娱乐下载组件运行时GenericRuntime使用ob娱乐下载组件运行时RunnerInterfaceReactPHPRuntime扩展GenericRuntime私人港口公共函数__construct(数组选项->端口=选项“端口”) ? ?8080::__construct (选项);}公共函数getRunner(?对象应用程序RunnerInterface如果应用程序运算符RequestHandlerInterface) {返回ReactPHPRunner (应用程序->港口);}//如果不是PSR-15应用程序,使用GenericRuntime来//运行应用程序(参见上面的“可解析应用程序”)返回::getRunner (应用程序);}}

最终用户现在可以创建前端控制器,比如:

1 2 3 4 5 6 7
<?phprequire_once目录名(__DIR__).“/供应商/ autoload_runtime.php”返回函数(数组上下文返回SomeCustomPsr15Application ();};
此工作,包括代码示例,是根据创作共用BY-SA 3.0许可证。
ob娱乐下载Symfony 5.3支持通过JoliCode