Url

class Cake\View\Helper\UrlHelper(View $view, array $config = [])

UrlHelper 帮助你从其他辅助函数中生成 URL。它还提供了一个单一的地方来自定义 URL 的生成方式,方法是使用应用程序辅助函数覆盖核心辅助函数。有关如何执行此操作,请参见 别名辅助函数 部分。

生成 URL

Cake\View\Helper\UrlHelper::build($url = null, array $options = [])

返回指向控制器和操作组合的 URL。如果 $url 为空,则返回 REQUEST_URI,否则它将生成控制器和操作组合的 URL。如果 fullBasetrue,则完整的基本 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,
]);
Cake\View\Helper\UrlHelper::buildFromPath(string $path, array $params = [], array $options = [])

如果你想使用路由路径字符串,可以使用此方法。

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 生成

如果你需要自定义资产 URL 的生成方式,或者想要使用自定义资产缓存清除参数,可以使用 assetUrlClassName 选项。

// In view initialize
$this->loadHelper('Url', ['assetUrlClassName' => AppAsset::class]);

当你使用 assetUrlClassName 时,你必须实现与 Cake\Routing\Asset 相同的方法。

有关更多信息,请查看 API 中的 Router::url