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

时间:2015-02-19 19:32:39

标签: php yii

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

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'))
    ),

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

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

其中PageType是现有的模型类,我收到一个错误:

  

警告:   include(PageType.php)[function.include]:无法打开流:否   这样的文件或目录   Z:\ home \ localhost \ www \ yii-1.1.16.bca042 \ framework \ YiiBase.php在线   432

     

警告:include()[function.include]:打开'PageType.php'失败   包含(include_path ='。; / usr / local / php5 / PEAR')in   Z:\ home \ localhost \ www \ yii-1.1.16.bca042 \ framework \ YiiBase.php在线   432

     

致命错误:找不到类'PageType'   第8行的Z:\ home \ localhost \ www \ mycms \ protected \ config \ main.php

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

2 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分:1)

我刚刚在/ protected / components /目录中创建了一个组件类

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));