为什么我们在Symfony2控制器的方法中使用"Action"?

JPa*_*991 4 php symfony

我刚刚开始研究symfony2书.我想知道为什么我们命名控制器的功能Action:

public function [something]Action() { // ...
Run Code Online (Sandbox Code Playgroud)

在目前为止的书中的每个例子中,我在网上看到的所有代码Action都是函数名.它有什么理由吗?

这非常有效:

<?php

// src/AppBundle/Controller/LuckyController.php
namespace AppBundle\Controller;

use Symfony\Bundle\FrameworkBundle\Controller\Controller;
use Sensio\Bundle\FrameworkExtraBundle\Configuration\Route;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\HttpFoundation\JsonResponse;

class LuckyController extends Controller{

    /**
     * @Route("/lucky/number/{count}")
     */
    public function countTESTING($count){
        return new Response(
            '<html><body>I DONT HAVE TO CALL THIS somethingACTION</body></html>
        ');
    }

}
?>
Run Code Online (Sandbox Code Playgroud)

我试过googline这个,但我没有提到或推理为什么.有人可以解释为什么我们使用那个后缀?

Fed*_*kun 13

这只是一个惯例.您可以使用这些后缀,但也可以不使用它们.

如果你有

public function somethingAction()
Run Code Online (Sandbox Code Playgroud)

在控制器中,您可以通过以下方式在路由配置中引用它:

index:
    path:      /path_for_something
    defaults:  { _controller: AppBundle:Index:something }
Run Code Online (Sandbox Code Playgroud)

_controller参数使用称为逻辑控制器名称的简单字符串模式.所以,AppBundle:Index:something意思是:

  • 捆绑:AppBundle
  • Controller类:IndexController
  • 方法名称:somethingAction

但是,如果没有此功能,您也可以这样做.Symfony非常灵活,它不会强迫你做任何事情.这只是你必须做同样事情的众多方法之一.

如果你采用这个约定,你就更容易理解action你的控制器中有哪些,其他开发人员很容易理解你的代码,symfony2更容易在你的包中找到你的动作/控制器,这样你也可以重写控制器.这是最佳做法.

但如果您不想要这些好处,您也可以使用其完全限定的类名和方法:

index:
    path:      /something
    defaults:  { _controller: AppBundle\Controller\IndexController::indexAction }
Run Code Online (Sandbox Code Playgroud)

但是,正如文件所说:

如果您遵循一些简单的约定,逻辑名称更简洁,并允许更多的灵活性.