Project Versions

Table Of Contents

Previous topic

Returning Responses

Next topic

发送消息(Flashing Messages)

This Page

Generating URLs and Paths

在Phalcon应用程序中,使用 Phalcon\Mvc\Url 组件生成URL。它能够生成基于路由的独立的URL。

Setting a base URI

根据你的应用程序安装到主机文档目录的位置,你的应用程序URI可能会出现一个基础的URI。

例如,如果你的主机文档目录是 /var/www/htdocs,而你的应用程序安装到 /var/www/htdocs/invo,那么基础URI即为 /invo/.如果你使用虚拟主机的形式安装此应用,那么baseUri即为 /. 执行以下代码,你可以检测你的应用程序的baseUri.

<?php

$url = new Phalcon\Mvc\Url();
echo $url->getBaseUri();

默认情况下,Phalcon 会自动检测应用程序的baseUri.但如果你想提高应用程序性能的话,最好还是手工设置:

<?php

$url = new Phalcon\Mvc\Url();

$url->setBaseUri('/invo/');

通常情况下,此组件必须被注册到服务容器中,因此你可以直接这样设置它:

<?php

$di->set('url', function(){
    $url = new Phalcon\Mvc\Url();
    $url->setBaseUri('/invo/');
    return $url;
});

Generating URIs

如果你使用的是 Router 的默认行为。你的应用程序会匹配路由模式 : /:controller/:action/:params. 因此,很容易通过”get”方法得到:

<?php echo $url->get("products/save") ?>

请注意,预先设置baseUri并不是必须的。如果你已经通过设置路由命名,你可以很容易改变它。例如,你有以下途径:

<?php

$route->add('/blog/{$year}/{month}/{title}', array(
    'controller' => 'posts',
    'action' => 'show'
))->setName('show-post');

生成URL还可以通过以下方式:

<?php

//This produces: /blog/2012/01/some-blog-post
$url->get(array(
    'for' => 'show-post',
    'year' => 2012,
    'month' => '01',
    'title' => 'some-blog-post'
));

Producing URLs without Mod-Rewrite

你还可以使用此组件在不使用重写规则的情况下创建URL:

<?php

$url = new Phalcon\Mvc\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

$url = new Phalcon\Mvc\Url();

//Pass the URI using $_SERVER["REQUEST_URI"]
$url->setBaseUri('/invo/index.php?_url=/');

//Pass the URI in $_GET["_url"]
$url->setBaseUri('/invo/index.php/');

在这种情况下,你必须手工处理路由中的URI:

<?php

$router = new Phalcon\Mvc\Router();

// ... define routes

$uri = str_replace($_SERVER["SCRIPT_NAME"], '', $_SERVER["REQUEST_URI"]);
$router->handle($uri);

产生的路由看起来像这样:

<?php

//This produce: /invo/index.php/products/save
echo $url->get("products/save");

Implementing your own Url Generator

The Phalcon\Mvc\UrlInterface interface must be implemented to create your own URL generator replacing the one providing by Phalcon.