yii 前后台分离及登陆验证


比较合理的做法其实是分成两个框架来布署;然而这样说法也太绝对。

事实上是针对不同系统,应采用不同的方法。如为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?

  1. /** 

  2.                               * This is the bootstrap file for test application. 

  3.                               * This file should be removed when the application is deployed for production. 

  4.                               */  

  5.   

  6. // change the following paths if necessary  

  7. $yii=dirname(__FILE__).'/../yii/framework/yii.php';  

  8. $config=dirname(__FILE__).'/protected/admin/config/main.php';  

  9.   

  10. // remove the following line when in production mode  

  11. defined('YII_DEBUG'or define('YII_DEBUG',true);  

  12.   

  13. require_once($yii);  

  14. Yii::createWebApplication($config)->run();  


ps:因为我将yii移到了项目之外,所以配置请以具体环境为准,此例仅做参照。

二、建立配置文件

在protected目录下建立admin目录,然后将protected下的config里的main.pphp拷贝过来;在admin目录依次建立controllers,models,views目录;然后将protected下的site相关目录考贝过来,放在相应层次。参考主目录结构建立如下:

[html] view plaincopyprint?

  1. admin  

  2. |-- config  

  3. |   `-- main.php  

  4. |-- controllers  

  5. |   `-- SiteController.php  

  6. |-- models  

  7. |   |-- ContactForm.php  

  8. |   |-- LoginForm.php  

  9. |   `-- Operator.php  

  10. |-- runtime  

  11. |   |--  

  12. `-- views  

  13. |-- layouts  

  14. |   |-- column1.php  

  15. |   |-- column2.php  

  16. |   `-- main.php  

  17. `-- site  

  18. |-- contact.php  

  19. |-- error.php  

  20. |-- index.php  

  21. |-- login.php  

  22. `-- pages  

  23. `-- about.php  


ps:对于类linux系统请不要忘记修改相应的目录、文件权限。

三、修改配置admin/config/main.php参考如下:

[php] view plaincopyprint?

  1. <?php  

  2.   

  3. // 这里使用了一个扩展,故定义了一个别名  

  4. Yii::setPathOfAlias('ext', dirname(__FILE__).'/../extensions');  

  5. // 下面是分离前后台需要增加的  

  6. $backend=dirname(dirname(__FILE__));  

  7. $frontend=dirname($backend);  

  8. Yii::setPathOfAlias('backend'$backend);  

  9.   

  10. // 下面是通用配置  

  11. return array(  

  12.         <span style="color:#ff6666;">//  着重注意修改的地方  

  13.         'basePath' => $frontend,  

  14.         'controllerPath' => $backend.'/controllers',  

  15.         'viewPath' => $backend.'/views',  

  16.         'runtimePath' => $backend.'/runtime',</span>  

  17.         'name'=>'后台管理程序',  

  18.   

  19.         // preloading 'log' component  

  20.         'preload'=>array('log'),  

  21.   

  22.         // autoloading model and component classes  

  23.         'import'=>array(  

  24.             'application.models.*',  

  25.             'application.components.*',  

  26.             <span style="color:#ff6666;"//  着重注意修改的地方  

  27.             'backend.models.*',  

  28.             'backend.components.*',</span>  

  29.             'ext.*',ext),  

  30.   

  31.         'modules'=>array(  

  32.             //  Gii tool  

  33.             'gii'=>array(  

  34.                 'class'=>'system.gii.GiiModule',  

  35.                 'password'=>'password',  

  36.                 'generatorPaths'=>array(  

  37.                     'ext.dwz.gii.module.templates.dwz.module',  

  38.                     ),   

  39.                 // If removed, Gii defaults to localhost only. Edit carefully to taste.  

  40.                 'ipFilters'=>array('127.0.0.1','::1'),  

  41.                 ),  

  42.   

  43.             ),  

  44.   

  45.         // application components  

  46.         'components'=>array(  

  47.                 'user'=>array(  

  48.                     // enable cookie-based authentication  

  49.                     'allowAutoLogin'=>true,  

  50.                     ),  

  51.                 // uncomment the following to enable URLs in path-format  

  52.                 /* 

  53.                    'urlManager'=>array( 

  54.                    'urlFormat'=>'path', 

  55.                    'rules'=>array( 

  56.                    '<controller:\w+>/<id:\d+>'=>'<controller>/view', 

  57.                    '<controller:\w+>/<action:\w+>/<id:\d+>'=>'<controller>/<action>', 

  58.                    '<controller:\w+>/<action:\w+>'=>'<controller>/<action>', 

  59.                    ), 

  60.                    ), 

  61.                  */  

  62.   

  63.                 //   MySQL database  

  64.   

  65.                 'db'=>array(  

  66.                     'connectionString' => 'mysql:host=localhost;dbname=dbname',  

  67.                     'emulatePrepare' => true,  

  68.                     'username' => 'root',  

  69.                     'password' => '',  

  70.                     'charset' => 'utf8',  

  71.                     ),  

  72.   

  73.                 'errorHandler'=>array(  

  74.                         // use 'site/error' action to display errors  

  75.                         'errorAction'=>'site/error',  

  76.                         ),  

  77.                 'log'=>array(  

  78.                         'class'=>'CLogRouter',  

  79.                         'routes'=>array(  

  80.                             array(  

  81.                                 'class'=>'CFileLogRoute',  

  82.                                 'levels'=>'error, warning',  

  83.                                 ),  

  84.                             // uncomment the following to show log messages on web pages  

  85.                             array(  

  86.                                 'class'=>'CWebLogRoute',  

  87.                                 ),  

  88.                             ),  

  89.                         ),  

  90.                 ),  

  91.   

  92.                 // application-level parameters that can be accessed  

  93.                 // using Yii::app()->params['paramName']  

  94.                 'params'=>array(  

  95.                         // this is used in contact page  

  96.                         'adminEmail'=>'[email protected]',  

  97.                         'loginType'=>'',  

  98.                         ),  

  99.                 );  


ps:请不要照抄,跟据实际情况调整,另注意web页面的转义。另,注意着重修改的地方。

四、生成后台model

因为import里导入了前后台的models因此,在后台可以使用前后台所有models。

下面利用yii神器GII,http://domain/admin.php?r=gii/model

请注意下图:

yii 前后台分离及登陆验证_第1张图片

这里可以选择要生成的models的位置,默认的是applications.models。其实,一个gii也可以生成前后台models但用起来稍闲麻烦。

五、实现前后台登陆

验证部分不说了,修改UserIdentity.php和用户模型。具体可参考这里

主要的是在config/main.php里的params里增加了‘logintype’参数,用于标识登陆用户类型。这里是急中生智的办法,希望大侠们提出更好的方法。


汇报完毕。坐等挨喷。




你可能感兴趣的:(yii 前后台分离及登陆验证)