【发布时间】:2014-04-26 09:35:18
【问题描述】:
我已经考虑这个问题很久了。创建面包屑的最佳或最优雅的方法是什么?
一种方法是从控制器调用方法。像这样的:
function showUsers()
{
$this->breadcrumbs->add('Users', URL::route('admin.users'));
// ...
}
不过,我个人不喜欢这种方式,因为我想将面包屑逻辑与控制器分开。另外,如果我想例如在控制器内的许多页面都有一个管理面板项,我需要在构造函数或每个控制器方法中定义它。
另一种方法是利用命名路由,将它们分成段。这显然需要以某种方式合理地命名和构造路线。这是一些伪代码:
if($segment[0] == 'admin') {
$breadcrumbs->add('Admin Panel', URL::route('admin');
if($segment[1] == 'users') {
$breadcrumbs->add('Users', URL::route('admin.users');
} elseif($segment[1] == 'foo') {
$breadcrumbs->add(...);
}
}
这种方法的一个问题是很难获得有关当前路线的“数据”。例如,我可以有一个显示单个用户的路由(admin.users.single),它在路由中获取一个用户 ID(例如admin/users/{id})。我无法为面包屑项目构建正确的 URL,因为路由数据仅在控制器内部使用。
你能想到其他方法吗?对这些例子有何看法?
【问题讨论】:
标签: breadcrumbs