生成URL和路径
最后更新于:2022-04-02 05:15:24
[TOC]
# 生成URL和路径
`Phalcon\Mvc\Url` 是负责在Phalcon应用程序中生成URL的组件。它能够根据路由生成独立的URL。
## 设置基本URI
根据您的应用程序安装的文档根目录,它可能具有基本URI。
例如,如果您的文档根目录是`/var/www/htdocs` ,并且您的应用程序安装在`/var/www/htdocs/invo`中,那么您的baseUri将是`/invo/`。如果您使用的是VirtualHost,或者您的应用程序安装在文档根目录上,那么您的baseUri是`/`。执行以下代码以了解Phalcon检测到的基URI:
```php
getBaseUri();
```
默认情况下,Phalcon会自动检测您的baseUri,但如果您想提高应用程序的性能,建议您手动设置它:
```php
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
set(
'url',
function () {
$url = new Url();
$url->setBaseUri('/invo/');
return $url;
}
);
```
## 生成URI
如果您使用路由器的默认行为,您的应用程序可以根据以下模式匹配路由:
>[info] /:controller/:action/:params
因此,很容易创建满足该模式(或路由器中定义的任何其他模式)的路由,将字符串传递给方法`get`:
```php
get('products/save'); ?>
```
请注意,不必预先添加基URI。如果您已命名路由,则可以轻松地更改它以动态创建它。例如,如果您有以下路由:
```php
add(
'/blog/{year}/{month}/{title}',
[
'controller' => 'posts',
'action' => 'show',
]
)
->setName('show-post');
```
可以通过以下方式生成URL:
```php
get(
[
'for' => 'show-post',
'year' => '2015',
'month' => '01',
'title' => 'some-blog-post',
]
);
```
## 生成没有mod_rewrite的URL
您也可以使用此组件创建没有mod_rewrite的URL:
```php
setBaseUri('/invo/index.php?_url=/');
// This produce: /invo/index.php?_url=/products/save
echo $url->get('products/save');
```
你也可以使用 `$_SERVER['REQUEST_URI']`:
```php
setBaseUri('/invo/index.php?_url=/');
// Pass the URI using $_SERVER['REQUEST_URI']
$url->setBaseUri('/invo/index.php/');
```
在这种情况下,需要在路由器中手动处理所需的URI:
```php
handle($uri);
```
生成的路由看起来像:
```php
get('products/save');
```
## 在Volt生成URL
volt中的`url`函数使用此组件生成URL:
```twig
Edit
```
生成静态路由:
```twig
```
## 静态与动态URI
此组件允许您为应用程序中的静态资源设置不同的基URI:
```php
setBaseUri('/');
// Static resources go through a CDN
$url->setStaticBaseUri('http://static.mywebsite.com/');
```
`Phalcon\Tag` 将使用此组件请求动态和静态URI。
## 实现自己的URL生成器
必须实现`Phalcon\Mvc\UrlInterface`接口才能创建自己的URL生成器,替换Phalcon提供的URL生成器。
';