Php Symfony在生产中禁用控制器操作
当prod环境处于活动状态时,是否可以“禁用”特定操作 我有一些不应该在生产环境中执行的测试操作Php Symfony在生产中禁用控制器操作,php,symfony,routing,Php,Symfony,Routing,当prod环境处于活动状态时,是否可以“禁用”特定操作 我有一些不应该在生产环境中执行的测试操作 class TestController extends FOSRestController { /** * @Rest\Get("/api/test", name="api_test") */ public function testAction(Request $request) { // something retur
class TestController extends FOSRestController
{
/**
* @Rest\Get("/api/test", name="api_test")
*/
public function testAction(Request $request)
{
// something
return;
}
}
你可以利用Qandidate实验室的第三方toggle。 切换可以基于parameters.yml文件中的条目设置,或者我怀疑您可以基于env进行设置 然后,在方法的顶部,您只需使用如下类似的注释:
/**
* @Toggle("another-cool-feature")
*/
public function barAction()
{
}
选项1:检查控制器中的环境
选项2:仅在开发环境中包括路由
对于此选项,让我重新表述您的问题:如何在开发环境中启用控制器?(而不是在生产中禁用)
看看“一个功能齐全的Symfony应用程序,可以用作新应用程序的框架”。它具有一个开发环境,其中包括WebProfilerBundle路由(也称为Web调试工具栏)
在您的dev
环境中,正在加载。您可以定义扩展主路由器的路由文件:
config_dev.yml
路由_dev.yml
我不知道注释的方法,我一直更喜欢使用配置文件-如果使用这些文件,您可以在
routing\u dev.yml
中添加开发路由,或者检查环境:@JimL-ho我可以这样做吗?我正在使用路由注释。嗯,我特别说过我不知道如何使用它annotations@JimL是的,我知道,对不起,我的意思是“没有注释,你怎么能这样做?”。谢谢。您好,如果我的AppBundle中有我的TestController呢?我需要移动它吗?谢谢。我不知道你的TestController有多“复杂”,但也许你想创建一个TestBundle,它只添加到开发/测试环境中的AppKernel中(请参见AppKernel::registerBundles
)。如果你包含一个类似我的示例的目录,我会看看你是否可以“排除”一个特定的控制器。
public function testAction(Request $request)
{
$env = $this->container->get( 'kernel' )->getEnvironment()
if ($env !== 'dev') {
throw $this->createAccessDeniedException();
}
//your action
}
framework:
router:
resource: '%kernel.project_dir%/app/config/routing_dev.yml'
strict_requirements: true
profiler: { only_exceptions: false }
test:
resource: '@TestBundle/Controller/'
type: annotation
_main:
resource: routing.yml