2012-01-31 55 views
10

我是symfony2的新手。我開始使用一些教程,然後開始構建SYMBLOG。我已經瞭解它,我可以添加或更改功能。我在工作流中有點混亂,我的意思是這些文件如何一起工作來渲染頁面或產生輸出。任何人都可以從symfony2開始詳細解釋這個流程是如何發生的。從用戶請求開始,用戶輸入一個url直到symfony2顯示結果。請在流程中包含routing.yml。 ?Symfony2的工作流程?

回答

21

你應該看看這個鏈接。 Symfony - the big picture

它詳細解釋了從瀏覽器輸入URL到獲得渲染頁面所涉及的所有步驟。

基本上所有的請求都轉到前端控制器。它的工作是將請求路由到適當的控制器代碼。它在app/config/routing.yml文件中定義的路線的幫助下完成此操作。在src/<BundleName>/Controller/<name>中定義的控制器執行一些業務邏輯,例如從模型(存儲庫)獲取數據並將該信息發送到視圖(模板)。這些視圖只是HTML代碼。 Symfony使用稱爲Twig的模板引擎。 Symfony不是將HTML代碼中的<?php ... ?>塊包括在內,而是將來自控制器的數據傳遞給Twig {% %}{{ }}塊中的視圖內部。

簡單地說,這裏是工作流程:

  1. 瀏覽器發送請求在前端控制器web/app_dev.php或web/app.php
  2. 前端控制器接收
  3. 請求檢查在app/config/routing.yml定義的路由和將該請求發送到在src/<BundleName>/Controller/<controller_name>中定義的適當的 控制器
  4. 控制器準備HT中所需的內容ML(實施例 - 從src/<BundleName>/Repository查詢數據庫)和信息發送到視圖 - src/Resources/views/<twig file name>
  5. 視圖創建HTML並將其發送回控制器
  6. 控制器創建一個HTTP響應,並將其發送回瀏覽器

有東西,如應用程序/ AppKernel這間進來,但我跳過它。

這裏是鏈接有用的摘錄上面提供:

網址:

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:歡迎:索引。此字符串是控制器邏輯名稱,和它從Acme公司\ DemoBundle \控制器\ WelcomeController類引用的indexAction方法:

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

檢視:

控制器呈現的src/ACME/DemoBundle /資源/視圖/演示/ hello.html.twig模板

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

{% block title "Hello " ~ name %} 

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

您可能還想看看Symfony2 architecture