[TOC]
# 生成URL和路徑
`Phalcon\Mvc\Url` 是負責在Phalcon應用程序中生成URL的組件。它能夠根據路由生成獨立的URL。
## 設置基本URI
根據您的應用程序安裝的文檔根目錄,它可能具有基本URI。
例如,如果您的文檔根目錄是`/var/www/htdocs` ,并且您的應用程序安裝在`/var/www/htdocs/invo`中,那么您的baseUri將是`/invo/`。如果您使用的是VirtualHost,或者您的應用程序安裝在文檔根目錄上,那么您的baseUri是`/`。執行以下代碼以了解Phalcon檢測到的基URI:
```php
<?php
use Phalcon\Mvc\Url;
$url = new Url();
echo $url->getBaseUri();
```
默認情況下,Phalcon會自動檢測您的baseUri,但如果您想提高應用程序的性能,建議您手動設置它:
```php
<?php
use Phalcon\Mvc\Url;
$url = new Url();
// Setting a relative base URI
$url->setBaseUri('/invo/');
// Setting a full domain as base URI
$url->setBaseUri('//my.domain.com/');
// Setting a full domain as base URI
$url->setBaseUri('http://my.domain.com/my-app/');
```
通常,此組件必須在Dependency Injector容器中注冊,因此您可以在那里進行設置:
```php
<?php
use Phalcon\Mvc\Url;
$di->set(
'url',
function () {
$url = new Url();
$url->setBaseUri('/invo/');
return $url;
}
);
```
## 生成URI
如果您使用路由器的默認行為,您的應用程序可以根據以下模式匹配路由:
>[info] /:controller/:action/:params
因此,很容易創建滿足該模式(或路由器中定義的任何其他模式)的路由,將字符串傳遞給方法`get`:
```php
<?php echo $url->get('products/save'); ?>
```
請注意,不必預先添加基URI。如果您已命名路由,則可以輕松地更改它以動態創建它。例如,如果您有以下路由:
```php
<?php
$router
->add(
'/blog/{year}/{month}/{title}',
[
'controller' => 'posts',
'action' => 'show',
]
)
->setName('show-post');
```
可以通過以下方式生成URL:
```php
<?php
// This produces: /blog/2015/01/some-blog-post
$url->get(
[
'for' => 'show-post',
'year' => '2015',
'month' => '01',
'title' => 'some-blog-post',
]
);
```
## 生成沒有mod_rewrite的URL
您也可以使用此組件創建沒有mod_rewrite的URL:
```php
<?php
use Phalcon\Mvc\Url;
$url = new Url();
// Pass the URI in $_GET['_url']
$url->setBaseUri('/invo/index.php?_url=/');
// This produce: /invo/index.php?_url=/products/save
echo $url->get('products/save');
```
你也可以使用 `$_SERVER['REQUEST_URI']`:
```php
<?php
use Phalcon\Mvc\Url;
$url = new Url();
// Pass the URI in $_GET['_url']
$url->setBaseUri('/invo/index.php?_url=/');
// Pass the URI using $_SERVER['REQUEST_URI']
$url->setBaseUri('/invo/index.php/');
```
在這種情況下,需要在路由器中手動處理所需的URI:
```php
<?php
use Phalcon\Mvc\Router;
$router = new Router();
// ... Define routes
$uri = str_replace($_SERVER['SCRIPT_NAME'], '', $_SERVER['REQUEST_URI']);
$router->handle($uri);
```
生成的路由看起來像:
```php
<?php
// This produce: /invo/index.php/products/save
echo $url->get('products/save');
```
## 在Volt生成URL
volt中的`url`函數使用此組件生成URL:
```twig
<a href='{{ url('posts/edit/1002') }}'>Edit</a>
```
生成靜態路由:
```twig
<link rel='stylesheet' href='{{ static_url('css/style.css') }}' type='text/css' />
```
## 靜態與動態URI
此組件允許您為應用程序中的靜態資源設置不同的基URI:
```php
<?php
use Phalcon\Mvc\Url;
$url = new Url();
// Dynamic URIs are
$url->setBaseUri('/');
// Static resources go through a CDN
$url->setStaticBaseUri('http://static.mywebsite.com/');
```
`Phalcon\Tag` 將使用此組件請求動態和靜態URI。
## 實現自己的URL生成器
必須實現`Phalcon\Mvc\UrlInterface`接口才能創建自己的URL生成器,替換Phalcon提供的URL生成器。
- 常規
- Welcome
- 貢獻
- 生成回溯
- 測試重現
- 單元測試
- 入門
- 安裝
- Web服務器設置
- WAMP
- XAMPP
- 教程
- 基礎教程
- 教程:創建一個簡單的REST API
- 教程:V?kuró
- 提升性能
- 教程:INVO
- 開發環境
- Phalcon Compose (Docker)
- Nanobox
- Phalcon Box (Vagrant)
- 開發工具
- Phalcon開發者工具的安裝
- Phalcon開發者工具的使用
- 調試應用程序
- 核心
- MVC應用
- 微應用
- 創建命令行(CLI)應用程序
- 依賴注入與服務定位
- MVC架構
- 服務
- 使用緩存提高性能
- 讀取配置
- 上下文轉義
- 類加載器
- 使用命名空間
- 日志
- 隊列
- 數據庫
- 數據庫抽象層
- Phalcon查詢語言(PHQL)
- ODM(對象文檔映射器)
- 使用模型
- 模型行為
- ORM緩存
- 模型事件
- 模型元數據
- 模型關系
- 模型事務
- 驗證模型
- 數據庫遷移
- 分頁
- 前端
- Assets管理
- 閃存消息
- 表單
- 圖像
- 視圖助手(標簽)
- 使用視圖
- Volt:模板引擎
- 業務邏輯
- 訪問控制列表(ACL)
- 注解解析器
- 控制器
- 調度控制器
- 事件管理器
- 過濾與清理
- 路由
- 在session中存儲數據
- 生成URL和路徑
- 驗證
- HTTP
- Cookies管理
- 請求環境
- 返回響應
- 安全
- 加密/解密
- 安全
- 國際化
- 國際化
- 多語言支持