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

Zend Framework Url 助手 URL 組裝與產生完整教學

     編輯:PHP 相關知識

Url 助手三大核心方法

// 簡單模式: 依預設路由組裝 /module/controller/action/param/value
public function simple($action, $controller = null, $module = null, array $params = null)

// 進階模式: 透過 Router 組裝,支援具名路由、重設參數、編碼控制
public function url($urlOptions = array(), $name = null, $reset = false, $encode = true)

// 代理方法: 直接呼叫 $this->_helper->url() 等同 simple()
public function direct($action, $controller = null, $module = null, array $params = null)

實戰範例與輸出結果

$url = $this->_helper->getHelper('Url');
$action = 'actionname';
$controller = 'controllername';
$module = 'modulename';
$params = array('param1' => '中文參數');

var_dump($url->simple($action, $controller, $module, $params));
var_dump($url->url(array(
    'action' => $action,
    'controller' => $controller,
    'module' => $module,
    'params' => $params
)));
var_dump($url->direct($action, $controller, $module, $params));

輸出結果 (已自動 URL 編碼):

string(101) "/helper_demo1/public/modulename/controllername/actionname/param1/%E4%B8%AD%E6%96%87%E5%8F%82%E6%95%B0"
string(101) "/helper_demo1/public/modulename/controllername/actionname/params/%E4%B8%AD%E6%96%87%E5%8F%82%E6%95%B0"
string(101) "/helper_demo1/public/modulename/controllername/actionname/param1/%E4%B8%AD%E6%96%87%E5%8F%82%E6%95%B0"

原始碼核心邏輯解析

simple():預設路由組裝

public function simple($action, $controller = null, $module = null, array $params = null) {
    $request = $this->getRequest();
    $controller = $controller ?: $request->getControllerName();
    $module = $module ?: $request->getModuleName();

    $url = $controller . '/' . $action;
    if ($module != $this->getFrontController()->getDispatcher()->getDefaultModule()) {
        $url = $module . '/' . $url;
    }
    if ('' !== ($baseUrl = $this->getFrontController()->getBaseUrl())) {
        $url = $baseUrl . '/' . $url;
    }
    if (null !== $params) {
        $paramPairs = array();
        foreach ($params as $key => $value) {
            $paramPairs[] = urlencode($key) . '/' . urlencode($value);
        }
        $url .= '/' . implode('/', $paramPairs);
    }
    return '/' . ltrim($url, '/');
}

url():委派 Router 組裝

public function url($urlOptions = array(), $name = null, $reset = false, $encode = true) {
    $router = $this->getFrontController()->getRouter();
    return $router->assemble($urlOptions, $name, $reset, $encode);
}

使用建議

  • 簡單參數導向:使用 simple() 或 direct()
  • 複雜路由、具名路由、需控制參數重設/編碼:使用 url()
  • 參數值含中文或特殊字元會自動 urlencode
  • Base URL 會自動加入 (若 FrontController 有設定)

總結

Url 助手封裝了從簡單慣例路由到複雜 Router 組裝的完整功能,自動處理 Base URL、模組預設值、參數編碼,是 Controller 與視圖中產生連結的標準工具。

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