什么是"控制器"和"行动"在Symfony文档中?

时间:2017-09-14 11:35:41

标签: php symfony

我刚刚发现有关控制器的the official Symfony best practices,其中写有:

  

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

我对其含义有疑问,因为它可以通过两种不同的方式来理解。

  1. "控制器"指定控制器类(ex class MyController{})& "动作"指定控制器功能(ex public function indexAction(){})=> 对我来说毫无意义

  2. "控制器"指定控制器功能(ex public function indexAction(){})& "动作"指定这些函数中的指令(ex if(){//do something})=> 对我来说很有意义

  3. 在案例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)"可以用"指令代替"或者"指令",例如?

1 个答案:

答案 0 :(得分:3)

Controller是一个在其中有动作的类。动作是为特定视图运行的方法。

你提出的意思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)
    }
}