// 簡單模式: 依預設路由組裝 /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"
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, '/');
}
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()urlencodeUrl 助手封裝了從簡單慣例路由到複雜 Router 組裝的完整功能,自動處理 Base URL、模組預設值、參數編碼,是 Controller 與視圖中產生連結的標準工具。