yii 前后台分离及登陆验证

2019独角兽企业重金招聘Python工程师标准>>> hot3.png


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

事实上是针对不同系统,应采用不同的方法。如为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'=>'webmaster@example.com',  

  97.                         'loginType'=>'',  

  98.                         ),  

  99.                 );  


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’参数,用于标识登陆用户类型。这里是急中生智的办法,希望大侠们提出更好的方法。


汇报完毕。坐等挨喷。




转载于:https://my.oschina.net/yonghan/blog/533174

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/286624.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

双谷人才财务管理(序)

IT是一个迅速发展的行业&#xff0c;教育是一个良心的行业&#xff0c;两者交集——IT培训&#xff0c;在整个市场中占有一个不可或缺的地位。好多大学生&#xff0c;抱怨找不到工作&#xff1b;好多企业找不到合适的程序员&#xff0c;这几年这个问题越来越严重。。。。于是IT…

Android之打开手机系统相册

1、需求 打开系统相册&#xff0c;获取图片进行扫描操作 2、代码实现 Intent pickIntent new Intent(Intent.ACTION_PICK,MediaStore.Images.Media.EXTERNAL_CONTENT_URI);pickIntent.setDataAndType(MediaStore.Images.Media.EXTERNAL_CONTENT_URI, "image/*");Ca…

Kibana

2019独角兽企业重金招聘Python工程师标准>>> Kibana是一个基于浏览器页面的Elasticsearch前端展示工具。Kibana全部使用HTML语言和Javascript编写的&#xff0c;查询语法是基于Lucene的查询语法。允许布尔运算符、通配符和字段筛选。注意关键字要大写 全文搜索 在搜…

电脑QQ能登上,网页打不开的解决办法

打开360卫士&#xff0c;在功能大全里选择网络优化&#xff0c;断网急救箱。 可以看到DNS服务异常、浏览器配置异常&#xff0c;点击立即修复。

个人黑名单 抄袭耻辱墙

抄袭耻辱墙 博主抄袭文原文我爱Python数据挖掘https://blog.csdn.net/weixin_38037405/article/details/125862095https://blog.csdn.net/A757291228/article/details/117464313黄埔数据分析https://blog.csdn.net/weixin_39060517/article/details/118024847https://blog.csdn…

快速掌握 ASP.NET 身份认证框架 Identity(一)

推荐关注「码侠江湖」加星标&#xff0c;时刻不忘江湖事ASP.NET Core 内置了一个强大的身份认证框架 Identity&#xff0c;掌握它可以让我们快速开发高安全的身份认证功能&#xff0c;不仅如此&#xff0c;它还是一个基于数据库的用户管理系统&#xff0c;其中包含了大量的辅助…

浅谈大型web系统架构

动态应用&#xff0c;是相对于网站静态内容而言&#xff0c;是指以c/c、php、Java、perl、.net等服务器端语言开发的网络应用软件&#xff0c;比如论坛、网络相册、交友、BLOG等常见应用。动态应用系统通常与数据库系统、缓存系统、分布式存储系统等密不可分。   大型动态应用…

Android之webview长按超链接类型获取链接文字及url、长按图片链接类型分别获取图片和链接的url

1 、需求 webview长按超链接获取链接文字及urlwebview长按图片链接类型获分别获取图片和链接的url 2、解决办法 1)、设置webview的OnLongClickListener事件,关键代码如下 companion object {const val LINK_TYPE = 1const val IMAGE_LINK_TYPE = 2}var mHandler = object :…

PostgreSQL 统计信息pg_statistic格式及导入导出dump_stat - 兼容Oracle

标签 PostgreSQL , dump_stat , 统计信息 , 导出导入 背景 《PostgreSQL 规格评估 - 微观、宏观、精准 多视角估算数据库性能(选型、做预算不求人)》 EXPLAIN是PG数据库用于输出SQL执行计划的语法&#xff0c; 1、生成的执行计划中包含COST一项。 如果校准了成本因子&#xff0…

PHP: 手把手编写自己的 MVC 框架实例教程

