首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 網頁程式設計 >> PHP 程式設計 >> PHP 相關知識

Symfony2 Controller 核心機制詳解:Request/Response/Session 實戰

     編輯:PHP 相關知識

核心概念:HTTP 請求-響應循環

一次 HTTP 請求在 Symfony2 中的流轉:

  • 輸入:Request 對象封裝 Header、GET、POST 數據等
  • 處理:Controller 邏輯處理
  • 輸出:Response 對象封裝頁面、JSON、重定向等

Request 對象常用操作

$request = $this->getRequest(); // 獲取 Request 對象

// 獲取參數
$request->query->get('param');     // GET 參數
$request->request->get('param');   // POST 參數
$request->attributes->get('id');   // 路由參數
$request->headers->get('User-Agent'); // Header
$request->files->get('avatar');    // 上傳檔案
$request->cookies->get('session_id'); // Cookie
$request->getMethod();             // HTTP 方法
$request->getRequestFormat();      // 請求格式

推薦工具:HTTPie

現代化命令列 HTTP 客戶端,極適合 API 測試:

# 安裝參考:https://blog.csdn.net/pzw_0612/article/details/46521965
# 模擬表單 POST 提交
http -f post https://localhost:8000/app_dev.php/page/test name=lily

Response 對象:三種常見返回類型

<?php
namespace Scource\WebBundle\Controller;

use Symfony\Bundle\FrameworkBundle\Controller\Controller;
use Sensio\Bundle\FrameworkExtraBundle\Configuration\Route;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\HttpFoundation\JsonResponse;
use Symfony\Component\HttpFoundation\RedirectResponse;

class DefaultController extends Controller {
    /**
     * @Route("/page/test1")
     */
    public function test1Action() {
        // 1. 純文字/HTML 直接輸出
        return new Response('11111111111');
        
        // 2. JSON 返回(API 常用)
        // return new JsonResponse(array('a' => 'abcdef'));
        
        // 3. 重定向
        // return new RedirectResponse('https://www.cnblogs.com/tianxintian22/');
    }
}

關鍵區別

Response 類型Content-Type適用場景
Responsetext/html頁面渲染、純文字
JsonResponseapplication/jsonREST API、AJAX 回應
RedirectResponsetext/html + Location頁面跳轉、POST-Redirect-GET

Session 管理

基礎操作

$session = $this->getRequest()->getSession();

// 寫入
$session->set('b', 'ni hao!');

// 讀取
$value = $session->get('b');

// 判斷存在
$session->has('b');

// 移除
$session->remove('b');

// 清空
$session->clear();

權限問題排查

若 Session 讀寫異常,檢查 app/cache/dev 目錄權限:

chmod -R 777 app/cache/dev
# 或確保 Web Server 用戶有讀寫權限

Flash Message:一次性提示訊息

適用於表單提交後的成功/錯誤提示:

Controller 端設置

$this->getRequest()->getSession()->getFlashBag()->add('notice', 'you have something wrong');

Twig 模板顯示

{% for flashMessage in app.session.flashbag.get('notice') %}
    <div class="flash-notice">
        {{ flashMessage }}
    </div>
{% endfor %}

Flash Message 讀取一次即自動銷毀,完美適配「提交→重定向→顯示提示」模式。

最佳實踐建議

  • 優先使用 JsonResponse 規範 API 返回格式
  • 表單處理遵循 PRG 模式,配合 Flash Message
  • 依賴注入獲取 RequestStack 替代 getRequest()(Symfony 2.4+ 推薦)
  • 使用 @Route 註解簡化路由配置
  • 善用 ParamConverter 自動轉換路由參數為實體對象

Symfony2 的 Request/Response/Session 設計極具現代 Web 框架風範,掌握其核心用法能顯著提升開發效率與代碼質量。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved