企业🤖AI智能体构建引擎,智能编排和调试,一键部署,支持私有化部署方案 广告
# 生成 URL 和 路径(Generating URLs and Paths) [Phalcon\\Mvc\\Url](http://docs.iphalcon.cn/api/Phalcon_Mvc_Url.html)is the component responsible of generate URLs in a Phalcon application. It’s capable of produce independent URLs based on routes. [Phalcon\\Mvc\\Url](http://docs.iphalcon.cn/api/Phalcon_Mvc_Url.html)组件负责在Phalcon应用内生成URL。它依赖路由生成独立的URL。 ## 设置站点基地址(Setting a base URI) Depending of which directory of your document root your application is installed, it may have a base URI or not. For example, if your document root is /var/www/htdocs and your application is installed in /var/www/htdocs/invo then your baseUri will be /invo/. If you are using a VirtualHost or your application is installed on the document root, then your baseUri is /. Execute the following code to know the base URI detected by Phalcon: ~~~ <?php use Phalcon\Mvc\Url; $url = new Url(); echo $url->getBaseUri(); ~~~ By default, Phalcon automatically may detect your baseUri, but if you want to increase the performance of your application is recommended setting up it manually: ~~~ <?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/"); ~~~ Usually, this component must be registered in the Dependency Injector container, so you can set up it there: ~~~ <?php use Phalcon\Mvc\Url; $di->set( "url", function () { $url = new Url(); $url->setBaseUri("/invo/"); return $url; } ); ~~~ ## 生成 URI(Generating URIs) If you are using the[Router](http://docs.iphalcon.cn/reference/routing.html)with its default behavior. Your application is able to match routes based on the following pattern: /:controller/:action/:params. Accordingly it is easy to create routes that satisfy that pattern (or any other pattern defined in the router) passing a string to the method “get”: ~~~ <?php echo $url->get("products/save"); ?> ~~~ Note that isn’t necessary to prepend the base URI. If you have named routes you can easily change it creating it dynamically. For Example if you have the following route: ~~~ <?php $router->add( "/blog/{year}/{month}/{title}", [ "controller" => "posts", "action" => "show", ] )->setName("show-post"); ~~~ A URL can be generated in the following way: ~~~ <?php // This produces: /blog/2015/01/some-blog-post $url->get( [ "for" => "show-post", "year" => "2015", "month" => "01", "title" => "some-blog-post", ] ); ~~~ ## 没有伪静态状态下的生成 URL(Producing URLs without mod\_rewrite) You can use this component also to create URLs without mod\_rewrite: ~~~ <?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"); ~~~ You can also use`$_SERVER["REQUEST_URI"]`: ~~~ <?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/"); ~~~ In this case, it’s necessary to manually handle the required URI in the Router: ~~~ <?php use Phalcon\Mvc\Router; $router = new Router(); // ... Define routes $uri = str_replace($_SERVER["SCRIPT_NAME"], "", $_SERVER["REQUEST_URI"]); $router->handle($uri); ~~~ The produced routes would look like: ~~~ <?php // This produce: /invo/index.php/products/save echo $url->get("products/save"); ~~~ ## Volt 中生成 URL(Volt Producing URLs from Volt) The function “url” is available in volt to generate URLs using this component: ~~~ <a href="{{ url("posts/edit/1002") }}">Edit</a> ~~~ Generate static routes: ~~~ <link rel="stylesheet" href="{{ static_url("css/style.css") }}" type="text/css" /> ~~~ ## 静态 URI 与 动态 URI(Static vs. Dynamic URIs) This component allow you to set up a different base URI for static resources in the application: ~~~ <?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](http://docs.iphalcon.cn/reference/tags.html)will request both dynamical and static URIs using this component. ## 自定义 URL 生成器(Implementing your own URL Generator) The[Phalcon\\Mvc\\UrlInterface](http://docs.iphalcon.cn/api/Phalcon_Mvc_UrlInterface.html)interface must be implemented to create your own URL generator replacing the one provided by Phalcon.