Symfony禁用生产中的控制器操作

时间:2017-11-22 16:00:01

标签: php symfony routing

是否可以"禁用" prod环境处于活动状态时的具体操作?

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

class TestController extends FOSRestController
{
    /**
     * @Rest\Get("/api/test", name="api_test")
     */
    public function testAction(Request $request)
    {
        // something
        return;
    }
}

2 个答案:

答案 0 :(得分:0)

您可以使用Qandidate-labs称为切换的第三方。 https://github.com/qandidate-labs/qandidate-toggle-bundle

切换可以根据parameters.yml文件中的条目进行设置或者我怀疑你可以根据env进行设置

然后在方法的顶部,您只需使用类似于下面的注释:

/**
 * @Toggle("another-cool-feature")
 */
public function barAction()
{
}

答案 1 :(得分:0)

选项1:检查控制器中的环境

public function testAction(Request $request)
{
    $env = $this->container->get( 'kernel' )->getEnvironment()

    if ($env !== 'dev') {
        throw $this->createAccessDeniedException();
    }

    //your action
} 

选项2:仅包括开发环境中的路径

对于此选项,让我重新提一下您的问题:如何在开发环境中启用控制器? (而不是在生产中禁用)

查看Symfony Standard Edition,"一个功能齐全的Symfony应用程序,您可以将其用作新应用程序的框架。"。它具有一个开发环境,其中包含WebProfilerBundle(a.k.a. Web调试工具栏)的路由。

dev环境中,正在加载config_dev.yml。您可以定义扩展主路由器的路由文件:

  

config_dev.yml

framework:
    router:
        resource: '%kernel.project_dir%/app/config/routing_dev.yml'
        strict_requirements: true
    profiler: { only_exceptions: false }
  

routing_dev.yml

test:
    resource: '@TestBundle/Controller/'
    type: annotation

_main:
    resource: routing.yml