从 /protected/config/main.php 访问模型

Access model from /protected/config/main.php

我想更改 /protected/views/layouts/main.php 中的顶级菜单,以便将其存储在数据库中。我想这样做:在 /protected/config/main.php 的数组中添加 returns 从那里的菜单项数组:

return array(
    'basePath' => dirname(__FILE__) . DIRECTORY_SEPARATOR . '..',
    'name' => 'My Web Application',
    'preload' => array('log'),
    'menu' => array(
        array('label' => 'Home', 'url' => array('/site/index')),
        array('label' => 'About', 'url' => array('/site/page')),
        array('label' => 'Contact', 'url' => array('/site/contact'))
    ),

但是菜单项应该像菜单模型的对象一样从数据库中获取class。我感兴趣的问题是如何从 /protected/config/main.php 访问模型。如果我写 /protected/config/main.php 类似

$types = PageType::model()->findAll();

其中 PageType 是现有模型 class,我得到一个错误:

Warning: include(PageType.php) [function.include]: failed to open stream: No such file or directory in Z:\home\localhost\www\yii-1.1.16.bca042\framework\YiiBase.php on line 432

Warning: include() [function.include]: Failed opening 'PageType.php' for inclusion (include_path='.;/usr/local/php5/PEAR') in Z:\home\localhost\www\yii-1.1.16.bca042\framework\YiiBase.php on line 432

Fatal error: Class 'PageType' not found in Z:\home\localhost\www\mycms\protected\config\main.php on line 8

我不想直接从此脚本连接到数据库。

全部完成。我使用组件而不是 /config/main.php

来做到这一点

我刚刚在/protected/components/目录下创建了一个组件class

class MainMenu extends CComponent {

private $items;

public function getItems() {
    $types=MainMenuItem::model()->findAll();
    return $types;
}

并在 /protected/views/layouts/main 中使用了该组件。php

$mainMenu = new MainMenu();
$itemsModel = $mainMenu->items;
$items = array();
foreach ($itemsModel as $m) {
    $label = $m->label;
    $url = $m->url;
    if (!empty($m->visible) && $m->visible == 'isGuest' && !Yii::app()->user->isGuest 
        || !empty($m->visible) && $m->visible != 'isGuest' && Yii::app()->user->isGuest) 
        continue;
    $item = array('label'=>$label . ($label == 'Logout' ? '('.Yii::app()->user->name.')' : ''), 'url'=>array($url));
    $items[] = $item;
}
$this->widget('zii.widgets.CMenu',array('items'=>$items));