Jea*_*ean 35 php containers dependency-injection controller symfony
当使用带有Symfony2.x应用程序的开发模式时,通常可以在语言环境中使用.因此,此类函数无法按预期工作(例如,尝试在localhost下获取当前IP).这可能是一个问题,例如当人们尝试使用这种基于ip的Web服务时.因此,我只想知道如果Symfony2应用程序在dev模式下运行,如何检查控制器内部.以这种方式,可以根据模式设置控制器的行为.
任何的想法?
tol*_*gap 53
要获得当前环境,Controller您可以使用:
$this->container->getParameter('kernel.environment');
Run Code Online (Sandbox Code Playgroud)
所以你只需将它放在一个if()声明中,检查它是否等于dev.
Dam*_*nic 25
从Symfony 2.5开始,可以这样做:
$this->container->get('kernel')->getEnvironment();
Run Code Online (Sandbox Code Playgroud)
直接询问内核的环境看起来比搜索参数更好.
Vev*_*eve 14
由于您想知道自己是否处于开发模式(不需要名为"dev"的环境),您可以从服务容器中检索内核并检查isDebug方法返回:
$kernel = $this->get('kernel');
$devMode = $kernel->isDebug();
Run Code Online (Sandbox Code Playgroud)
如文档中所述(重点是我的),
重要但与环境主题无关的是
true或false参数作为AppKernel构造函数的第二个参数.这指定应用程序是否应以"调试模式"运行.无论环境如何,都可以在调试模式设置为true或false的情况下运行Symfony应用程序.这会影响应用程序中的许多内容,例如在错误页面上显示堆栈跟踪,或者是否在每个请求上动态重建缓存文件.虽然不是必需的,但对于开发和测试环境,调试模式通常设置为true,对于prod环境,调试模式通常设置为false.在内部,调试模式的值变为服务容器内使用的kernel.debug参数.
这是使用Constructor Injection的2017和Symfony 3.3+版本.
您可以只传递所需的参数,而不是传递整个应用程序(=容器):
# app/config/services.yml
services:
_defaults:
autowire: true
App\Controller\SomeController:
arguments: ['%kernel.environment%']
Run Code Online (Sandbox Code Playgroud)
如果您不理解这种语法,请查看此帖子,在前/后示例中解释Symfony DI新闻.
namespace App\Controller;
final class SomeController
{
/**
* @var string
*/
private $environment;
public function __construct(string $environment)
{
$this->environment = $environment;
}
public function someAction()
{
$this->environment...
// any operations you need
}
}
Run Code Online (Sandbox Code Playgroud)
代码中最重要的是一致性.
如果您更喜欢静态和服务定位器(=服务,您可以通过任何地方获得任何其他服务),请使用它.
如果您更喜欢构造函数注入,树依赖关系图(!=循环依赖关系),请使用它.
如果您知道为什么以这种方式使用它们,那么混合这个概念对您来说可能没问题.但是这里出现了破窗理论(由Coding Horror描述的版本).任何访问代码的人都更有可能选择不打算使用这种方式的版本.
我已经指导过许多应用程序的团队,这些应用程序$this->container从代码中简单开始,经过几年的最终呼唤我的帮助,如何重写或重构整个静态地狱.
Symfony 5.1
$this->devEnvironment = 'dev' === getenv('APP_ENV');
我在 Symfony 服务中使用它。您需要将该行添加APP_ENV=dev到 .env.local 和APP_ENV=prod.env 文件。取决于你是否有与我类似的环境设置
| 归档时间: |
|
| 查看次数: |
25104 次 |
| 最近记录: |