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

Моя цель - создать страницу / представление без модели базы данных - по сути, я хочу создать инструментальную панель, которая в конечном итоге будет действовать как страница портала для доступа к нескольким таблицам данных (т. Е. Стран, штатов и полов), которые я 'созданный с использованием метода 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>

Ответы [ 3 ]

0 голосов
/ 29 декабря 2018

сначала создайте 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.

Если у вас нет специальных функций в ваших таблицах и объектах, нет необходимости создавать таблицуclass или 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 делает все это для вас более или менее автоматически.

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

0 голосов
/ 01 января 2019
  1. создайте DashboradController с помощью метода индекса или в PageController добавьте метод dashboard ().
  2. создайте Dashborad \ index.ctp или Page \ dashboard.ctp
  3. создайте простой Ячейки для различных представлений данных (например, ежечасно, ежедневно, еженедельно и т. Д.) И включите в ваш index.ctp / dashboard.ctp
  4. маршрут к вашей приборной панели
0 голосов
/ 25 декабря 2018

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

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

TableRegistry

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...