如何创建Symfony应用与ob娱乐下载多个内核
编辑该页面警告:你浏览的文档欧宝官网下载appob娱乐下载Symfony 3.3,不再维护。
读这个页面的更新版本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娱乐下载程:
- 创建一个新的前端控制器来加载新的内核;
- 创建新内核类;
- 定义配置由新内核加载。
下面的例子显示了如何创建一个新的内核API的一个给定的Symfony应用程序。ob娱乐下载
步骤1)创建一个新的前端控制器
而不是从头开始创建新的前端控制器,它更容易复制现有的。例如,创建web / api_dev.php
从web / app_dev.php
和web / api.php
从web / app.php
。
然后,更新新的前端控制器的代码实例化类而不是通常的新内核AppKernel
类:
1 2 3 4 5 6 7 8 9
/ /网络/ api.php/ /……美元内核=新ApiKernel (“刺激”,假);/ /……/ /网络/ api_dev.php/ /……美元内核=新ApiKernel (“开发”,真正的);/ /……
提示
另一种方法是保持现有的前端控制器(如。app.php
和app_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美元加载程序){美元加载程序- >负载(美元这- >getProjectDir ()。' / app / 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}#覆盖选项值……
用不同的内核执行命令
的bin /控制台
脚本用于运行Symfony命令总是使用ob娱乐下载默认AppKernel
类来构建应用程序和负载的命令。如果你需要使用新的内核执行控制台命令,复制bin /控制台
(如脚本和重命名它。bin / api
)。
然后,取代AppKernel
通过自己的内核实例化(如实例化。ApiKernel
),现在你可以使用新的内核(如执行命令。php bin / api的缓存:清楚
)现在可以使用执行命令使用新的内核。
请注意
每个控制台脚本(如可用的命令。bin /控制台
和bin / api
)可以是不同的,因为他们依赖于包每个内核启用,这可能是不同的。
渲染模板中定义一个不同的内核
如果你遵循Symfony最佳实践,内ob娱乐下载核将存储在默认的模板应用程序/资源/视图/
。试图使这些模板在不同的内核将导致没有注册路径名称空间“__main__”错误。
为了解决这个问题,您的内核添加以下配置:
1 2 3 4 5
# api / config / config.yml枝:道路:#允许使用app /资源/视图/ ApiKernel模板“% kernel.project_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