从 /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));
我想更改 /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));