如何创建Symfony应用与ob娱乐下载多个内核

编辑该页面

警告:你浏览的文档欧宝官网下载appob娱乐下载Symfony 2.7,不再维护。

这个页面的更新版本Symfob娱乐下载ony 6.2(当前的稳定版本)。

如何创建Symfony应用与ob娱乐下载多个内核

在大多数Symfob娱乐下载ony应用程序中,处理传入的请求web / app.php前端控制器,它实例化app / AppKernel.php类来创建应用程序内核加载包和处理请求生成响应。

这一内核方法是一种方便的Symfony提供的默认标准版,但是Symfony应用程序可以定义任意数量的内核。ob娱乐下载而环境执行相同的应用程序使用不同的配置,内核可以执行同一应用程序的不同部分。

这些都是一些常见的用例创建多个内核:

  • 一个应用程序,该应用程序定义了一个API可以定义两个内核性能的原因。第一个内核将常规应用程序和第二个只会对API请求做出回应,加载少包,使功能;
  • 一个高度敏感的应用程序可以定义两个内核。第一个只会加载路径相匹配的部分应用程序公开暴露。第二个内核加载应用程序的其余部分和其由web服务器访问将保护;
  • 面向micro-services的应用程序可以定义多个内核启用/禁用服务选择性地将传统的应用程序分成几个micro-applications庞然大物。

向应用程序添加一个新的内核

创建一个新的内核在Symfony应用程序是一个三步的过ob娱乐下载程:

  1. 创建一个新的前端控制器来加载新的内核;
  2. 创建新内核类;
  3. 定义配置由新内核加载。

下面的例子显示了如何创建一个新的内核API的一个给定的Symfony应用程序。ob娱乐下载

步骤1)创建一个新的前端控制器

而不是从头开始创建新的前端控制器,它更容易复制现有的。例如,创建web / api_dev.phpweb / app_dev.phpweb / api.phpweb / app.php

然后,更新新的前端控制器的代码实例化类而不是通常的新内核AppKernel类:

1 2 3 4 5 6 7 8 9
/ /网络/ api.php/ /……美元内核=ApiKernel (“刺激”,);/ /……/ /网络/ api_dev.php/ /……美元内核=ApiKernel (“开发”,真正的);/ /……

提示

另一种方法是保持现有的前端控制器(如。app.phpapp_dev.php),但添加一个如果语句加载不同的内核基于URL(例如,如果开头的URL/ api,可以使用ApiKernel)。

步骤2)创建新内核类

现在你需要定义ApiKernel控制器类使用的新战线。最简单的方法是通过复制现有的app / AppKernel.php文件并进行所需的更改。

在这个例子中,ApiKernel将加载不如AppKernel包。也一定要改变位置的缓存,日志和配置文件,所以他们不与文件从碰撞AppKernel:

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21日22日23日24日25日26日
/ / app / ApiKernel.php使用ob娱乐下载\组件\HttpKernel\内核;使用ob娱乐下载\组件\配置\加载程序\LoaderInterface;ApiKernel扩展内核{公共函数registerBundles(){/ /加载只有API所需的包严格……}公共函数getCacheDir(){返回目录名(__DIR__)。' / var /缓存/ api / '美元- >getEnvironment ();}公共函数getLogDir(){返回目录名(__DIR__)。“/ var /日志/ api”;}公共函数registerContainerConfiguration(LoaderInterface美元加载程序){美元加载程序- >负载(美元- >getRootDir ()。' / config / api / config_ '美元- >getEnvironment ()。“.yml”);}}

为了使自动装卸机找到你的新ApiKernel,确保你将它添加到您的composer.json自动装载部分:

1 2 3 4 5 6 7 8
{“…”:“…”“自动”:{“psr-4”:{”“:“src /”},“classmap”:【“应用程序/ AppKernel.php”,“应用程序/ AppCache.php”,“应用程序/ ApiKernel.php”]}}

然后,运行作曲家安装将你的新自动装载配置。

步骤3)定义内核配置

最后,定义新的配置文件ApiKernel将负载。根据上面的代码,这个配置将住在应用程序/配置/ api /目录中。

可以从头开始创建新的配置加载几包时,因为这将是非常简单的。否则,复制现有的配置文件或更好,导入它们并覆盖所需的选项:

1 2 3 4 5
# app / config / api / config_dev.yml进口:- - - - - -{资源:. . / config_dev.yml}#覆盖选项值……

用不同的内核执行命令

app /控制台脚本用于运行Symfony命令总是使用ob娱乐下载默认AppKernel类来构建应用程序和负载的命令。如果你需要使用新的内核执行控制台命令,复制app /控制台(如脚本和重命名它。bin / api)。

然后,取代AppKernel通过自己的内核实例化(如实例化。ApiKernel),现在你可以使用新的内核(如执行命令。php bin / api的缓存:清楚)现在可以使用执行命令使用新的内核。

请注意

每个控制台脚本(如可用的命令。app /控制台bin / api)可以是不同的,因为他们依赖于包每个内核启用,这可能是不同的。

渲染模板中定义一个不同的内核

如果你遵循Symfony最佳实践,内ob娱乐下载核将存储在默认的模板应用程序/资源/视图/。试图使这些模板在不同的内核将导致没有注册路径名称空间“__main__”错误。

为了解决这个问题,您的内核添加以下配置:

1 2 3 4 5
# api / config / config.yml枝:道路:#允许使用app /资源/视图/ ApiKernel模板“% kernel.root_dir % / . . / app /资源/视图”:~

运行测试使用不同的内核

在Syob娱乐下载mfony应用程序中,功能测试的默认扩展WebTestCase类。内部类,一个方法调用getKernelClass ()试图找到内核使用的类测试期间运行应用程序。该方法的逻辑内核不支持多个应用程序,所以您的测试不会使用正确的内核。

解决方案是创建一个自定义基类功能测试扩展WebTestCase类和覆盖getKernelClass ()方法返回内核使用的完全限定类名:

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21日22日23日
使用ob娱乐下载\\FrameworkBundle\测试\WebTestCase;/ /测试需要ApiKernel工作,现在必须扩展这个/ / ApiTestCase类而不是默认的WebTestCase类ApiTestCase扩展WebTestCase{受保护的静态函数getKernelClass(){返回“ApiKernel”;}/ /这是必要的,因为KernelTestCase类的引用/ /之前创建的内核在其静态内核美元财产。因此,/ /如果你的功能测试不运行在分离过程中,稍后运行/ /测试不同的内核将重用以前创建的实例,/ /指向不同的内核受保护的函数拆卸(){::tearDown ();静态::$类=;}}

向应用程序添加更多的内核

如果您的应用程序是非常复杂和创建多个内核时,最好将它们存储在自己的目录,而不是干扰很多文件默认app /目录:

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
项目/├─app /│├─……配置/││├─└─AppKernel。php├─api /│├─……配置/││├─└─ApiKernel。php├─……└─web /├─……├─app.php├─app_dev。php├─api。php└─api_dev.php
这项工作,包括代码示例,许可下Creative Commons冲锋队3.0许可证。