您可以通过多种方式在 URL 中实现片段 ID 。以下是一些选项,以及每个选项的优缺点。
直接添加
您可以在通话"#$fragment_id"
后简单地添加。url()
不优雅,但简单。如果您不经常使用页面锚点(即仅一页或两页),那么这是可行的方法。
编写自定义url()
助手
您可以编写自定义版本,url()
为片段 ID 附加可选的第 5 个参数:
class My_View_Helper_Url extends Zend_View_Helper_Url
{
public function url(array $urlOptions = array(), $name = null,
$reset = false, $encode = true,
$fragment_id = null)
{
$uri = parent::url($urlOptions, $name, $reset, $encode);
if(!is_null($fragment_id)) {
$uri .= "#$fragment_id";
}
return $uri;
}
}
这样,锚(和锚/片段ID)信息严格保持在视图的范围内。这对于一般用途很有用,但对于默认路由可能会有点笨拙。此外,对于某些用途,这仍然有点过于硬编码。
编写自定义Route
类(Extreme)
作为第三种选择,您可以编写Zend_Controller_Router_Route
类的自定义版本,特别是assemble($data, $reset, $encode)
方法(该match($path)
方法默认忽略片段 ID)。
使用此方法可能非常棘手,但非常有用,特别是如果使用仅限于特定路由(此方法可用于基于任何变量的片段 id)。
警告
使用片段 ID 时必须考虑某些注意事项。例如,查询字符串必须在 uri 中的片段 id 之前,否则 PHP 会忽略查询字符串。但是,大多数 ZF 应用程序倾向于避免使用查询字符串,因此这可能不是问题。