Привет,
В настоящее время я изучаю среду и архитектуру UserFrosting.
Я пытаюсь создать «виджеты» на главной панели инструментов (dashboard.twig), которым нужен доступ к различным данным.
например Виджет для отображения простого списка зарегистрированных пользователей.
По умолчанию главная панель мониторинга не имеет доступа к данным (кроме текущего пользователя), поскольку в конфигурации Slim (index.php) не используется какой-либо контроллер. Это правильно?
Если я хочу использовать функции / данные от нескольких контроллеров (например, пользователей, групп и т. Д.), Как передать эти данные на главную панель инструментов?
Спасибо
Если вы имеете в виду этот маршрут для /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": "[email protected]",
"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": "[email protected]",
"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": "[email protected]",
"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": "[email protected]",
"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": "[email protected]",
"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. Это дает преимущество в том, что вы можете выполнять разбиение на страницы на стороне сервера, а не загружать весь список пользователей за один запрос и заставлять пользователя ждать, пока создается вся таблица (что может занять очень много времени, когда вы есть много пользователей!)
Других решений пока нет …