應(yīng)用Yii和PHP5進(jìn)行web的敏捷開發(fā)翻譯_第1頁(yè)
應(yīng)用Yii和PHP5進(jìn)行web的敏捷開發(fā)翻譯_第2頁(yè)
應(yīng)用Yii和PHP5進(jìn)行web的敏捷開發(fā)翻譯_第3頁(yè)
應(yīng)用Yii和PHP5進(jìn)行web的敏捷開發(fā)翻譯_第4頁(yè)
應(yīng)用Yii和PHP5進(jìn)行web的敏捷開發(fā)翻譯_第5頁(yè)
已閱讀5頁(yè),還剩9頁(yè)未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

.z應(yīng)用Yii和PHP5進(jìn)展web的敏捷開發(fā)第十二章:迭代9:添加管理模塊到目前為止,我們已經(jīng)給TrackStar應(yīng)用程序增加了很多功能。如果你還記得在第8章,我們介紹了使用基于用戶角色的層次構(gòu)造來限制用戶*些功能。這有助于限制對(duì)一些單一工程的管理職能的。例如:在一個(gè)特定的工程中,你可能不希望讓所有的成員都有刪除權(quán)限。我們?yōu)橛脩舴峙涞揭粋€(gè)工程內(nèi)的特殊角色來實(shí)現(xiàn)基于角色的控制,然后控制這些角色是否有該功能的權(quán)限。然而,我們尚未解決的是整個(gè)應(yīng)用程序的管理需求。例如TrackStarWeb應(yīng)用程序經(jīng)常需要的有一個(gè)非常特殊的用戶擁有所有的管理權(quán)限。其中一個(gè)例子就是讓系統(tǒng)的每一個(gè)用戶擁有CURD操作,而不僅僅是工程。我們應(yīng)用程序的系統(tǒng)管理員應(yīng)該有以下權(quán)限:能夠登錄,刪除或者修改用戶、工程、問題,管理所有的評(píng)論,等等。同時(shí),我們經(jīng)常建立適用于整個(gè)應(yīng)用程序的額外功能,如能給所有用戶發(fā)布站點(diǎn)系統(tǒng)信息,管理電子運(yùn)動(dòng),翻開/關(guān)閉*些應(yīng)用功能,管理角色的層次,改變站點(diǎn)主題,等等。因?yàn)楣芾韱T的權(quán)限與用戶的權(quán)限有極大的不同,把這些功能和應(yīng)用程序別離是一個(gè)好想法。我們將通過Yii模塊建立所有的管理功能來完成這個(gè)別離。12.1迭代方案在這個(gè)迭代中,我們將集中完成以下開發(fā)任務(wù):?創(chuàng)造一個(gè)新的模塊來存放管理功能?為系統(tǒng)管理員建立系統(tǒng)播送功能,用戶可以在工程列表頁(yè)面查看?為應(yīng)用模塊添加一個(gè)新課題?創(chuàng)立一個(gè)新表保持系統(tǒng)消息數(shù)據(jù)?為系統(tǒng)信息生成所有的CURD操作?只允許管理用戶使用新模塊中的功能?在工程列表頁(yè)面顯示新系統(tǒng)信息12.2模塊模塊類似于一個(gè)大型應(yīng)用程序中的小型應(yīng)用程序。它有與應(yīng)用程序類似的構(gòu)造,包含模型、視圖、控制器及其他支持組件。然而,模塊不能作為獨(dú)立的應(yīng)用程序,它們必須嵌入*一個(gè)應(yīng)用程序。Modules在幫助你的應(yīng)用程序模塊化架構(gòu)方面很有用。大型的應(yīng)用程序經(jīng)??梢苑殖蓭讉€(gè)離散的應(yīng)用程序,這些離散的應(yīng)用程序也可以用模塊來構(gòu)建。站點(diǎn)功能,如添加一個(gè)用戶論壇,用戶博客或站點(diǎn)管理員功能都是一些例子,說明從主站點(diǎn)功能別離出來的功能,可以讓它們單獨(dú)開發(fā),并且容易在未來的方案中重用。我們將在應(yīng)用程序中不同的位置建立存放管理功能的模塊。12.3創(chuàng)立一個(gè)模塊使用我們的老朋友,Gii代碼生成工具創(chuàng)立一個(gè)新模塊是很容易的。伴隨著我們的URL的改變,要通過://localhost/trackstar/gii來該工具。翻開后,在左邊的菜單中選擇ModuleGenerator選項(xiàng)。你將看到下面的畫面:我們需要給模塊取一個(gè)唯一的名字。由于我們正在創(chuàng)立一個(gè)管理模塊,我們可以命名為admin。在ModuleID內(nèi)輸入admin,點(diǎn)擊Preview按鈕。如以下列圖所示,它會(huì)向你展示它將會(huì)生成的所有文件,讓你在創(chuàng)立之前預(yù)覽這些文件:然后點(diǎn)擊Generate按鈕來生成這些文件。由于web效勞器進(jìn)程它自動(dòng)創(chuàng)立文件夾和文件的要求,所以要確保你的/protected文件夾是可寫入的。下面的截圖顯示一個(gè)成功的模塊生成:讓我們更進(jìn)一步的看看這個(gè)自動(dòng)生成的模板。Yii中模塊是以一個(gè)文件夾組織的,文件夾的名字就是該模塊的名字。默認(rèn)情況下,居所有的模塊保存在/protected/modules目錄下。每個(gè)模塊文件夾的構(gòu)造都與主應(yīng)用程序非常相似。這個(gè)指令為我們所做的是創(chuàng)立admin模塊建立腳手架文件夾構(gòu)造。因?yàn)檫@是我們的第一個(gè)模塊,頂層的文件夾/protected/modules被創(chuàng)立了,然后將admin文件夾放在里面。下面為我們展示了模塊命令行為我們建立的所有文件夾和文件:一個(gè)模塊必須擁有一個(gè)模塊繼承自CWebModule或其子類。該模塊類的名字由模塊ID(在這里指admin)和字符串Module聯(lián)合生成。模塊ID的第一個(gè)字母大寫。所以,在我們的例子中,我們的admin模塊類文件被命名AdminModule.php。模塊類主要作為存儲(chǔ)模塊代碼共享信息的中轉(zhuǎn)站。例如,我們可以用CWebModule的params屬性來存儲(chǔ)模塊性能的具體參數(shù),并利用其ponents屬性在模塊級(jí)分享應(yīng)用程序的組件。這個(gè)模塊類在模塊中的作用類似于應(yīng)用程序類對(duì)整個(gè)應(yīng)用程序的作用。所以CWebModule是對(duì)模塊的就像CWebApplication是對(duì)應(yīng)用程序的。12.4使用一個(gè)模塊正如成功建立的信息說明,在我們使用新模塊之前,我們需要在主應(yīng)用程序中設(shè)置modules屬性,才可以使用它。在添加gii模塊應(yīng)用程序之前,允許我們使用gii代碼生成工具。我們對(duì)主要配置文件protected/config/main.php進(jìn)展改變。以下代碼顯示了所需的改變:PHP代碼:'modules'=>array('gii'=>array('class'=>'system.gii.GiiModule','password'=>'iamadmin',),'admin',),保存這個(gè)改變后,我們的新admin模塊就可以使用了。我們可以先通過://localhost/trackstar/admin/default/inde*來看一下。該請(qǐng)求顯示的模塊的頁(yè)類似于我們的主應(yīng)用程序頁(yè),除了我們需要在路由中添加moduleID。所以我們的路徑形式如下:moduleID/controllerID/actionID。我們URL請(qǐng)求/admin/default/inde*應(yīng)該解釋為admin模塊的default控制器的inde*方法。當(dāng)我們這個(gè)頁(yè)面,我們看到類似下面的畫面:12.5主題化一個(gè)模塊我們立刻發(fā)現(xiàn)這一視圖〔View〕似乎沒有應(yīng)用任何布局〔Layout〕。有人可能會(huì)想,控制器渲染視圖時(shí)用的是renderPartial(),而不是render()。然而,在檢查我們的默認(rèn)的admin的controller文件,/protected/modules/admin/controllers/DefaultController.php時(shí),我們可以看到,事實(shí)上它使用的是render()方法。因此,我們需要使用一個(gè)layout文件(如果有的話)。問題是在模塊中幾乎一切都是獨(dú)立的,包括layout文件的默認(rèn)路徑。模塊布局的默認(rèn)路徑是/protected/modules/[moduleID]/views/layouts,在我們的例子中moduleID應(yīng)該是admin。我們可以看到,在這個(gè)文件夾中沒有文件,所以沒有應(yīng)用默認(rèn)布局。在這里多講一點(diǎn)。在上一次迭代中,我們實(shí)現(xiàn)了一個(gè)名為new的新主題。我們也可以通過這個(gè)主題管理我們所有的模塊view文件,包括layoutview文件。如果我們這樣做,我們需要增加一些主題文件夾構(gòu)造以適應(yīng)我們的新模塊。文件夾的構(gòu)造與預(yù)期的一樣。大致上為:/themes/[themeName]/views/[moduleID]/layouts/為布局文件,/themes/[themeName]/views/[moduleID]/[controllerID]/為對(duì)應(yīng)controller的視圖文件。為了說得更清楚,我們模擬一次admin模塊調(diào)用view的過程的Yii決策流程。下面就是admin模塊的DefaultController.php文件中$this->render('inde*')的渲染過程:當(dāng)render()被調(diào)用,與renderPartial()不同,它會(huì)嘗試用一個(gè)layout文件來修飾指定的視圖文件inde*.php。我們的應(yīng)用程序現(xiàn)在被配置使用名為new的主題,所以要在這個(gè)主題文件夾中找到layout文件。我們的新模塊的DefaultController類繼承自我們的應(yīng)用程序組件controller.php,所以使用了column1作為指定的$layout的屬性值。這個(gè)屬性沒有被重寫,所以這也是DefaultController的Layout值。最后,當(dāng)這些都在admin模塊中完成后,Yii首先尋找以下layout文件:/themes/new/views/admin/layouts/column1.php。注意到在這個(gè)文件夾構(gòu)造包含了moduleID。這個(gè)文件不存在,所以在模塊的著默認(rèn)位置查找。如前所述,每一個(gè)模塊都有特定的默認(rèn)布局文件夾。因此,在這種情況下,它將試圖找到下面的layout文件:/protected/modules/admin/views/layouts/column1.php.這個(gè)文件也不存在,因此它將不會(huì)使用layout。現(xiàn)在只是在沒有布局時(shí)嘗試簡(jiǎn)單的渲染指定試圖文件inde*.php。但是,我們已經(jīng)為應(yīng)用程序定義了特定的主題new,所以它將首先尋找以下的視圖文件:/themes/new/views/admin/default/inde*.php。這個(gè)文件也不存在,則它將再次查找在這個(gè)模塊(AdminModule)的控制器(DefaultController.php)的默認(rèn)位置,即:/protected/modules/admin/views/default/inde*.php。這就解釋了為什么網(wǎng)頁(yè)://localhost/trackstar/admin/default/inde*被渲染了卻沒有任何布局?,F(xiàn)在,為了使事情變得完全別離和簡(jiǎn)單,讓我們管理一下在我們的模塊的默認(rèn)位置的視圖文件,而不是在主題new內(nèi)。讓我們?yōu)閍dmin模塊應(yīng)用我們?yōu)樵紤?yīng)用程序設(shè)計(jì)的主題,就是在使用新主題前的樣子。這樣的話,我們的admin模塊的頁(yè)面就會(huì)和正常應(yīng)用程序頁(yè)面有所不同,這將有助于提醒我們,我們是在特殊的admin事務(wù),但我們不需要花任何時(shí)間想出一個(gè)新設(shè)計(jì)。12.6應(yīng)用一個(gè)主題首先,讓我們?yōu)槟K設(shè)定一個(gè)默認(rèn)的layout值。我們?cè)谀K類的int()方法設(shè)置我們的的模塊級(jí)配置,模塊類位于/protected/modules/AdminModule.php。翻開這個(gè)文件,并且添加下面的代碼:PHP代碼:classAdminModulee*tendsCWebModule{publicfunctioninit(){//當(dāng)模塊創(chuàng)立時(shí),調(diào)用這個(gè)方法//你可以在這里用代碼來自定義模塊或應(yīng)用程序//導(dǎo)入模塊級(jí)模型和組件$this->setImport(array('admin.models.*','admin.ponents.*',));$this->layout='main';}...這樣一來,如果我們?cè)诟?xì)化的水平?jīng)]有特別指定布局文件,像在一個(gè)控制器類中,模塊的所有視圖將會(huì)調(diào)用位于/protected/modules/admin/views/layouts/下的main.php布局文件來修飾。現(xiàn)在,我們自然需要?jiǎng)?chuàng)立這個(gè)文件。從主應(yīng)用程序復(fù)制兩個(gè)布局文件:/protected/views/layouts/main.php和/protected/views/layouts/column1.php,并把他們兩個(gè)放在/protected/modules/admin/views/layouts/文件夾。復(fù)制完之后,我們需要對(duì)它們做一些修改。首先修改column1.php文件。在beginContent()中去除對(duì)/layouts/main的引用,修改后代碼如下:PHP代碼:<?php$this->beginContent();?><divclass="container"><divid="content"><?phpecho$content;?></div><!--content--></div><?php$this->endContent();?>在未指明導(dǎo)入文件時(shí)調(diào)用beginContent(),將會(huì)使用模塊的默認(rèn)的布局文件,而我們剛剛將其指定到新復(fù)制的main.php文件?,F(xiàn)在讓我們對(duì)main.php布局文件做一些修改。我們打算給應(yīng)用程序頭部添加AdminConsole文本,來強(qiáng)調(diào)我們是應(yīng)用程序的一局部。我們也將修改我們的菜單項(xiàng),添加一個(gè)到管理主頁(yè)的,以及一個(gè)回到主站點(diǎn)的。我們可以消除這個(gè)菜單的About和Content,因?yàn)槲覀儾⒉恍枰诠芾砭植恐貜?fù)這些選項(xiàng)。修改后代碼如下:PHP代碼:...<divclass="container"id="page"><divid="header"><divid="logo"><?phpechoCHtml::encode(Yii::app()->name)."AdminConsole";?></div></div><!--header--><divid="mainmenu"><?php$this->widget('zii.widgets.CMenu',array('items'=>array(array('label'=>'BackToMainSite','url'=>array('/project')),array('label'=>'Admin','url'=>array('/admin/default/inde*')),array('label'=>'Login','url'=>array('/site/login'),'visible'=>Yii::app()->user->isGuest),array('label'=>'Logout('.Yii::app()->user->name.')','url'=>array('/site/logout'),'visible'=>!Yii::app()->user->isGuest)),));?></div><!--mainmenu-->...文件其余局部不變?,F(xiàn)在如果我們admin模塊頁(yè)面,我們看到類似下面的畫面:如果我們點(diǎn)擊BackToMainSite的,我們被帶回到最新主題主應(yīng)用程序。12.7限制admin模塊的一個(gè)你可能已經(jīng)注意到的問題是:任何用戶,包括游客都可以我們的新的admin模塊。但實(shí)際上我們建立admin模塊只想將該功能提供給擁有管理員權(quán)限的用戶。所以我們要解決這個(gè)問題。幸運(yùn)的是,我們已經(jīng)在第8章就在應(yīng)用程序中實(shí)現(xiàn)了RBAC模型。我們現(xiàn)在要做的是將其擴(kuò)大,包括一個(gè)新的管理員角色和該角色的管理權(quán)限。如果你回憶一下在第八章中,我們使用了一個(gè)Yii腳本命令來實(shí)現(xiàn)RBAC的構(gòu)造。我們需要增加命令。所以,翻開包含腳本命令的文件,/protected/mands/shell/Rbacmand.php和添加以下內(nèi)容:PHP代碼://給管理員創(chuàng)立一個(gè)常規(guī)的任務(wù)級(jí)權(quán)限$this->_authManager->createTask("adminManagement","accesstotheapplicationadministrationfunctionality");//創(chuàng)立站點(diǎn)管理員的角色,并添加適當(dāng)?shù)臋?quán)限$role=$this->_authManager->createRole("admin");$role->addChild("owner";$role->addChild("reader");$role->addChild("member");$role->addChild("adminManagement");//確保我們系統(tǒng)內(nèi)有一個(gè)管理員(使它是用戶的id號(hào)為1)$this->_authManager->assign("admin",1);當(dāng)著修改完成后,我們必須重新運(yùn)行我們的命令來更新數(shù)據(jù)庫(kù)。這樣做之后,翻開yiicshell,執(zhí)行rbac的命令:%cdWebroot/trackstar%protected/yiicshell>>rbac當(dāng)我們對(duì)RBAC模型修改完后,我們可以添加一個(gè)檢查AdminModule:beforeControllerAction()方法,這樣admin模塊中沒有什么事物會(huì)被執(zhí)行,除非用戶是admin角色:PHP代碼:publicfunctionbeforeControllerAction($controller,$action){if(parent::beforeControllerAction($controller,$action)){//在模塊控制器執(zhí)行actions之前,調(diào)用這個(gè)方法//你可以在這里自定義代碼if(!Yii::app()->authManager->checkAccess("admin",Yii::app()->user->id)){thrownewCE*ception(403,Yii::t('yii','Youarenotauthorizedtoperformthisaction.'));}else{returntrue;}}elsereturnfalse;}當(dāng)這些都完成后,如果在admin模塊中,一個(gè)沒有被分配到admin角色的用戶試圖網(wǎng)頁(yè),他們將會(huì)遇到授權(quán)錯(cuò)誤頁(yè)面。例如,如果你在沒有登錄的情況下,試圖管理頁(yè)面,你會(huì)遇到以下結(jié)果:這同樣適用于任何未被指派admin角色的用戶?,F(xiàn)在,我們可以在主應(yīng)用程序菜單添加admin局部的。這樣,擁有管路員權(quán)限的用戶不需要記住的是繁瑣的URL就可以進(jìn)入到管理控制臺(tái)。作為一個(gè)提示,我們的主應(yīng)用程序菜單位于應(yīng)用主題的默認(rèn)布局文件中,/themes/new/views/layouts/main.php。翻開這個(gè)文件,并且作如下修改:PHP代碼:<divid="mainmenu"><?php$this->widget('zii.widgets.CMenu',array('items'=>array(array('label'=>'Projects','url'=>array('/project')),array('label'=>'About','url'=>array('/site/page','view'=>'about')),array('label'=>'Contact','url'=>array('/site/contact')),array('label'=>'Admin','url'=>array('/admin/default/inde*'),'visible'=>Yii::app()->authManager->checkAccess("admin",Yii::app()->user->id)),array('label'=>'Login','url'=>array('/site/login'),'visible'=>Yii::app()->user->isGuest),array('label'=>'Logout('.Yii::app()->user->name.')','url'=>array('/site/logout'),'visible'=>!Yii::app()->user->isGuest)),));?></div><!--mainmenu-->現(xiàn)在,使用有admin權(quán)限的用戶登錄應(yīng)用程序,我們將會(huì)看到在頂部的導(dǎo)航中有一個(gè)新的,它將帶我們到站點(diǎn)新添加的admin局部。12.8添加系統(tǒng)級(jí)的信息由于一個(gè)模塊可以被認(rèn)為是一個(gè)小型應(yīng)用程序,因此,向模塊添加功能和向主程序添加功能具有一樣的步驟。讓我們只為管理員添加一些新功能;這個(gè)功能可以使他們第一次登錄應(yīng)用程序時(shí)向用戶顯示的系統(tǒng)級(jí)信息。12.9創(chuàng)立數(shù)據(jù)庫(kù)表和創(chuàng)立新功能一樣,我們需要一個(gè)地方來放置我們的數(shù)據(jù)。我們需要?jiǎng)?chuàng)立一個(gè)新的表來存儲(chǔ)我們系統(tǒng)級(jí)的信息。對(duì)于我們而言,我們可以簡(jiǎn)單一點(diǎn)。下面是我們數(shù)據(jù)表表的定義:SQL代碼:CREATETABLE`tbl_sys_message`(`id`INTEGERNOTNULLPRIMARYKEYAUTO_INCREMENT,`message`TE*TNOTNULL,`create_time`DATETIME,`create_user_id`INTEGER,`update_time`DATETIME,`update_user_id`INTEGER)在主要的trackstar_dev和我們的trackstar_test數(shù)據(jù)庫(kù)中都創(chuàng)立這個(gè)新表。12.10創(chuàng)立模型和CRUD腳手架當(dāng)表建立好以后,下一步就是使用Gii代碼生成器來建立模型類了。我們將首先使用ModelGenerator來創(chuàng)立模型類,然后用CrudGenerator創(chuàng)立腳手架來與該模型快速互動(dòng)。接下來,引導(dǎo)Gii工具表單來創(chuàng)立一個(gè)新的模型。這一次,我們是在模塊內(nèi)容中做的,我們需要明確指定模型的路徑。用下面的圖中所描述的值填寫表單〔當(dāng)然,你的CodeTemplate路徑值應(yīng)該是具體到您的本地設(shè)置〕:現(xiàn)在,我們可以用一樣的方式創(chuàng)立的CRUD腳手架。同樣的,以前我們所做的與我們現(xiàn)在正在做的之間的唯一的區(qū)別在于模型類的位置是在admin模塊中。從Gii工具選擇CrudGenerator選項(xiàng)后,按照如以下列圖填寫ModelClass和ControllerID:這里要注意一點(diǎn),我們的模型類是在admin模塊之中的,我們的控制類以及所有其他與這個(gè)代碼生成有關(guān)的文件也應(yīng)被放置在管理模塊中。通過點(diǎn)擊Preview按鈕后點(diǎn)擊Generate按鈕完成文件創(chuàng)立。以下列圖是所有被創(chuàng)立的文件列表:12.11將添加到我們的新功能讓我們?cè)谥鱝dmin局部導(dǎo)航內(nèi)添加一個(gè)新的菜單項(xiàng)到我們新建的消息功能。翻開含有我們的主菜單導(dǎo)航的文件,/protected/modules/admin/views/layouts/main.php,并將在menu不見添加以下數(shù)組項(xiàng):array('label'=>'SystemMessages,'url'=>array('/admin/sysMessage/inde*')),由于為新的系統(tǒng)消息功能自動(dòng)創(chuàng)立controller和view文件使用了2列布局文件,我們可以做以下兩件事之一:我們可以改變controller文件讓它使用我們現(xiàn)有的單個(gè)列布局文件,或者我們可以新增2列的布局文件到我們的admin模塊。后面的會(huì)很容易做到,也會(huì)更好看,因?yàn)樗械膙iew文件都被設(shè)計(jì)成擁有一個(gè)自菜單項(xiàng),里面存放了所有crud功能的連接,而該菜單項(xiàng)被放在右邊的一列中。下面是我們所要做的步驟:1.從主應(yīng)用程序中復(fù)制2列布局到admin模塊:即復(fù)制/protectediews/layouts/column2.php和/protected/modules/admin./views/layouts/column2.php。2.刪除新復(fù)制的column2.php文件中的第一行上的beginContent()方法的輸入內(nèi)容/layouts/main。3.修改SysMessage()模型類,使之繼承自TrackstarActiveRecord(如果你還記得,這將添加代碼自動(dòng)更新create_time/user和update_time/user屬性)。更新SysMessageController控制器類使用新的位于模塊文件內(nèi)的column2.php布局文件,而不是主應(yīng)用程序的。自動(dòng)生成的代碼中$layout='application.views.layouts.column2',但我們需要的修改$layout='column2'。4.由于我們繼承自TrackstarActiveRecord,我們可以刪除在自動(dòng)生成系統(tǒng)消息創(chuàng)立的窗體中不必要的字段和模型的類,同時(shí)移除與之工程的模型類中的rules。在SysMessage::rules()方法中移除一下內(nèi)容:array('create_user,update_user,'numerical,'integerOnly'=>true)還有array('create_time,update_time,'safe')。最后一步不是必需的,但它的好處是只驗(yàn)證這些用戶可以輸入字段規(guī)則的習(xí)慣。最后一個(gè)需要修改的是,我們應(yīng)該是更新我們簡(jiǎn)單的規(guī)則,來實(shí)現(xiàn)只有admin角色中的用戶可以這個(gè)方法的需求。這也是為什么我們?cè)贏dminModule::beforeControllerAction()方法中使用RBAC模型的原因。我們實(shí)際上可以將accessRules完全刪除。但是,我們要通過更新它以實(shí)現(xiàn)要求,所以你在下面可以看到,如何使用規(guī)則的方法。使用以下的代碼替換SysMessageController::accessRules()方法:PHP代碼:publicfunctionaccessRules(){returnarray(array('allow',//只允許用戶有“admin〞的角色才可以進(jìn)入行動(dòng)'actions'=>array('inde*','view','create','update','admin','delete'),'roles'=>array('admin'),),array('deny',//否認(rèn)所有用戶'users'=>array('*'),),);}好了,都改完以后,如果使用localhost/trackstar/admin/sysMessage/create新消息輸入表單,我們將看到類似以下列圖的界在表單中填寫HellowUsers!Thisisyouradminspeaking…后點(diǎn)擊Submit按鈕。應(yīng)用程序?qū)⒅囟ㄏ虻筋愃葡旅娴男陆ㄏ⒌那鍐雾?yè)面:12.12向全體用戶顯示消息現(xiàn)在我們已經(jīng)將消息存入在我們的系統(tǒng),我們將展示給在應(yīng)用程序的主頁(yè)的用戶。12.13在應(yīng)用程序級(jí)導(dǎo)入新模型類為了在應(yīng)用程序中隨時(shí)我們新創(chuàng)立的模型,我們應(yīng)當(dāng)將其配置為應(yīng)用程序的一局部。修改protected/config/main.php文件內(nèi)容如下:PHP代碼://半自動(dòng)生成模型和組件類'import'=>array('application.models.*','application.ponents.*','application.modules.admin.models.*',),12.14選擇最近更新的消息我們將限制只顯示一條消息,并且會(huì)根據(jù)表中的update_time來選擇。我們希望把它添加到主工程列表頁(yè)面,所以我們需要修改ProjectController::actionInde*()方法。通過添加以下代碼來改變?cè)摲椒ǎ篜HP代碼:publicfunctionactionInde*()

