ThinkChat2.0新版上线,更智能更精彩,支持会话、画图、阅读、搜索等,送10W Token,即刻开启你的AI之旅 广告
# 在Symfony中创建第一个页面 创建页面,无论是HTML还是JSON,都仅仅只有两步: 创建路由:路由就是指向控制器和页面的URL(比如,`/about`) 创建一个控制器:控制器就是您创建页面的PHP函数。您搜集请求信息,并产生Symfony `Response`对象,它可以处理HTML内容,JSON字符串,甚至是二进制文件,譬如一个图片文件或者PDF文件。 # 创建页面:路由和控制器 在继续之前,请确保您已经阅读了[安装](243916)章节,并且可以在浏览器中访问您的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>' ); } } ~~~ 在解释代码之前,请测试它。如果您使用PHP内置Web服务器,请访问以下URL: http://localhost:8000/app_dev.php/lucky/number 如果您使用的是内置的PHP Web服务器,那么URL中的app_dev.php可以省略。 如果您在浏览器中看到一个幸运数字,恭喜您。但高兴之余,请想想它是如何运行的?还记得创建页面的两个步骤吗? 1. 创建路由:`numberAction`方法上的`@Route`就是路由,它定义了这个页面的URL模式。您将在[路由](244172)了解到更多关于路由的知识,包括如何创建可变URL。 2. 创建控制器:路由下边的方法-`numberAction()`就是控制器。它是您创建页面,最终返回一个`Response`对象的地方。您将在[控制器](244173)章节中学到更多关于控制器的细节,包括如何返回JSON数据。 # Web Debug工具 如果您的页面工作良好,那么您会在浏览器底部看到一个工具条。他被称为Web Debug工具条:您的调试好帮手。您将会学到更多有关它的知识,但现在请移动鼠标,点击不同图标来获取关于路由、性能、日志等等调试信息。 # 渲染模板(使用服务容器) 如果控制器返回的是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()方法来渲染一个模板,给它我们生成的幸运数字变量,这样我们就可以渲染页面了。 ~~~ // 编辑的文件是 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`目录中。在`app/Resources/views/lucky`目录下创建一个名为`number.html.twig`的新文件。 ~~~ {# app/Resources/views/lucky/number.html.twig #} <h1>Your lucky number is {{ number }}</h1> ~~~ 在`Twig`中,`{{ number }}` 语法是用来输出变量的。刷新浏览器来获取您新的幸运数字。 http://localhost:8000/lucky/number 在[创建和使用模板](244174)章节中,您将学到关于Twig的一切:如何循环,渲染其他模板,掌握它强大的布局集成系统。 # 项目结构一览 重大新闻!您已经在项目两个最重要的目录下工作了: `app/` 包含了譬如配置和模板这类东西。基本上凡是不是PHP代码的东西都在这儿。 `src/` 您PHP代码所在地。 99%的时间里,您将会工作在`src/`(PHP文件)或者是`app/`(其他文件)。随着阅读的深入,您将学到它们都能做什么。 那么,项目其他目录是做什么? `bin/` 著名的bin/console文件就在这里(其他相对不太重要的执行文件)。 `tests/` 应用自动测试目录(比如单元测试)。 `var/` 用来存储自动创建的文件。比如缓存文件(`/var/cache/`),日志文件(`var/logs/`)和session文件(`/var/sessions/`)。 `vendor/` 第三方类库放在这里!他们是通过Composer包管理器下载到这里的。 `web/` 这是项目的文档根目录:请将公众文件放在这里(比如:CSS,JS和图片) # Bundles和配置 您的Symfony应用包含了一组预安装的Bundles,像`FrameworkBundle`和`TwigBundle`。Bundles和插件的理念很类似,但有个很重要的不同:所有Symfony应用的功能都来自Bundles。 Bundles是通过app/AppKernel.php(app/目录下少有的PHP文件)注册的。每个Bundles都为您提供了大量的*工具*,有时被称为*服务*。 ~~~ class AppKernel extends Kernel { public function registerBundles() { $bundles = array( new Symfony\Bundle\FrameworkBundle\FrameworkBundle(), new Symfony\Bundle\TwigBundle\TwigBundle(), // ... ); // ... return $bundles; } // ... } ~~~ 例如,`TwigBundle`就是负责为您的应用添加Twig工具的。 事实上,您可以下载和添加更多第三方Bundles到您的应用来获取更多的工具。假设您需要分页列表功能,Symfony中有很多这样的三方Bundles。 您可以通过`app/config/config.yml`文件来控制自己的Bundles行为。其他的细节,比如环境和参数将会在[配置](244175)章节中讨论。