03.04 控制器

    控制器的作用在于,接受来自路由的调度,进行相应的工作(获取请求的参数,进行数据库的查询或操作,对返回的数据加以进一步的处理,显示一个模板并对模板中的变量加以赋值)。

    从之前我们讨论的路由中,我们看到这样一个路由:

    • 所有的控制器都位于AppBundle\Controller目录下。
    • 定义控制器类的文件命名规范是:Name+Controller.php。而这里的name和该路由定义的AppBundleindex的第二部分(也就是Default)一样。所以,针对homepage这个路由,我们必然要有一个DefaultController.php的文件与之对应。
    • 这个文件必须定义一个_Name_Controller的类,且这个类必须派生于Controller类。
    • 鉴于路由定义的第三部分index,它规定了具体采用什么动作。与之对应的是这个类中的成员函数。这个成员函数必须是public,而且命名为。也就是说,它的名称是路由定义中的第三部分action加上Action这个后缀。
    • 函数参数的定义必须和路由中的要求一致。参数出现的顺序并不是特别重要,但是名字必须和路由中指定的参数名称有对应。我们会在以后再更详细地讨论路由参数和控制器参数的问题。
    • 控制器类必须有自己的namespace声明。通常它就是该文件所在目录,因此它应该总是namespace AppBundle\Controller;
      一个典型的控制器类的代码可能是这样的:
    1. namespace AppBundle\Controller;
    2. use Symfony\Bundle\FrameworkBundle\Controller\Controller;
    3. use Symfony\Component\HttpFoundation\Request;
    4. {
    5. public function indexAction()
    6. {
    7. // Code for index action.
    8. }
    9. // More codes and more actions

    上述代码中出现的一些语句,我们在此不多做解释。只说明一点:它们是根据控制器中代码的需要所引入的命名空间。