1 什么是MVC MVC模式&#xff08;Model-View-Controller&#xff09;是软件工程中的一种软件架构模式&#xff0c;把软件系统分为三个基本部分&#xff1a;模型&#xff08;Model&#xff09;、视图&#xff08;View&#xff09;和控制器&#xff08;Controller&#xff09;。 …

freemarker 异常处理

SSH2处理方案&#xff1a; freemarker文件如果出错&#xff0c;网站的前台页面会报出很明显的错误-焦黄的背景&#xff0c;血红的文字&#xff0c;很不利于用户体验的。如何修改这个问题呢&#xff1f;首先需要在struts.xml配置文件里添加下面一行代码&#xff1a; 1<consta…

ArcGIS10.8按属性选择中根据关键字like模糊查询方法总结

在实际工作中,通常需要按照某一个或某几个关键字进行模糊查询,已到达快速、准确、高效查询的目的。在ArcGIS中是通过SQL语句,利用关键字like来实现的。例如我们可以借助like快速查询满足以某一个关键字开头,以某一个关键字结尾,或者包含某一个关键字的结果。 在ArcGIS中,…

2021年复盘总结发现了C站博主缺少的赚钱之路

一、 我2021年的六大Flag 其实最开始我是不打算年终总结的&#xff0c;因为2021年我的十大Flag都没有完成&#xff0c;我说出来可能你会嘲笑我&#xff0c;所以我打算还是说出来吧。 这六大Flag如下&#xff1a; C站百万粉百篇实战文其他自媒体平台十万粉公众号一万粉财务自…

五大微信小程序开发IDE深度评测

微信小程序已经内测有一段时间了&#xff0c;笔者本着好奇加学习的心态写了几个小demo&#xff0c;虽然在MINA框架上并没有遇到太多的坑&#xff0c;但官方开发工具实在不敢恭维。 api提示不全&#xff0c;要一个个查api啊&#xff0c;写代码超级慢啊 很多必备的快捷键都没有&…

Maui的学习之路(2)--Mac窗体设置

Maui的学习之路今天是我开启Maui学习之路的第二天&#xff0c;我不是很高兴又能水一篇文章&#xff0c;我只能说这文章真好水。话不多说&#xff0c;我们进入正题&#xff0c;昨天解决了Windows下TitleBar以及窗体大小的问题&#xff0c;今天同样的问题&#xff0c;在Mac上又要…

Android之靠谱的Activity从底部向上弹出,finish从顶部向下消失(不黑屏)

1 、需求 要求Activity从底部向上弹出,finish从顶部向下消失(不黑屏) 2、解决办法 准备3个动画xml文件 app_bottom_in.xml <?xml version="1.0" encoding="utf-8"?> <set xmlns:android="http://schemas.android.com/apk/res/andro…

ArcGIS10.8中如何获取线状、面状数据的折点,并计算折点坐标?

如下图所示为面状要素,ArcGIS10.8中如何获取线状和面状数据的折点(起点、终点、中点、端点),并计算折点的坐标(X,Y,Z,M)? 下图所示为线状(Polyline)和面状(Polygon)要素的起点、终点和折点的示意图。

Linux命令大总结(早期学习时的笔记)

Linux命令大总结 ------------------------------------------------------------------------------------ 开机自启动命令行模式和图形模式&#xff1a; vi /etc/inittab 改3为命令行模式 改5为图形模式 开关机命令&#xff1a; 关机 init 0 shtudown -h now 重启…

[转]Cordova + Ionic in Visual Studio - 101 Tutorial [Part I]

本文转自&#xff1a;http://binarylies.ghost.io/cordova-ionic-in-visual-studio/ Hi everyone, I thought about lending a hand to all the people that are, as I have been recently, exploring Cordova and all its features for the first time. For the ones still tr…

【转】学会这13个原则写UI界面文案,用户才能秒懂

原文网址&#xff1a;http://www.niaogebiji.com/article-12011-1.html 摘要: 首先&#xff0c;在写UI文案之前&#xff0c;为了理清思路&#xff0c;要先搞清楚三个问题&#xff1a;我&#xff08;设计师&#xff09;想让用户做什么&#xff1f; – 我写文案的目的为什么要让用…