首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >使用Symfony2的工作流?

使用Symfony2的工作流?
EN

Stack Overflow用户
提问于 2012-01-31 05:09:08
回答 1查看 3.9K关注 0票数 9

我是symfony2的新手。我从一些教程开始,然后开始构建SYMBLOG。我已经理解它,我能够添加或更改功能。我的工作流程有点混乱,我指的是文件如何协同工作来呈现一个页面或产生一个输出。有人能从一开始就详细解释一下这个流程是如何在symfony2中进行的吗?从用户请求开始,假设用户输入一个url,直到symfony2显示结果。请将routing.yml包含在流中。?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-01-31 05:47:29

你应该看看这个链接。塞弗尼-大戏

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

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

简单地说,下面是工作流:

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

有些东西,如应用程序/AppKernel之间,但我已经跳过了。

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

网址:

代码语言:javascript
运行
复制
http://localhost/Symfony/web/app_dev.php/demo/hello/Fabien

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

路由:

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

代码语言:javascript
运行
复制
_welcome:
pattern:  /
defaults: { _controller: AcmeDemoBundle:Welcome:index }

控制器:

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

代码语言:javascript
运行
复制
class WelcomeController extends Controller
{
    public function indexAction()
    {
        return $this->render('AcmeDemoBundle:Welcome:index.html.twig');
    }
}

视图:

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

代码语言:javascript
运行
复制
{% extends "AcmeDemoBundle::layout.html.twig" %}

{% block title "Hello " ~ name %}

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

您还可能希望查看Symfony2 建筑

票数 21
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9074714

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档