如何在没有构建仪表板模型的情况下在 cakephp 3 中创建 page/view?
How to create a page/view in cakephp 3 without a model for building a dashboard?
我的目标是创建一个没有数据库模型的 page/view - 本质上我想构建一个仪表板,它最终将充当访问多个数据表(即国家、州和性别)的门户页面) 我在 Cakephp 3x 中使用 cake-bake-all 方法创建的。
通过做一些研究,我了解到使用内置的 PagesController,我无法访问模型。如果我想构建一个仪表板,我将不得不创建自己的 PagesController,但我不知道要使用什么代码。有没有其他更简单的方法可以在一个页面上访问多个不相关的模型?任何帮助将不胜感激。
更新-
这就是我创建 Dashboard 原型的方式,感谢 Chriss 的建议!
这是我的代码 -
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>
创建一个控制器,例如。 DasboardController
并使用 \Cake\Orm\TableRegistry::get(tableName)
您也可以使用 PagesController
,但更常见的是用它传送静态页面
首先在 ./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
?>
那是来自 MVC 的 C。
除非您的 table 和实体中有特殊功能,否则没有必要创建 Table class 或实体 class 除非您需要 PHPDoc声明。 Cake ORM 为您接管(默认 class)。
那么让我们回顾一下 MVC 中的 M。
$this->loadModel ('States');
只加载控制器内部的模型。不会少,但不会多。如果您已将模型加载到控制器中,您可以使用 $this->States
(例如 $this->States->find('all');
)访问该模型。
现在您必须将结果保存在视图中(来自控制器:$this->set ('states', $states);
)。
最后一部分是来自 MVC 的视图 (V)。
在 ./src/Template/Dashboards/
中创建一个名称为 index.ctp
的文件(这是 Dashboards Controller 中索引函数(操作)的模板文件)。
<?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 使用概念"convention over configuration"。因此,如果您坚持约定(文件结构、文件名、class 名称、table 名称等),Cake 或多或少会自动为您完成。
P.S。在我看来,使用 TableRegistry 的方法只有几种(甚至更不正确)。你应该从一开始就尽量避免它。
- 使用 index 方法创建 DashboradController 或在 PageController 添加 dashboard() 方法。
- 创建Dashborad\index.ctp 或Page\dashboard.ctp
- 为各种数据展示创建简单的 Cells(例如:每小时、每天、每周......)并包含在您的 index.ctp / dashboard.ctp
中
- 路由到您的仪表板
我的目标是创建一个没有数据库模型的 page/view - 本质上我想构建一个仪表板,它最终将充当访问多个数据表(即国家、州和性别)的门户页面) 我在 Cakephp 3x 中使用 cake-bake-all 方法创建的。
通过做一些研究,我了解到使用内置的 PagesController,我无法访问模型。如果我想构建一个仪表板,我将不得不创建自己的 PagesController,但我不知道要使用什么代码。有没有其他更简单的方法可以在一个页面上访问多个不相关的模型?任何帮助将不胜感激。
更新-
这就是我创建 Dashboard 原型的方式,感谢 Chriss 的建议!
这是我的代码 -
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>
创建一个控制器,例如。 DasboardController
并使用 \Cake\Orm\TableRegistry::get(tableName)
您也可以使用 PagesController
,但更常见的是用它传送静态页面
首先在 ./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
?>
那是来自 MVC 的 C。
除非您的 table 和实体中有特殊功能,否则没有必要创建 Table class 或实体 class 除非您需要 PHPDoc声明。 Cake ORM 为您接管(默认 class)。 那么让我们回顾一下 MVC 中的 M。
$this->loadModel ('States');
只加载控制器内部的模型。不会少,但不会多。如果您已将模型加载到控制器中,您可以使用 $this->States
(例如 $this->States->find('all');
)访问该模型。
现在您必须将结果保存在视图中(来自控制器:$this->set ('states', $states);
)。
最后一部分是来自 MVC 的视图 (V)。
在 ./src/Template/Dashboards/
中创建一个名称为 index.ctp
的文件(这是 Dashboards Controller 中索引函数(操作)的模板文件)。
<?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 使用概念"convention over configuration"。因此,如果您坚持约定(文件结构、文件名、class 名称、table 名称等),Cake 或多或少会自动为您完成。
P.S。在我看来,使用 TableRegistry 的方法只有几种(甚至更不正确)。你应该从一开始就尽量避免它。
- 使用 index 方法创建 DashboradController 或在 PageController 添加 dashboard() 方法。
- 创建Dashborad\index.ctp 或Page\dashboard.ctp
- 为各种数据展示创建简单的 Cells(例如:每小时、每天、每周......)并包含在您的 index.ctp / dashboard.ctp 中
- 路由到您的仪表板