Php Symfony在生产中禁用控制器操作

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

当prod环境处于活动状态时,是否可以“禁用”特定操作

我有一些不应该在生产环境中执行的测试操作

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