Symfony系列-创建你的第一个页面
2016-08-15 12:56
363 查看
创建一个新页面, 不管是html页面还是json数据 - 都需要做这简单的两步:
创建一个路由: 一个路由就是一个指向你的页面和你的控制器的URL (比如. /about) .
创建一个控制器: 一个控制器就是个你写的创建页面的PHP函数. 你接收来自客户端的请求信息, 然后根据请求来创建一个Symfony的response对象, 这个对象可以用来容纳html内容, 一个json字符, 甚至可以是一个二进制文件, 比如说一张图片或一个pdf文件.
比如说你想创建一个页面 -
测试一下, 访问:
http://localhost:8000/app_dev.php/lucky/number
如果在页面中显示了一个随机数字, 恭喜你! 让我们来回顾一下, 我们是通过哪两步来新建一个页面的?
创建一个路由:
创建一个控制器: 路由下面的方法
首先, 保证
然后, 使用
最后, 模板文件应当放在
包括了一些配置文件和模板文件. 一般来说, 这里放一些不是php代码的东西.
你的php代码放在这儿.
99%的时候, 你都会在
放一些应用的测试文件, 比如说单元测试.
这个文件夹主要放一些自动生成的文件, 比如说缓存文件和日志文件.
第三方的库全在这儿了! 通过composer包管理器下载的包都在这儿
这是你的项目的根目录, 放一些公共访问的文件
在
例如,
最后, 你将来可能会下载和安装更多的第三方包到你的应用中, 以此来获取更多的工具. 想象一下, 有一个帮你分页的包, 而它是已经存在的,开箱即用.
你可以通过
创建一个路由: 一个路由就是一个指向你的页面和你的控制器的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文件来控制你的包的行为. 我们会在另外一个章节中探讨更多的细节.
相关文章推荐
- 一个关于if else容易迷惑的问题
- PHP5.2.*防止Hash冲突拒绝服务攻击的Patch
- 深入理解PHP之匿名函数
- JSP/PHP基于Ajax的分页功能实现
- 关于PHP通过PDO用中文条件查询MySQL的问题。
- 什么是设计模式
- PHP数据库长连接mysql_pconnect的细节
- Symfony事件类型
- Php Installing An Expansion
- rem : web app适配的秘密武器
- jquery高级应用之Deferred对象
- 关于浮动与清除浮动,你应该知道的
- 数组reduce方法的高级技巧
- php7 读取php.ini[4]
- PHP+Apache在Windows 9x下的安装和配置
- IIS 6 的 PHP 最佳配置方法
- 安装Apache和PHP的一些补充
- Linux Apache+MySQL+PHP