应用yii和php5进行web的敏捷开发翻译

上传人:腾**** 文档编号:40499820 上传时间:2018-05-26 格式:DOC 页数:18 大小:656KB
返回 下载 相关 举报
应用yii和php5进行web的敏捷开发翻译_第1页
第1页 / 共18页
应用yii和php5进行web的敏捷开发翻译_第2页
第2页 / 共18页
应用yii和php5进行web的敏捷开发翻译_第3页
第3页 / 共18页
应用yii和php5进行web的敏捷开发翻译_第4页
第4页 / 共18页
应用yii和php5进行web的敏捷开发翻译_第5页
第5页 / 共18页
点击查看更多>>
资源描述

《应用yii和php5进行web的敏捷开发翻译》由会员分享,可在线阅读,更多相关《应用yii和php5进行web的敏捷开发翻译(18页珍藏版)》请在金锄头文库上搜索。

1、自动化新闻稿监测系统的实现(文献翻译)1应用应用 Yii 和和 PHP5 进行进行 web 的敏捷开发的敏捷开发第十二章:迭代第十二章:迭代 9:添加管理模块添加管理模块到目前为止,我们已经给 TrackStar 应用程序增加了很多功能。如果你还记得在第8 章,我们介绍了使用基于用户角色的层次结构来限制用户访问某些功能。这有助于限制对一些单一项目的管理职能的访问。例如:在一个特定的项目中,你可能不希望让所有的成员都有删除权限。我们为用户分配到一个项目内的特殊角色来实现基于角色的访问控制,然后控制这些角色是否有访问该功能的权限。然而,我们尚未解决的是整个应用程序的管理需求。例如 TrackSta

2、r Web 应用程序经常需要的有一个非常特殊的用户拥有所有的管理权限。其中一个例子就是让系统的每一个用户拥有 CURD 操作,而不仅仅是项目。我们应用程序的系统管理员应该有以下权限:能够登录,删除或者修改用户、项目、问题,管理所有的评论,等等。同时,我们经常建立适用于整个应用程序的额外功能,如能给所有用户发布站点系统信息,管理电子邮件运动,打开/关闭某些应用功能,管理角色的层次,改变站点主题,等等。因为管理员的权限与用户的权限有极大的不同,把这些功能和应用程序分离是一个好想法。我们将通过 Yii 模块建立所有的管理功能来完成这个分离。12.1 迭代计划在这个迭代中,我们将集中完成以下开发任务:

3、 创造一个新的模块来存放管理功能 为系统管理员建立系统广播功能,用户可以在项目列表页面查看 为应用模块添加一个新课题 创建一个新表保持系统消息数据 为系统信息生成所有的 CURD 操作 只允许管理用户使用新模块中的功能 在项目列表页面显示新系统信息12.2 模块模块类似于一个大型应用程序中的小型应用程序。它有与应用程序类似的结构,包含模型、视图、控制器及其他支持组件。然而,模块不能作为独立的应用程序,它们必须嵌入某一个应用程序。Modules 在帮助你的应用程序模块化架构方面很有用。大型的应用程序经常可以分成几个离散的应用程序,这些离散的应用程序也可以用模块来构建。站点功能,如添加一个用户论坛

4、,用户博客或站点管理员功能都是一些例子,说明从主站点功能分离出来的功能,可以让它们单独开发,并且容易在未来的计划中重用。我们将在应用程自动化新闻稿监测系统的实现(文献翻译)2序中不同的位置建立存放管理功能的模块。12.3 创建一个模块使用我们的老朋友,Gii 代码生成工具创建一个新模块是很容易的。伴随着我们的URL 的改变,要通过 http:/localhost/ trackstar / gii 来访问该工具。打开后,在左边的菜单中选择 Module Generator 选项。你将看到下面的画面:我们需要给模块取一个唯一的名字。由于我们正在创建一个管理模块,我们可以命名为 admin。在 Mo

5、dule ID 内输入 admin,点击 Preview 按钮。如下图所示,它会向你展示它将会生成的所有文件,让你在创建之前预览这些文件:然后点击 Generate 按钮来生成这些文件。由于 web 服务器进程它自动创建文件夹和文件的要求,所以要确保你的/protected 文件夹是可写入的。下面的截图显示一个成功的模块生成:自动化新闻稿监测系统的实现(文献翻译)3让我们更进一步的看看这个自动生成的模板。Yii 中模块是以一个文件夹组织的,文件夹的名字就是该模块的名字。默认情况下,居所有的模块保存在/protected/modules目录下。每个模块文件夹的结构都与主应用程序非常相似。这个指令

6、为我们所做的是创建 admin 模块建立脚手架文件夹结构。因为这是我们的第一个模块,顶层的文件夹/protected/modules 被创建了,然后将 admin 文件夹放在里面。下面为我们展示了模块命令行为我们建立的所有文件夹和文件:自动化新闻稿监测系统的实现(文献翻译)4一个模块必须拥有一个模块继承自 CWebModule 或其子类。该模块类的名字由模块 ID (在这里指 admin) 和字符串 Module 联合生成。模块 ID 的第一个字母大写。所以,在我们的例子中,我们的 admin 模块类文件被命名 AdminModule.php。模块类主要作为存储模块代码共享信息的中转站。例如,

