在CakePHP中创建动态数据库驱动菜单的最佳方法是使用CakePHP的内置组件和功能。以下是一些建议的步骤:
loadModel()
方法加载菜单模型。beforeRender()
方法中,获取菜单项的数据,并将其传递给视图。foreach
循环遍历菜单项,并将它们渲染成HTML。以下是一个简单的示例:
1. 创建菜单模型
// src/Model/Entity/Menu.php
namespace App\Model\Entity;
use Cake\ORM\Entity;
class Menu extends Entity
{
protected $_accessible = [
'*' => true,
'id' => false,
];
}
// src/Model/Table/MenusTable.php
namespace App\Model\Table;
use App\Model\Entity\Menu;
use Cake\ORM\Query;
use Cake\ORM\RulesChecker;
use Cake\ORM\Table;
use Cake\Validation\Validator;
class MenusTable extends Table
{
public function initialize(array $config)
{
parent::initialize($config);
$this->setTable('menus');
$this->setDisplayField('name');
$this->setPrimaryKey('id');
}
public function validationDefault(Validator $validator)
{
$validator
->integer('id')
->allowEmptyString('id', 'create');
$validator
->scalar('name')
->maxLength('name', 255)
->requirePresence('name', 'create')
->notEmptyString('name');
$validator
->scalar('link')
->maxLength('link', 255)
->requirePresence('link', 'create')
->notEmptyString('link');
$validator
->integer('parent_id')
->allowEmptyString('parent_id');
$validator
->integer('sort_order')
->allowEmptyString('sort_order');
return $validator;
}
public function buildRules(RulesChecker $rules)
{
$rules->add($rules->isUnique(['name']), ['errorField' => 'name']);
return $rules;
}
}
2. 在控制器中加载菜单模型
// src/Controller/AppController.php
namespace App\Controller;
use App\Controller\AppController;
use App\Model\Table\MenusTable;
class AppController extends Controller
{
public function initialize()
{
parent::initialize();
$this->loadModel('Menus');
}
}
3. 在控制器的beforeRender方法中获取菜单项数据
// src/Controller/AppController.php
public function beforeRender(EventInterface $event)
{
parent::beforeRender($event);
$menus = $this->Menus->find('all')->order(['sort_order' => 'ASC']);
$this->set(compact('menus'));
}
4. 在视图中渲染菜单项
// src/Template/Layout/default.ctp
<nav>
<ul>
<?php foreach ($menus as $menu): ?>
<li>
<?= $this->Html->link($menu->name, $menu->link) ?>
</li>
<?php endforeach; ?>
</ul>
</nav>
这样,您就可以在CakePHP中创建动态数据库驱动菜单,而无需使用第三方库或插件。
领取专属 10元无门槛券
手把手带您无忧上云