我已经考虑了很久了 . 创建面包屑的最佳或最优雅的方法是什么?
一种方法是从控制器调用方法 . 像这样的东西:
function showUsers()
{
$this->breadcrumbs->add('Users', URL::route('admin.users'));
// ...
}
我个人不喜欢这种方式,因为我想将面包屑逻辑与控制器分开 . 另外,如果我愿意,例如对于控制器内的许多页面都有一个Admin Panel -item,我需要在构造函数或每个控制器方法中定义它 .
另一种方法可以是利用命名路由,将它们分成段 . 这显然要求路线以某种方式明智地命名和构造 . 这是一些伪代码:
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(...);
}
}
这种方法的一个问题是,关于当前路线很难获得"data" . 例如,我可以有一个显示单个用户( admin.users.single
)的路由,它在路由中获取用户ID(例如 admin/users/{id}
) . 我没有本机方法为breadcrumb项构造正确的URL,因为路由数据仅在控制器内部使用 .
你能想到其他任何方式吗?关于这些例子的意见?
1 回答
使其更通用,而不是在控制器中具有关于用户和用户名等的条件语句 . 我认为最好先定义某种类别的层次结构或树 . 在您的后端存储该信息取决于您(即db,text file,nosql):
您可以分离遍历类别和构建面包屑字符串的逻辑 . 这更容易理解,测试等 .
即用c#
您可以根据该数据检索面包屑列表:
即
GetHierarchy("Users")
将返回列表"Admin Panel","Users"然后构建breadcrumb字符串:
您可以使用帮助程序将其嵌入到视图中,或者只是从控制器中设置它 .
GetLink
方法将返回包含类别路径的链接 . 即<a href="admin/users">Users</a>