7、我们可以用 CWebModule 的 params 属性来存储模块性能的具体参数,并利用其 components 属性在模块级分享应用程序的组件。这个模块类在模块中的作用类似于应用程序类对整个应用程序的作用。所以CWebModule 是对模块的就像 CWebApplication 是对应用程序的。12.4 使用一个模块正如成功建立的信息表明,在我们使用新模块之前,我们需要在主应用程序中设置 modules 属性,才可以使用它。在添加 gii 模块应用程序之前,允许我们使用 gii 代码生成工具。我们对主要配置文件 protected/config/ main.php 进行改变。以下代码显示了所

8、需的改变:PHP 代码:modules=array(gii=array(class=system.gii.GiiModule,password=iamadmin,),admin,),自动化新闻稿监测系统的实现(文献翻译)5保存这个改变后,我们的新admin模块就可以使用了。我们可以先通过访问http:/localhost/ trackstar/admin/default/index来看一下。该请求显示的模块的访问页类似于我们的主应用程序页,除了我们需要在路由中添加moduleID。所以我们的路径形式如下:moduleID/ controllerID/actionID。我们URL请求/admin

9、/default/index 应该解释为admin模块的default控制器的index方法。当我们访问这个页面,我们看到类似下面的画面:12.5 主题化一个模块我们立刻发现这一视图(View)似乎没有应用任何布局(Layout) 。有人可能会想,控制器渲染视图时用的是renderPartial(),而不是render()。然而,在检查我们的默认的admin的controller文件,/protected/modules/admin/controllers/ DefaultController.php时,我们可以看到,事实上它使用的是render()方法。因此,我们需要使用一个layout文件

10、(如果有的话)。问题是在模块中几乎一切都是独立的,包括layout文件的默认路径。网站模块布局的默认路径是/protected/ modules/moduleID/views/layouts,在我们的例子中moduleID应该是admin。我们可以看到,在这个文件夹中没有文件,所以没有应用默认布局。在这里多讲一点。在上一次迭代中,我们实现了一个名为new的新主题。我们也可以通过这个主题管理我们所有的模块view文件,包括layout view文件。如果我们这样做,我们需要增加一些主题文件夹结构以适应我们的新模块。文件夹的结构与预期的一样。大致上为:/themes/themeName/views

11、/moduleID/layouts/为布局文件,/themes/themeName/views/moduleID/controllerID/为对应controller的视图文件。为了说得更清楚,我们模拟一次admin模块调用view的过程的Yii决策流程。下面就是admin模块的DefaultController.php文件中 $this-render(index) 的渲染过程:1.当render()被调用,与renderPartial()不同,它会尝试用一个layout文件来修饰指定的视图文件index.php。我们的应用程序现在被配置使用名为new的主题,所以要在这个主题文件夹中找到lay

12、out文件。我们的新模块的DefaultController类继承自我们的应用程序组件controller.php,所以使用了column1作为指定的$layout的属性值。这个属性没有被重写,所以这也是DefaultController的Layout值。最后,当这些都在admin模块中完成后,Yii首先寻找以下layout文件:/themes/new/views/admin/layouts/column1.php。注意到在这个文件夹结构包含了moduleID。2.这个文件不存在,所以在模块的着默认位置查找。如前所述,每一个模块都有特自动化新闻稿监测系统的实现(文献翻译)6定的默认布局文件夹。

13、因此,在这种情况下,它将试图找到下面的layout文件:/protected/modules/admin/views/layouts/column1.php.3.这个文件也不存在,因此它将不会使用layout。现在只是在没有布局时尝试简单的渲染指定试图文件index.php。但是,我们已经为应用程序定义了特定的主题new,所以它将首先寻找以下的视图文件:/themes/new/ views/admin/default/index.php。4.这个文件也不存在,那么它将再次查找在这个模块(AdminModule)的控制器(DefaultController.php)的默认位置,即:/protec

14、ted/modules/admin/views/default/index.php。这就解释了为什么网页http:/localhost/trackstar/admin/default/index被渲染了却没有任何布局。现在,为了使事情变得完全分离和简单,让我们管理一下在我们的模块的默认位置的视图文件,而不是在主题new内。让我们为admin模块应用我们为原始应用程序设计的主题,就是在使用新主题前的样子。这样的话,我们的admin模块的页面就会和正常应用程序页面有所不同,这将有助于提醒我们,我们是在特殊的admin事务,但我们不需要花任何时间想出一个新设计。12.6 应用一个主题首先,让我们为模

15、块设定一个默认的layout值。我们在模块类的int()方法设置我们的的模块级配置,模块类位于/protected/ modules/AdminModule.php。打开这个文件,并且添加下面的代码:PHP代码:class AdminModule extends CWebModulepublic function init()/ 当模块创建时,调用这个方法/ 你可以在这里用代码来自定义模块或应用程序/ 导入模块级模型和组件$this-setImport(array(admin.models.*,ponents.*,);$this-layout = main;. 自动化新闻稿监测系统的实现(文献

16、翻译)7这样一来,如果我们在更细化的水平没有特别指定布局文件,像在一个控制器类中,模块的所有视图将会调用位于/protected/modules/ admin/views/layouts/下的main.php布局文件来修饰。现在,我们自然需要创建这个文件。从主应用程序复制两个布局文件:/protected/views/layouts/main.php和/protected/ views/layouts/column1.php,并把他们两个放在/protected/modules/ admin/views/layouts/文件夹。复制完之后,我们需要对它们做一些修改。首先修改column1.php文件。在beginContent()中去除对/layouts/main的引用,修改后代码如下:PHP代码:beginContent();?endContent();?在未指明导入文件时调用beginContent(),将会使用模块的默认的布局文件,

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 生活休闲 > 社会民生

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号