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

/**
							  * 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相关目录考贝过来,放在相应层次。参考主目录结构建立如下:

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

// 这里使用了一个扩展,故定义了一个别名
Yii::setPathOfAlias('ext', dirname(__FILE__).'/../extensions');
// 下面是分离前后台需要增加的
$backend=dirname(dirname(__FILE__));
$frontend=dirname($backend);
Yii::setPathOfAlias('backend', $backend);

// 下面是通用配置
return array(
		//  着重注意修改的地方
		'basePath' => $frontend,
		'controllerPath' => $backend.'/controllers',
		'viewPath' => $backend.'/views',
		'runtimePath' => $backend.'/runtime',
		'name'=>'后台管理程序',

		// preloading 'log' component
		'preload'=>array('log'),

		// autoloading model and component classes
		'import'=>array(
			'application.models.*',
			'application.components.*',
			 //  着重注意修改的地方
			'backend.models.*',
			'backend.components.*',
			'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’参数,用于标识登陆用户类型。这里是急中生智的办法,希望大侠们提出更好的方法。


汇报完毕。坐等挨喷。








  • 1
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值