[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管理
- 请求环境
- 返回响应
- 安全
- 加密/解密
- 安全
- 国际化
- 国际化
- 多语言支持