{

$dataProvider=newCActiveDataProvider('Project');Yii::app()->clientScript->registerLinkTag('alternate','application/rss+*ml',$this->createUrl('ment/feed'));//基于update_time獲得系統(tǒng)最新顯示的消息

$sysMessage=SysMessage::model()->find(array(

'order'=>'t.update_timeDESC',));if($sysMessage!=null)

$message=$sysMessage->message;else

$message=null;$this->render('inde*',array(

'dataProvider'=>$dataProvider,'sysMessage'=>$message,));

}現(xiàn)在,我們需要改變我們的視圖文件來顯示新內(nèi)容。只需要在views/project/inde*.php的<h1>Projects</h1>上添加以下代碼:PHP代碼:<?phpif($sysMessage!=null):?>

<divclass="sys-message">

<?phpecho$sysMessage;?>

</div>

<?phpendif;?>現(xiàn)在我們只要我們的工程列表頁(yè)面〔即我們的應(yīng)用程序主頁(yè)〕,就會(huì)看到如以下列圖所顯示的內(nèi)容:12.15添加少許的設(shè)計(jì)調(diào)整好了,這完成了我們想要做的,但是對(duì)用戶來說,這條消息并不是最完美的,我們可以在我們的css主文件中〔/themes/new/css/main.css〕添加一點(diǎn)片段來做一點(diǎn)修改:CSS代碼:div.sys-messa

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論