UserFrosting:创建可以访问数据的各种仪表板小部件
UserFrosting: Creating various dashboard widgets that have access to data
[用户结霜:0.3.1]
您好,
我目前正在探索 UserFrosting 环境和架构。
我正在尝试在需要访问各种数据的主仪表板 (dashboard.twig) 上创建 'widgets'。
例如用于显示已登录用户的简单列表的小部件。
默认主仪表板似乎无法访问数据(当前用户除外),因为 Slim 配置 (index.php) 不使用任何控制器。这是正确的吗?
如果我想从多个控制器(例如用户、群组等)使用 functions/data,我该如何将这些数据传递到主仪表板?
谢谢
如果您指的是 this route for /dashboard
,那么您是对的 - 默认设置不使用外部控制器 class:
$app->get('/dashboard/?', function () use ($app) {
// Access-controlled page
if (!$app->user->checkAccess('uri_dashboard')){
$app->notFound();
}
$app->render('dashboard.twig', []);
});
你有几个选择。您可以向 existing controller class 添加新方法,甚至可以创建新控制器 class(请注意,添加新 class 后,您需要 运行 composer update
将其添加到自动加载器)。
或者,您可以直接将控制器逻辑添加到上面的路由闭包中。 Eloquent 模型 User
、Group
等可以在路由闭包中像在控制器中一样轻松访问 class.
最后(这是我推荐的用于生成用户列表的方法),您可以先使用一个请求生成仪表板页面,然后使用单独的请求获取实际数据,使用客户端构建列表-边码(Javascript)。这实际上是 /users
页面默认的工作方式。
您会注意到,如果您在打开浏览器控制台的情况下访问 /users
页面,它会向 /api/users
发出单独的请求。 returns 一个包含用户列表的 JSON 对象。例如:
{
"count": 5,
"rows": [
{
"id": 1,
"user_name": "admin",
"display_name": "Overlord",
"email": "mrdj@userfrosting.com",
"title": "The New Kid",
"locale": "en_US",
"primary_group_id": 2,
"flag_verified": 1,
"flag_enabled": 1,
"flag_password_reset": 0,
"created_at": "2015-10-21 00:00:00",
"updated_at": "2016-06-22 17:14:57",
"last_sign_in_time": "2016-07-19 19:23:49",
"sign_up_time": "2015-10-01 00:00:00"
},
{
"id": 22,
"user_name": "armin",
"display_name": "Armin van Buuren",
"email": "armin@userfrosting.com",
"title": "Cannon Fodder",
"locale": "nl_NL",
"primary_group_id": 0,
"flag_verified": 1,
"flag_enabled": 0,
"flag_password_reset": 1,
"created_at": "-0001-11-30 00:00:00",
"updated_at": "2015-12-07 12:37:14",
"last_sign_in_time": 0,
"sign_up_time": 0
},
{
"id": 20,
"user_name": "david",
"display_name": "David Guetta",
"email": "pierre@userfrosting.com",
"title": "Pyromancer",
"locale": "en_US",
"primary_group_id": 4,
"flag_verified": 1,
"flag_enabled": 1,
"flag_password_reset": 0,
"created_at": "-0001-11-30 00:00:00",
"updated_at": "-0001-11-30 00:00:00",
"last_sign_in_time": 0,
"sign_up_time": 0
},
{
"id": 13,
"user_name": "deadmau5",
"display_name": "Deadmau5",
"email": "deadmau5@userfrosting.com",
"title": "DJ Extraordinaire",
"locale": "en_US",
"primary_group_id": 3,
"flag_verified": 1,
"flag_enabled": 1,
"flag_password_reset": 0,
"created_at": "-0001-11-30 00:00:00",
"updated_at": "2016-03-29 14:37:24",
"last_sign_in_time": 0,
"sign_up_time": 0
},
{
"id": 23,
"user_name": "digweed",
"display_name": "John Digweed",
"email": "digweed@userfrosting.com",
"title": "DJ of the Future",
"locale": "en_US",
"primary_group_id": 3,
"flag_verified": 1,
"flag_enabled": 1,
"flag_password_reset": 0,
"created_at": "-0001-11-30 00:00:00",
"updated_at": "-0001-11-30 00:00:00",
"last_sign_in_time": 0,
"sign_up_time": 0
}
}
然后我们使用一些自定义代码 here and here to transform this data for use with tablesorter。这样做的好处是您可以在服务器端执行分页,而不是在一个请求中加载整个用户列表并强制用户等待整个 table 构建完成(这可能需要很长时间当你有很多用户时很长一段时间!)
[用户结霜:0.3.1]
您好,
我目前正在探索 UserFrosting 环境和架构。
我正在尝试在需要访问各种数据的主仪表板 (dashboard.twig) 上创建 'widgets'。
例如用于显示已登录用户的简单列表的小部件。
默认主仪表板似乎无法访问数据(当前用户除外),因为 Slim 配置 (index.php) 不使用任何控制器。这是正确的吗?
如果我想从多个控制器(例如用户、群组等)使用 functions/data,我该如何将这些数据传递到主仪表板?
谢谢
如果您指的是 this route for /dashboard
,那么您是对的 - 默认设置不使用外部控制器 class:
$app->get('/dashboard/?', function () use ($app) {
// Access-controlled page
if (!$app->user->checkAccess('uri_dashboard')){
$app->notFound();
}
$app->render('dashboard.twig', []);
});
你有几个选择。您可以向 existing controller class 添加新方法,甚至可以创建新控制器 class(请注意,添加新 class 后,您需要 运行 composer update
将其添加到自动加载器)。
或者,您可以直接将控制器逻辑添加到上面的路由闭包中。 Eloquent 模型 User
、Group
等可以在路由闭包中像在控制器中一样轻松访问 class.
最后(这是我推荐的用于生成用户列表的方法),您可以先使用一个请求生成仪表板页面,然后使用单独的请求获取实际数据,使用客户端构建列表-边码(Javascript)。这实际上是 /users
页面默认的工作方式。
您会注意到,如果您在打开浏览器控制台的情况下访问 /users
页面,它会向 /api/users
发出单独的请求。 returns 一个包含用户列表的 JSON 对象。例如:
{
"count": 5,
"rows": [
{
"id": 1,
"user_name": "admin",
"display_name": "Overlord",
"email": "mrdj@userfrosting.com",
"title": "The New Kid",
"locale": "en_US",
"primary_group_id": 2,
"flag_verified": 1,
"flag_enabled": 1,
"flag_password_reset": 0,
"created_at": "2015-10-21 00:00:00",
"updated_at": "2016-06-22 17:14:57",
"last_sign_in_time": "2016-07-19 19:23:49",
"sign_up_time": "2015-10-01 00:00:00"
},
{
"id": 22,
"user_name": "armin",
"display_name": "Armin van Buuren",
"email": "armin@userfrosting.com",
"title": "Cannon Fodder",
"locale": "nl_NL",
"primary_group_id": 0,
"flag_verified": 1,
"flag_enabled": 0,
"flag_password_reset": 1,
"created_at": "-0001-11-30 00:00:00",
"updated_at": "2015-12-07 12:37:14",
"last_sign_in_time": 0,
"sign_up_time": 0
},
{
"id": 20,
"user_name": "david",
"display_name": "David Guetta",
"email": "pierre@userfrosting.com",
"title": "Pyromancer",
"locale": "en_US",
"primary_group_id": 4,
"flag_verified": 1,
"flag_enabled": 1,
"flag_password_reset": 0,
"created_at": "-0001-11-30 00:00:00",
"updated_at": "-0001-11-30 00:00:00",
"last_sign_in_time": 0,
"sign_up_time": 0
},
{
"id": 13,
"user_name": "deadmau5",
"display_name": "Deadmau5",
"email": "deadmau5@userfrosting.com",
"title": "DJ Extraordinaire",
"locale": "en_US",
"primary_group_id": 3,
"flag_verified": 1,
"flag_enabled": 1,
"flag_password_reset": 0,
"created_at": "-0001-11-30 00:00:00",
"updated_at": "2016-03-29 14:37:24",
"last_sign_in_time": 0,
"sign_up_time": 0
},
{
"id": 23,
"user_name": "digweed",
"display_name": "John Digweed",
"email": "digweed@userfrosting.com",
"title": "DJ of the Future",
"locale": "en_US",
"primary_group_id": 3,
"flag_verified": 1,
"flag_enabled": 1,
"flag_password_reset": 0,
"created_at": "-0001-11-30 00:00:00",
"updated_at": "-0001-11-30 00:00:00",
"last_sign_in_time": 0,
"sign_up_time": 0
}
}
然后我们使用一些自定义代码 here and here to transform this data for use with tablesorter。这样做的好处是您可以在服务器端执行分页,而不是在一个请求中加载整个用户列表并强制用户等待整个 table 构建完成(这可能需要很长时间当你有很多用户时很长一段时间!)