Как создать страницу / представление в cakephp 3 без модели для построения панели мониторинга?

Моя цель — создать страницу / представление без модели базы данных — по сути, я хочу создать инструментальную панель, которая в конечном итоге будет выступать в качестве страницы портала для доступа к нескольким таблицам данных (т.е. странам, штатам и полам), которые я создал с использованием метод cake-bake-all в Cakephp 3x.

Проведя небольшое исследование, я понял, что со встроенным PagesController я не могу получить доступ к моделям. Мне придется создать свой собственный PagesController, если я хочу создать панель мониторинга, но я не знаю, какой код использовать. Есть ли какой-либо другой более простой подход для доступа к нескольким несвязанным моделям на одной странице? Любая помощь будет принята с благодарностью.

Обновить —

Вот как я создал прототип Dashboard, благодаря совету Крисса!

Вот мой код —

DashboardsController.php (/src/controller/)

<?php
namespace App\Controller;

use App\Controller\AppController;


class DashboardsController extends AppController
{

public function index()
{
$this->loadModel ('States'); //Load models from States
$states = $this->States->find('all');  // query all states
$this->set('states', $states); // save states inside view

}
}
?>

index.ctp (src/Template/Dashboards/)

<?php //index function of dashboardscontroller ?>

<table>

<h2 class="col span_2_of_2"><?= ('State-Details') ?></h2>

<thead>

<tr>
<th scope="col"><?= $this->Paginator->sort('id') ?></th>
<th scope="col"><?= $this->Paginator->sort('state_name') ?></th>
<th scope="col"><?= $this->Paginator->sort('country_name') ?></th>
</tr>

</thead>

<tbody>
<?PHP foreach ($states as $state) : ?>

<tr>
<td>
<?= $this->Number->format($state->id) ?>
</td>

<td>
<?= h($state->state_name) ?>
</td>

<td>
<?= $state->has('country') ?
$this->Html->link($state->country->country_name, ['controller' =>
'Countries', 'action' => 'view',
$state->country->id]) : '' ?>
</td>

<td class="actions">
<?= $this->Html->link(('View'), ['action' => 'view', $state->id]) ?>
<?= $this->Html->link(('Edit'), ['action' => 'edit', $state->id]) ?>
<?= $this->Form->postLink(('Delete'), ['action' => 'delete', $state->id],
['confirm' => ('Are you sure you want to delete # {0}?', $state->id)]) ?>
</td>

</tr>

<?PHP endforeach; ?>
</tbody>
</table>

0

Решение

сначала создайте Dashboard Controller внутри ./src/Controller/ с именем файла DashboardsController.php, Обычно панель инструментов имеет только одну индексную функцию, если вы не подготовите несколько подразделов. Здесь мы предполагаем, что у вас есть только одна страница.

<?PHP
namespace App\Controller;

use App\Controller\AppController;

class DashboardsController extends AppController {

public function index(){
$this->loadModel ('States');
$states = $this->States->find('all');  // query all states
$this->set ('states', $states); // save states inside view
}
}  // end class DashboardsController
?>

Это C из MVC.

Если у вас нет специальных функций в ваших таблицах и сущностях, нет необходимости создавать класс Table или Entity class, если вам не нужны объявления PHPDoc. Cake ORM заменит вас (класс по умолчанию).
Итак, давайте рассмотрим M из MVC.

$this->loadModel ('States'); загружайте модель только внутри контроллера. Не меньше, но не больше. Если у вас есть загрузка модели внутри контроллера, вы можете получить доступ к этой модели с помощью $this->States (например. $this->States->find('all');).

Теперь вы должны сохранить результат внутри представления (из контроллера: $this->set ('states', $states); ).

Последняя часть — это вид (V) из MVC.

Создать файл внутри ./src/Template/Dashboards/ с именем index.ctp (это файл шаблона для индексной функции (действия) внутри контроллера Dashboards).

<?PHP /* index function of Dashboards Controller */ ?>
<ul>
<?PHP foreach ($states as $state) : ?>
<li><?=$state->title; ?></li>
<?PHP endforeach; ?>
</ul>

Теперь вы можете получить доступ к панели инструментов с помощью своего URL-адреса и имени контроллера (например, http://{url-to-your-cake-system}/dashboards/).

Это все. Торт использовать понятие «соглашение над конфигурацией». Так что, если вы цепляетесь за соглашения (файловую структуру, имена файлов, имена классов, имена таблиц и т. Д.), Cake делает все это для вас более или менее автоматически.

Постскриптум На мой взгляд, существует только несколько (и даже менее правильных) подходов к использованию TableRegistry. Вы должны попытаться избежать этого с самого начала.

0

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

Создать контроллер, например. DasboardController и использовать \Cake\Orm\TableRegistry::get(tableName)

Вы могли бы использовать PagesController также, но более распространенным является предоставление статических страниц с ним

TableRegistry

0

  1. создайте DashboradController с помощью метода index или в PageController добавьте метод dashboard ().
  2. создать Dashborad \ index.ctp или Page \ dashboard.ctp
  3. создать простой ячейки для различных представлений данных (например: ежечасно, ежедневно, еженедельно, ..) и включите их в ваш index.ctp / dashboard.ctp
  4. маршрут к вашей приборной панели
0
По вопросам рекламы ammmcru@yandex.ru
Adblock
detector