多应用+插件架构,代码干净,二开方便,首家独创一键云编译技术,文档视频完善,免费商用码云13.8K 广告
# 生成 URL 和 路径(Generating URLs and Paths) # 生成 URL 和 路径(Generating URLs and Paths) [*Phalcon\\Mvc\\Url*](#) is the component responsible of generate URLs in a Phalcon application. It'scapable of produce independent URLs based on routes. [*Phalcon\\Mvc\\Url*](#) 组件负责在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 yourbaseUri 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: ``` <pre class="calibre14">``` <?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 applicationis recommended setting up it manually: ``` <pre class="calibre14">``` <?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: ``` <pre class="calibre14">``` <?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*](#) with its default behavior. Your application is able to match routes based on thefollowing pattern: /:controller/:action/:params. Accordingly it is easy to create routes that satisfy that pattern (or any otherpattern defined in the router) passing a string to the method “get”: ``` <pre class="calibre14">``` <?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: ``` <pre class="calibre14">``` <?php $route->add( "/blog/{year}/{month}/{title}", array( 'controller' => 'posts', 'action' => 'show' ) )->setName('show-post'); ``` ``` A URL can be generated in the following way: ``` <pre class="calibre14">``` <?php // This produces: /blog/2015/01/some-blog-post $url->get( array( '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: ``` <pre class="calibre14">``` <?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”\]: ``` <pre class="calibre14">``` <?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: ``` <pre class="calibre14">``` <?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: ``` <pre class="calibre14">``` <?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: ``` <pre class="calibre14">``` <a href="{{ url("posts/edit/1002") }}">Edit</a> ``` ``` Generate static routes: ``` <pre class="calibre14">``` <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: ``` <pre class="calibre14">``` <?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*](#) will request both dynamical and static URIs using this component. ### 自定义 URL 生成器(Implementing your own URL Generator) The [*Phalcon\\Mvc\\UrlInterface*](#) interface must be implemented to create your own URLgenerator replacing the one provided by Phalcon. | - [索引](# "总目录") - [下一页](# "闪存消息(Flashing Messages)") | - [上一页](# "Cookie 管理(Cookies Management)") |