使用Symfony2的工作流程?

时间:2012-01-31 05:09:09

标签: symfony

我是symfony2的新手。我从一些教程开始,然后开始构建 SYMBLOG 。我理解它,我能够添加或更改功能。我在工作流程中有点混乱,我的意思是文件如何协同工作以呈现页面或生成输出。任何人都可以从一开始就详细解释我在symfony2中如何进行此流程。从用户请求开始说用户输入url直到symfony2显示结果。请在流程中包含routing.yml。 ?

1 个答案:

答案 0 :(得分:21)

您应该查看此链接。 Symfony - the big picture

详细说明了从浏览器中输入URL到呈现页面所涉及的所有步骤。

基本上所有请求都发送到前端控制器。它的工作是将请求路由到适当的控制器代码。它是在app/config/routing.yml文件中定义的路由的帮助下完成的。 src/<BundleName>/Controller/<name>中定义的控制器执行一些业务逻辑,例如从模型(存储库)获取数据并将该信息发送到视图(模板)。视图只是HTML代码。 Symfony使用名为Twig的模板引擎。 Symfony不是在HTML代码中包含<?php ... ?>块,而是从控制器传递数据,并且可以在Twig {% %}{{ }}块内的视图中轻松使用。

简单地说,这是工作流程:

  
      
  1. 浏览器发送请求
  2.   
  3. 在前端控制器web/app_dev.php或web / app.php
  4. 中收到请求   
  5. 前端控制器检查app/config/routing.yml中定义的路由,并将请求发送给相应的路由器   src/<BundleName>/Controller/<controller_name>
  6. 中定义的控制器   
  7. Controller准备HTML中所需的内容(示例 - 从src/<BundleName>/Repository查询数据库)并将信息发送到视图 - src/Resources/views/<twig file name>
  8.   
  9. 视图创建HTML并将其发送回控制器
  10.   
  11. 控制器创建HTTP响应并将其发送回浏览器
  12.   

有些东西比如app / AppKernel,但是我已经跳过了它。

以下是上面提供的链接的有用摘录:

<强> URL:

http://localhost/Symfony/web/app_dev.php/demo/hello/Fabien
  

这里发生了什么?让我们剖析网址:   app_dev.php:这是一个前端控制器。它是应用程序的唯一入口点,它响应所有用户请求;   / demo / hello / Fabien:这是用户想要访问的资源的虚拟路径。   您作为开发人员的责任是编写将用户请求(/ demo / hello / Fabien)映射到与其关联的资源(Hello Fabien!HTML页面)的代码。

<强>路由:

  

Symfony2通过尝试将请求的URL与某些已配置的模式匹配,将请求路由到处理它的代码。默认情况下,这些模式(称为路由)在app / config / routing.yml配置文件中定义。当您处于开发环境中时 - 由app_ dev .php前端控制器指示 - 还会加载app / config / routing_dev.yml配置文件。在标准版中,这些“演示”页面的路径放在该文件中:

_welcome:
pattern:  /
defaults: { _controller: AcmeDemoBundle:Welcome:index }

<强>控制器:

  

Symfony2根据路由配置中的_controller值选择控制器:AcmeDemoBundle:Welcome:index。此字符串是控制器逻辑名称,它引用Acme \ DemoBundle \ Controller \ WelcomeController类中的indexAction方法:

class WelcomeController extends Controller
{
    public function indexAction()
    {
        return $this->render('AcmeDemoBundle:Welcome:index.html.twig');
    }
}

查看:

  

控制器呈现src / Acme / DemoBundle / Resources / views / Demo / hello.html.twig模板

{% extends "AcmeDemoBundle::layout.html.twig" %}

{% block title "Hello " ~ name %}

{% block content %}
    <h1>Hello {{ name }}!</h1>
{% endblock %}

您可能还想查看Symfony2 architecture