您的位置:首页 > 编程语言 > PHP开发

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

2016-08-15 12:56 363 查看
创建一个新页面, 不管是html页面还是json数据 - 都需要做这简单的两步:

创建一个路由: 一个路由就是一个指向你的页面和你的控制器的URL (比如. /about) .

创建一个控制器: 一个控制器就是个你写的创建页面的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

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

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

创建一个控制器: 路由下面的方法
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应用已经预安装了一些包的集合, 例如
FrameworkBundle
TwigBundle
. 包和插件的概念有点像, 但有一点非常重要的区别: 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
文件来控制你的包的行为. 我们会在另外一个章节中探讨更多的细节.
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  symfony php