symfony系列-控制器

一个控制器就是一个你自定义的PHP函数, 它用来从Symfony的Request对象中读取信息, 返回一个创建的Response对象. 可以响应html内容, json, xml, 一个下载文件, 一个302重定向, 一个404错误, 任何你可以想到的东西都行. 控制器可以执行任意的, 你的应用需要渲染的内容逻辑.

我们来看看Symfony控制器有多简单. 以下这段程序就是在页面上显示一个随机数字:

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

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

class LuckyController
{
    /**
     * @Route("/lucky/number")
     */
    public function numberAction()
    {
        $number = mt_rand(0, 100);

        return new Response(
            '<html><body>Lucky number: '.$number.'</body></html>'
        );
    }
}

但是在真实的应用场景中, 控制器可能会做一系列的动作来创建一个response对象. 这些动作可能是从request对象中读点数据, 从数据库中读点数据, 发送个邮件, 或者在session中存点东西. 但是在所有的场景中, 控制器最终都会返回一个response对象, 然后把它发送给客户端.

一个简单的控制器

当然了, 控制器可以是任何PHP中的callable, (一个函数, 一个对象的方法, 或者一个闭包), 一个控制器通常来说是一个类中的方法.

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

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

class LuckyController
{
    /**
     * @Route("/lucky/number/{max}")
     */
    public function numberAction($max)
    {
        $number = mt_rand(0, $max);

        return new Response(
            '<html><body>Lucky number: '.$number.'</body></html>'
        );
    }
}

这个时候,控制器就是numberAction()方法了, 它被放在LuckyController控制器中.

这个控制器的作用一目了然:

  • 第二行: Symfony 利用了PHP中命名空间的优势, 去给控制器类命名
  • 第四行: Symfony又利用了PHP命令空间的优势, 使用use关键词来导入Response
  • 第七行: 随便你怎么命名, 但是必须以Controller结尾. (这虽然不是必要的, 但一些快捷方式依赖这个)
  • 第十二行: 所有控制器类中的action方法都必须以Action为后缀 (也不是必须的, 但一些快捷方式依赖这个).
  • 第十六行: 控制器类创建及返回一个Response对象.

映射URL到控制器

为了看到控制器的结果, 需要增加一条路由, 把URL映射到控制器. 这是由上面的注释 @Route("/lucky/number/{max}")完成的.

访问以下URL来访问页面:

http://localhost:8000/lucky/number/100

基本控制器类和服务

为了方便, Symfony自带一个可选的基类 Controller. 如果你继承它, 这不会改变任何你的控制器, 而且你可以使用一些帮助函数服务容器, 服务容器就是一个像数组的对象, 可以让你在系统中使用一些非常有用的对象. 这些非常有用的对象叫做服务. Symfony通过这些服务对象来渲染Twig模板, 还有一些来记录日志.

在文件上面使用use来导入Controller, 然后继承它.

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

use Symfony\Bundle\FrameworkBundle\Controller\Controller;

class LuckyController extends Controller
{
    // ...
}
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值