UserFrosting: создание различных виджетов сводной панели, которые имеют доступ к данным

[UserFrosting: 0.3.1]

Привет,

В настоящее время я изучаю среду и архитектуру UserFrosting.

Я пытаюсь создать «виджеты» на главной панели инструментов (dashboard.twig), которым нужен доступ к различным данным.

например Виджет для отображения простого списка зарегистрированных пользователей.

По умолчанию главная панель мониторинга не имеет доступа к данным (кроме текущего пользователя), поскольку в конфигурации Slim (index.php) не используется какой-либо контроллер. Это правильно?

Если я хочу использовать функции / данные от нескольких контроллеров (например, пользователей, групп и т. Д.), Как передать эти данные на главную панель инструментов?

Спасибо

1

Решение

Если вы имеете в виду этот маршрут для /dashboard, тогда вы правы — настройка по умолчанию не использует класс внешнего контроллера:

$app->get('/dashboard/?', function () use ($app) {
// Access-controlled page
if (!$app->user->checkAccess('uri_dashboard')){
$app->notFound();
}

$app->render('dashboard.twig', []);
});

У вас есть несколько вариантов. Вы можете добавить новый метод к существующий класс контроллера, или даже создать новый класс контроллера (обратите внимание, что после добавления нового класса вам нужно будет запустить composer update добавить его в автозагрузчик).

В качестве альтернативы, вы можете просто добавить логику вашего контроллера прямо в замыкание маршрута выше. Красноречивые модели User, Groupи т. д. можно получить такой же легкий доступ при закрытии маршрута, как и в классе контроллера.

Наконец (и это то, что я бы порекомендовал для создания списка пользователей), вы могли бы сначала сгенерировать страницу панели мониторинга, используя один запрос, а затем извлечь фактические данные с помощью отдельного запроса, создав список с помощью кода на стороне клиента (Javascript). , Это на самом деле, как /users страница работает по умолчанию.

Вы заметите, что если вы посетите /users страницу с открытой консолью браузера, которая отправляет отдельный запрос /api/users, Это возвращает объект 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
}
}

Затем мы используем некоторый пользовательский код Вот а также Вот преобразовать эти данные для использования с TableSorter. Это дает преимущество в том, что вы можете выполнять разбиение на страницы на стороне сервера, а не загружать весь список пользователей за один запрос и заставлять пользователя ждать, пока создается вся таблица (что может занять очень много времени, когда вы есть много пользователей!)

2

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector