2019獨角獸企業重金招聘Python工程師標準>>>
比較合理的做法其實是分成兩個框架來布署;然而這樣說法也太絕對。
事實上是針對不同系統,應采用不同的方法。如為CMS系統,則不需很復雜的權限管理,但如果有管理員與會員之分,系統又有很多設置操作,則需要前后臺分離,并設置相應的權限管理。
大型的系統或是為安全因素考慮,則是布署成兩個目錄。
但一般的小型應用則不需要這樣。
按照官方的cookebook有兩種方法可選:一是modules,二是兩個config。
modules的方法可參照boylee的教程,google yiigo即可。
這里是參照第二種方法來做的。
論壇上有人建議做一個主config.php然后使用CMap::mergeArray()將兩個配置文件合并,好處是省事,配置方便。
但通常,前后臺各有其配置。我這里采用了官方的方法,即前后臺各使一個config,并不合并。便宜之處是前后臺皆可使用gii(gii是yii的一大特色,工欲善其事,必先利其器,如果丟掉這么好的工具不用,有些可惜),另外便于操作,即便是新手也很容易配置。
現在將實現方法向大家匯報如下:
具體實現步驟:
一,建立入口
首先使用yiic 建立項目;其次,修改webroot 下的index-test.php,將其命名為admin.php(根據項目改名,此處只舉例而已,不要認真,認真你就輸了)。
修改admin.php
[php]?view plaincopyprint?
/**?
??????????????????????????????*?This?is?the?bootstrap?file?for?test?application.?
??????????????????????????????*?This?file?should?be?removed?when?the?application?is?deployed?for?production.?
??????????????????????????????*/??
??
//?change?the?following?paths?if?necessary??
$yii=dirname(__FILE__).'/../yii/framework/yii.php';??
$config=dirname(__FILE__).'/protected/admin/config/main.php';??
??
//?remove?the?following?line?when?in?production?mode??
defined('YII_DEBUG')?or?define('YII_DEBUG',true);??
??
require_once($yii);??
Yii::createWebApplication($config)->run();??
ps:因為我將yii移到了項目之外,所以配置請以具體環境為準,此例僅做參照。
二、建立配置文件
在protected目錄下建立admin目錄,然后將protected下的config里的main.pphp拷貝過來;在admin目錄依次建立controllers,models,views目錄;然后將protected下的site相關目錄考貝過來,放在相應層次。參考主目錄結構建立如下:
[html]?view plaincopyprint?
admin??
|--?config??
|???`--?main.php??
|--?controllers??
|???`--?SiteController.php??
|--?models??
|???|--?ContactForm.php??
|???|--?LoginForm.php??
|???`--?Operator.php??
|--?runtime??
|???|--??
`--?views??
|--?layouts??
|???|--?column1.php??
|???|--?column2.php??
|???`--?main.php??
`--?site??
|--?contact.php??
|--?error.php??
|--?index.php??
|--?login.php??
`--?pages??
`--?about.php??
ps:對于類linux系統請不要忘記修改相應的目錄、文件權限。
三、修改配置admin/config/main.php參考如下:
[php]?view plaincopyprint?
<?php??
??
//?這里使用了一個擴展,故定義了一個別名??
Yii::setPathOfAlias('ext',?dirname(__FILE__).'/../extensions');??
//?下面是分離前后臺需要增加的??
$backend=dirname(dirname(__FILE__));??
$frontend=dirname($backend);??
Yii::setPathOfAlias('backend',?$backend);??
??
//?下面是通用配置??
return?array(??
????????<span?style="color:#ff6666;">//??著重注意修改的地方??
????????'basePath'?=>?$frontend,??
????????'controllerPath'?=>?$backend.'/controllers',??
????????'viewPath'?=>?$backend.'/views',??
????????'runtimePath'?=>?$backend.'/runtime',</span>??
????????'name'=>'后臺管理程序',??
??
????????//?preloading?'log'?component??
????????'preload'=>array('log'),??
??
????????//?autoloading?model?and?component?classes??
????????'import'=>array(??
????????????'application.models.*',??
????????????'application.components.*',??
????????????<span?style="color:#ff6666;">?//??著重注意修改的地方??
????????????'backend.models.*',??
????????????'backend.components.*',</span>??
????????????'ext.*',ext),??
??
????????'modules'=>array(??
????????????//??Gii?tool??
????????????'gii'=>array(??
????????????????'class'=>'system.gii.GiiModule',??
????????????????'password'=>'password',??
????????????????'generatorPaths'=>array(??
????????????????????'ext.dwz.gii.module.templates.dwz.module',??
????????????????????),???
????????????????//?If?removed,?Gii?defaults?to?localhost?only.?Edit?carefully?to?taste.??
????????????????'ipFilters'=>array('127.0.0.1','::1'),??
????????????????),??
??
????????????),??
??
????????//?application?components??
????????'components'=>array(??
????????????????'user'=>array(??
????????????????????//?enable?cookie-based?authentication??
????????????????????'allowAutoLogin'=>true,??
????????????????????),??
????????????????//?uncomment?the?following?to?enable?URLs?in?path-format??
????????????????/*?
???????????????????'urlManager'=>array(?
???????????????????'urlFormat'=>'path',?
???????????????????'rules'=>array(?
???????????????????'<controller:\w+>/<id:\d+>'=>'<controller>/view',?
???????????????????'<controller:\w+>/<action:\w+>/<id:\d+>'=>'<controller>/<action>',?
???????????????????'<controller:\w+>/<action:\w+>'=>'<controller>/<action>',?
???????????????????),?
???????????????????),?
?????????????????*/??
??
????????????????//???MySQL?database??
??
????????????????'db'=>array(??
????????????????????'connectionString'?=>?'mysql:host=localhost;dbname=dbname',??
????????????????????'emulatePrepare'?=>?true,??
????????????????????'username'?=>?'root',??
????????????????????'password'?=>?'',??
????????????????????'charset'?=>?'utf8',??
????????????????????),??
??
????????????????'errorHandler'=>array(??
????????????????????????//?use?'site/error'?action?to?display?errors??
????????????????????????'errorAction'=>'site/error',??
????????????????????????),??
????????????????'log'=>array(??
????????????????????????'class'=>'CLogRouter',??
????????????????????????'routes'=>array(??
????????????????????????????array(??
????????????????????????????????'class'=>'CFileLogRoute',??
????????????????????????????????'levels'=>'error,?warning',??
????????????????????????????????),??
????????????????????????????//?uncomment?the?following?to?show?log?messages?on?web?pages??
????????????????????????????array(??
????????????????????????????????'class'=>'CWebLogRoute',??
????????????????????????????????),??
????????????????????????????),??
????????????????????????),??
????????????????),??
??
????????????????//?application-level?parameters?that?can?be?accessed??
????????????????//?using?Yii::app()->params['paramName']??
????????????????'params'=>array(??
????????????????????????//?this?is?used?in?contact?page??
????????????????????????'adminEmail'=>'webmaster@example.com',??
????????????????????????'loginType'=>'',??
????????????????????????),??
????????????????);??
ps:請不要照抄,跟據實際情況調整,另注意web頁面的轉義。另,注意著重修改的地方。
四、生成后臺model
因為import里導入了前后臺的models因此,在后臺可以使用前后臺所有models。
下面利用yii神器GII,http://domain/admin.php?r=gii/model
請注意下圖:
這里可以選擇要生成的models的位置,默認的是applications.models。其實,一個gii也可以生成前后臺models但用起來稍閑麻煩。
五、實現前后臺登陸
驗證部分不說了,修改UserIdentity.php和用戶模型。具體可參考這里
主要的是在config/main.php里的params里增加了‘logintype’參數,用于標識登陸用戶類型。這里是急中生智的辦法,希望大俠們提出更好的方法。
匯報完畢。坐等挨噴。