【问题标题】:Symfony disable controller actions in production [duplicate]Symfony 在生产中禁用控制器操作 [重复]
【发布时间】:2017-11-22 16:00:00
【问题描述】:

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

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

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

【问题讨论】:

  • 我不知道注释的方式,我一直更喜欢使用配置文件 - 如果你使用那些你可以在routing_dev.yml中添加开发路由
  • @JimL ho 我能做到吗?我正在使用路由注释。
  • 嗯,我特意说我不知道​​用注解的方法
  • @JimL 是的,我知道,对不起,我的意思是“你怎么能在没有注释的情况下做到这一点?”。谢谢。

标签: php symfony routing


【解决方案1】:

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

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

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

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

【讨论】:

    【解决方案2】:

    选项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(又名 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
    

    【讨论】:

    • 您好,如果我的 AppBundle 中有 TestController 怎么办?我需要移动它吗?谢谢。
    • 我不知道您的 TestController 有多“复杂”,但也许您想创建一个仅在开发/测试环境中添加到 AppKernel 的 TestBundle(参见 AppKernel::registerBundles)。
    • 如果你像我的例子一样包含一个目录,我会看看你是否可以“排除”一个特定的控制器。
    猜你喜欢
    • 1970-01-01
    • 2020-02-16
    • 2019-04-22
    • 2019-07-26
    • 2018-07-14
    • 1970-01-01
    • 2019-01-04
    • 2014-07-19
    • 1970-01-01
    相关资源
    最近更新 更多