Symfony系列-创建你的第一个页面

创建一个新页面, 不管是html页面还是json数据 - 都需要做这简单的两步:

  1. 创建一个路由: 一个路由就是一个指向你的页面和你的控制器的URL (比如. /about) .
  2. 创建一个控制器: 一个控制器就是个你写的创建页面的PHP函数. 你接收来自客户端的请求信息, 然后根据请求来创建一个Symfony的response对象, 这个对象可以用来容纳html内容, 一个json字符, 甚至可以是一个二进制文件, 比如说一张图片或一个pdf文件.

创建页面: 路由和控制器

在我们继续之前, 先确保你已经安装了Symfony应用

比如说你想创建一个页面 - /lucky/number - 这个页面就是返回一个随机的数字然后显示出来. 为了实现这个功能, 创建一个”控制器类”并在该类中创建一个方法, 这个类会在人们访问 /lucky/number 时被运行.

// 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>'
        );
    }
}

测试一下, 访问:

http://localhost:8000/app_dev.php/lucky/number

如果在页面中显示了一个随机数字, 恭喜你! 让我们来回顾一下, 我们是通过哪两步来新建一个页面的?

  1. 创建一个路由: numberAction() 方法上的 @Route 就是我们创建的路由: 它定义了这个页面的url部分.

  2. 创建一个控制器: 路由下面的方法 numberAction() , 我们叫它控制器. 它是一个你创建页面和返回response对象的地方.

Web调试工具

就算你的页面工作正常, 你也应该看看你的页面最下面的导航条. 我们叫它Web调试工具: 它是你调试的蜜友. 随着时间的推移, 你会越来越了解它. 现在你可以随便点点, 把鼠标放到上面点击不同的图标获取一些关于路由, 性能, 日志信息.

渲染模板 (通过服务容器)

如果你在控制器中返回html, 你可能会想要渲染一个模板. 幸运的是, Symfony有Twig 这样容易, 强大, 灵活的模板引擎

首先, 保证LuckyController继承了Symfony的基本控制器类 Controller :

// src/AppBundle/Controller/LuckyController.php

// ...
// --> add this new use statement
use Symfony\Bundle\FrameworkBundle\Controller\Controller;

class LuckyController extends Controller
{
    // ...
}

然后, 使用render() 函数来渲染模板. 把 number 变量注入到模板当中:

// src/AppBundle/Controller/LuckyController.php

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

        return $this->render('lucky/number.html.twig', array(
            'number' => $number
        ));
    }
}

最后, 模板文件应当放在 app/Resources/views 目录中. 创建一个新的文件夹 lucky , 并在这个文件夹中新建一个文件 number.html.twig , 内容为:

{# app/Resources/views/lucky/number.html.twig #}

<h1>Your lucky number is {{ number }}</h1>

{{number}} 语法是用来在twig中输入变量的. 刷新你的浏览器, 工作正常.

查看你的项目结构

也许你并不知道, 你已经在两个非常重要的目录下工作过了.

app/
包括了一些配置文件和模板文件. 一般来说, 这里放一些不是php代码的东西.

src/
你的php代码放在这儿.
99%的时候, 你都会在 src/app/工作.

bin/
bin/console文件就放在这儿. 还有一些次要的可执行文件.

tests/
放一些应用的测试文件, 比如说单元测试.

var/
这个文件夹主要放一些自动生成的文件, 比如说缓存文件和日志文件.

vendor/
第三方的库全在这儿了! 通过composer包管理器下载的包都在这儿

web/
这是你的项目的根目录, 放一些公共访问的文件

包和配置

你的Symfony应用已经预安装了一些包的集合, 例如 FrameworkBundleTwigBundle. 包和插件的概念有点像, 但有一点非常重要的区别: Symfony应用所有的功能都是来源于包.

app/AppKernel.php中注册包, 每个包都提供很多工具, 有时候我们叫它服务.

class AppKernel extends Kernel
{
    public function registerBundles()
    {
        $bundles = array(
            new Symfony\Bundle\FrameworkBundle\FrameworkBundle(),
            new Symfony\Bundle\TwigBundle\TwigBundle(),
            // ...
        );
        // ...

        return $bundles;
    }

    // ...
}

例如, TwigBundle 是负责添加Twig工具到你的应用中.

最后, 你将来可能会下载和安装更多的第三方包到你的应用中, 以此来获取更多的工具. 想象一下, 有一个帮你分页的包, 而它是已经存在的,开箱即用.

你可以通过ap/config/config.yml文件来控制你的包的行为. 我们会在另外一个章节中探讨更多的细节.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值