我的目标是创建没有数据库模型的页面/视图-本质上,我想构建一个仪表板,该仪表板最终将用作访问我所用的多个数据表(即国家,州和性别)的门户页面。在Cakephp 3x中使用cake-bake-all方法创建。
通过进行一些研究,我了解到内置的PagesController无法访问模型。如果要构建仪表板,我将必须创建自己的PagesController,但我不知道要使用什么代码。还有其他更简单的方法可以在一页上访问多个未关联的模型吗?任何帮助将不胜感激。
更新-
感谢克里斯(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>
答案 0 :(得分:0)
创建一个控制器,例如DasboardController
并使用\Cake\Orm\TableRegistry::get(tableName)
您也可以使用PagesController
,但通过它交付静态页面更为常见
答案 1 :(得分:0)
首先在./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。
除非在表和实体中具有特殊功能,否则除非需要PHPDoc声明,否则无需创建Table类或Entity类。 Cake ORM为您接管(默认类)。 因此,让我们回顾一下MVC中的M。
$this->loadModel ('States');
仅将模型加载到控制器内部。不多,但不多。如果您已将模型加载到控制器内部,则可以使用$this->States
(例如$this->States->find('all');
)访问该模型。
现在,您必须将结果保存在视图中(来自Controller:$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使用“约定超越配置”的概念。因此,如果您遵循约定(文件结构,文件名,类名,表名等),Cake或多或少会自动为您完成所有操作。
P.S。我认为,只有几种(甚至更不正确)的方法来使用TableRegistry。您应该从一开始就避免它。
答案 2 :(得分:0)