【问题标题】:What are "controllers" and "actions" in the Symfony docs?Symfony 文档中的“控制器”和“动作”是什么?
【发布时间】:2017-09-14 11:35:40
【问题描述】:

我刚刚发现了the official Symfony best practices 关于控制器,它的写法是:

根据经验,您应该遵循 5-10-20 规则,其中控制器应仅定义 5 个或更少的变量,包含 10 个或更少的操作,并且每个操作包含 20 行或更少的代码。

我有一个关于它的含义的问题,因为它可以用两种不同的方式来理解。

  1. “controllers”指定控制器类(例如class MyController{})和“actions”指定控制器功能(例如public function indexAction(){})=> 对我来说没有意义

  2. “controllers”指定控制器功能(例如public function indexAction(){})和“actions”指定这些功能中的指令(例如if(){//do something})=> 这对我来说很有意义

在情况 1 中,这意味着类似:

// Approximate maximum number of lines : 200    
class MyController {

    // Max 20 lines of code
    public function firstAction(){}

    [...]

    // Max 20 lines of code
    public function tenthAction(){}
}

此外,在这种情况下,我无法理解“5 个变量或更少”的含义。 5个全局变量?所有 10 个动作的 5 个局部变量?

在情况 2 中,这意味着类似:

// No maximum number of lines
class MyController {

    // Max 10 actions * 20 lines by actions = 200 lines of code, and 5 local variables
    public function firstAction(){}

    [...]

    // Max 10 actions * 20 lines by actions = 200 lines of code, and 5 local variables
    public function fiftiethAction(){}

}

我的问题的目标是绝对确定理解好的意思。但我也认为让 Symfony 团队在不留下任何歧义的情况下重写这句话会很有用?我特别想到像我这样的非英语开发人员,或者 Symfony 初学者。

考虑到案例 2 是好的,例如,“action(s)”一词可以替换为“instruction(s)”或“directive(s)”?

【问题讨论】:

    标签: php symfony


    【解决方案1】:

    控制器是一个包含动作的类。操作是针对特定视图运行的方法。

    你建议的意思1是正确的。

    他们建议您使控制器尽可能简单。包含大量代码行的操作方法不如只执行一项小任务的操作方法干净。

    class SomeController
    {
         private $variablesLikeThis;
         private $keepToAroundFive;
    
         public function someAction()
        {
            // no more than ten of these action methods
            // don't make the code in here too long (20 lines or so)
        }
    }
    

    【讨论】:

    • 我完全同意你的观点,控制器必须尽可能简单,我讨厌里面有很多行。但是,我不确定您的答案,因为例如在Symfony controller doc 中他们说:控制器是您创建的 PHP 函数,它从 Symfony 的 Request 对象中读取信息并创建并返回一个 Response 对象 还有一个代码示例:控制器是 numberAction() 方法,它位于控制器类 LuckyController 中。
    • 我和一位经过认证的 SF 开发人员交谈过,他的回答和你一样:在 Symfony 术语中,控制器是一个类,一个动作是一个方法。所以我猜你对第一个陈述是正确的。但我坚持说,正如我在之前的评论中解释的那样,文档中并不清楚(他们对类和方法都使用了 Controller 这个词),并且因为一般来说(在 Symfony 上下文之外)控制器角色是指导应用程序不同部分之间的数据,在我们的例子中,从请求到响应。嗯,谢谢你的回答!
    猜你喜欢
    • 1970-01-01
    • 2018-11-13
    • 2018-02-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多