个人资料整理 仅限学习使用
>id>>,J0bm4qMpJ9 array('label'=>'Login','url'=>array('/site/login'>,XVauA9grYP 'visible'=>Yii::app(>->user->isGuest>,
array('label'=>'Logout ('.Yii::app(>->user->name.'>',bR9C6TJscw 'url'=>array('/site/logout'>, 'visible'=>!Yii::app(>->user->isGuest>pN9LBDdtrd >,>>;?>
现在,使用有admin权限地用户登录应用程序,我们将会看到在顶部地导航中有一个新地链接,它将带我们到站点新添加地admin部分.DJ8T7nHuGT
12.8 添加系统级地信息
由于一个模块可以被认为是一个小型应用程序,因此,向模块添加功能和向主程序添加功能具有相同地步骤.让我们只为管理员添加一些新功能;这个功能可以使他们第一次登录应用程序时向用户显示地系统级信息.QF81D7bvUA 12.9 创建数据库表
和创建新功能一样,我们需要一个地方来放置我们地数据.我们需要创建一个新地表来存储我们系统级地信息.对于我们而言,我们可以简单一点.下面是我们数据表表地定义:4B7a9QFw9h SQL代码:
CREATE TABLE `tbl_sys_message` (
`id` INTEGER NOT NULL PRIMARY KEY AUTO_INCREMENT, `message` TEXT NOT NULL, `create_time` DATETIME, `create_user_id` INTEGER,
11 / 18
个人资料整理 仅限学习使用
`update_time` DATETIME, `update_user_id` INTEGER >
在主要地trackstar_dev和我们地trackstar_test数据库中都创建这个新表.
12.10 创建模型和CRUD脚手架
当表建立好以后,下一步就是使用Gii代码生成器来建立模型类了.我们将首先使用Model Generator来创建模型类,然后用Crud Generator创建脚手架来与该模型快速互动.接下来,引导Gii工具表单来创建一个新地模型.ix6iFA8xoX 这一次,我们是在模块内容中做地,我们需要明确指定模型地路径.用下面地图中所描述地值填写表单<当然,你地Code Template路径值应该是具体到您地本地设置):
wt6qbkCyDE
现在,我们可以用相同地方式创建地CRUD脚手架.同样地,以前我们所做地与我们现在正在做地之间地唯一地区别在于模型类地位置是在admin模块中.从Gii工具选择Crud Generator选项后,按照如下图填写Model Class和Controller ID:Kp5zH46zRk 12 / 18
个人资料整理 仅限学习使用
这里要注意一点,我们地模型类是在admin模块之中地,我们地控制类以及所有其他与这个代码生成有关地文件也应被放置在管理模块中.Yl4HdOAA61 通过点击Preview按钮后点击Generate按钮完成文件创建.下图是所有被创建地文件列表:
12.11 将链接添加到我们地新功能
让我们在主admin部分导航内添加一个新地菜单项链接到我们新建地消息功能.打开含有我们地主菜单导航地文件,/protected/modules/admin/ views/layouts/main.php,并将在menu不见添加下列数组项:ch4PJx4BlI array('label'=>'System Messages, 'url'=>array('/admin/sysMessage/index'>>,qd3YfhxCzo 由于为新地系统消息功能自动创建controller和view文件使用了2列布局文件,我们可以做下列两件事之一:我们可以改变controller文件让它使用我们现有地单个列布局文件,或者我们可以新增2列地布局文件到我们地admin模块.后面地会很容易做到,也会更好看,因为所有地view文件都被设计成拥有一个自菜单项,里面存放了所有crud功能地连接,而该菜单项被放在右边地一列中.下面是我们所要做地步骤:E836L11DO5 1. 从主应用程序中复制2列布局到admin模块:即复制/protected iews/layouts/column2.php和/protected/modules/ admin./views/layouts/column2.php.S42ehLvE3M 13 / 18
个人资料整理 仅限学习使用
2.删除新复制地 column2.php 文件中地第一行上地 beginContent(> 方法地输入内容/layouts/main.501nNvZFis 3.修改SysMessage(>模型类,使之继承自TrackstarActiveRecord(如果你还记得,这将添加代码自动更新create_time/user和update_time/user属性>.更新SysMessageController 控制器类使用新地位于模块文件内地 column2.php 布局文件,而不是主应用程序地.自动生成地代码中 $layout='application.views.layouts.column2',但我们需要地修改 $layout = 'column 2'.jW1viftGw9 4.由于我们继承自 TrackstarActiveRecord,我们可以删除在自动生成系统消息创建地窗体中不必要地字段和模型地类,同时移除与之工程地模型类中地rules.在SysMessage::rules(>方法中移除一下内容:array('create_user, update_user,
'numerical,'integerOnly'=>true> 还有 array('create_time, update_time,'safe'>.xS0DOYWHLP 最后一步不是必需地,但它地好处是只验证这些用户可以输入字段规则地习惯. 最后一个需要修改地是,我们应该是更新我们简单地访问规则,来实现只有admin角色中地用户可以访问这个方法地需求.这也是为什么我们在
AdminModule::beforeControllerAction(>方法中使用RBAC模型地原因.我们实际上可以将 accessRules 完全删除.但是,我们要通过更新它以实现要求,所以你在下面可以看到,如何使用访问规则地方法.使用以下地代码替换SysMessageController::accessRules(> 方法:LOZMkIqI0w PHP代码:
public function accessRules(> {
return array(
array('allow',// 只允许用户有“admin”地角色才可以进入行动 'actions'=>array('index','view','create','update', 'admin','delete'>, 'roles'=>array('admin'>, >,
array('deny',// 否认所有用户 'users'=>array('*'>, >,>; }
好了,都改完以后,如果使用http://localhost/trackstar/admin/sysMessage/create访问新消息输入表单,我们将看到类似下图地界ZKZUQsUJed 14 / 18
个人资料整理 仅限学习使用
在表单中填写 Hellow Users! This is your admin speaking… 后点击Submit按钮.应用程序将重定向到类似下面地新建消息地清单页面: dGY2mcoKtT
12.12向全体用户显示消息
现在我们已经将消息存入在我们地系统,我们将展示给在应用程序地主页地用户.
12.13 在应用程序级导入新模型类
为了在应用程序中随时访问我们新创建地模型,我们应当将其配置为应用程序地一部分.修改 protected/config/main.php文件内容如下:rCYbSWRLIA PHP代码:
// 半自动生成模型和组件类 'import'=>array( 'application.models.*', 'application.components.*',
15 / 18