03.04 控制器
控制器的作用在于,接受来自路由的调度,进行相应的工作(获取请求的参数,进行数据库的查询或操作,对返回的数据加以进一步的处理,显示一个模板并对模板中的变量加以赋值)。
从之前我们讨论的路由中,我们看到这样一个路由:
- 所有的控制器都位于
AppBundle\Controller
目录下。 - 定义控制器类的文件命名规范是:Name+Controller.php。而这里的
name
和该路由定义的AppBundleindex
的第二部分(也就是Default
)一样。所以,针对homepage
这个路由,我们必然要有一个DefaultController.php
的文件与之对应。 - 这个文件必须定义一个_Name_Controller的类,且这个类必须派生于
Controller
类。 - 鉴于路由定义的第三部分
index
,它规定了具体采用什么动作。与之对应的是这个类中的成员函数。这个成员函数必须是public
,而且命名为。也就是说,它的名称是路由定义中的第三部分action
加上Action
这个后缀。 - 函数参数的定义必须和路由中的要求一致。参数出现的顺序并不是特别重要,但是名字必须和路由中指定的参数名称有对应。我们会在以后再更详细地讨论路由参数和控制器参数的问题。
- 控制器类必须有自己的
namespace
声明。通常它就是该文件所在目录,因此它应该总是namespace AppBundle\Controller;
。
一个典型的控制器类的代码可能是这样的:
namespace AppBundle\Controller;
use Symfony\Bundle\FrameworkBundle\Controller\Controller;
use Symfony\Component\HttpFoundation\Request;
{
public function indexAction()
{
// Code for index action.
}
// More codes and more actions
上述代码中出现的一些语句,我们在此不多做解释。只说明一点:它们是根据控制器中代码的需要所引入的命名空间。