SearchTable Of ContentsPrevious topicNext topicThis 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. |