UrlHelper 帮助你从其他辅助函数中生成 URL。它还提供了一个单一的地方来自定义 URL 的生成方式,方法是使用应用程序辅助函数覆盖核心辅助函数。有关如何执行此操作,请参见 别名辅助函数 部分。
返回指向控制器和操作组合的 URL。如果 $url
为空,则返回 REQUEST_URI
,否则它将生成控制器和操作组合的 URL。如果 fullBase
为 true
,则完整的基本 URL 将被添加到结果中。
echo $this->Url->build([
'controller' => 'Posts',
'action' => 'view',
'bar',
]);
// Output
/posts/view/bar
以下是一些其他使用示例
具有扩展名的 URL
echo $this->Url->build([
'controller' => 'Posts',
'action' => 'list',
'_ext' => 'rss',
]);
// Output
/posts/list.rss
具有前缀的 URL
echo $this->Url->build([
'controller' => 'Posts',
'action' => 'list',
'prefix' => 'Admin',
]);
// Output
/admin/posts/list
以 ‘/’ 开头的 URL(包含完整的基本 URL)
echo $this->Url->build('/posts', ['fullBase' => true]);
// Output
http://somedomain.com/posts
具有 GET 参数和片段锚点的 URL
echo $this->Url->build([
'controller' => 'Posts',
'action' => 'search',
'?' => ['foo' => 'bar'],
'#' => 'first',
]);
// Output
/posts/search?foo=bar#first
上面的示例使用 ?
特殊键来指定查询字符串参数,并使用 #
键来指定 URL 片段。
命名路由的 URL
// Assuming a route is setup as a named route:
// $router->connect(
// '/products/{slug}',
// [
// 'controller' => 'Products',
// 'action' => 'view',
// ],
// [
// '_name' => 'product-page',
// ]
// );
echo $this->Url->build(['_name' => 'product-page', 'slug' => 'i-m-slug']);
// Will result in:
/products/i-m-slug
第二个参数允许你定义选项,用于控制 HTML 转义,以及是否应该添加基本路径。
$this->Url->build('/posts', [
'escape' => false,
'fullBase' => true,
]);
如果你想使用路由路径字符串,可以使用此方法。
echo $this->Url->buildFromPath('Articles::index');
// outputs: /articles
echo $this->Url->buildFromPath('MyBackend.Admin/Articles::view', [3]);
// outputs: /admin/my-backend/articles/view/3
具有资产时间戳的 URL,由 <link rel="preload"/>
包裹,这里预加载了一个字体。注意:该文件必须存在,并且 Configure::read('Asset.timestamp')
必须返回 true
或 'force'
,以便添加时间戳。
echo $this->Html->meta([
'rel' => 'preload',
'href' => $this->Url->assetUrl(
'/assets/fonts/your-font-pack/your-font-name.woff2'
),
'as' => 'font',
]);
如果你正在为 CSS、Javascript 或图像文件生成 URL,则可以使用每种资产类型的辅助方法。
// Outputs /img/icon.png
$this->Url->image('icon.png');
// Outputs /js/app.js
$this->Url->script('app.js');
// Outputs /css/app.css
$this->Url->css('app.css');
// Force timestamps for one method call.
$this->Url->css('app.css', ['timestamp' => 'force']);
// Or disable timestamps for one method call.
$this->Url->css('app.css', ['timestamp' => false]);
如果你需要自定义资产 URL 的生成方式,或者想要使用自定义资产缓存清除参数,可以使用 assetUrlClassName
选项。
// In view initialize
$this->loadHelper('Url', ['assetUrlClassName' => AppAsset::class]);
当你使用 assetUrlClassName
时,你必须实现与 Cake\Routing\Asset
相同的方法。
有关更多信息,请查看 API 中的 Router::url。