比较合理的做法其实是分成两个框架来布署;然而这样说法也太绝对。
事实上是针对不同系统,应采用不同的方法。如为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’参数,用于标识登陆用户类型。这里是急中生智的办法,希望大侠们提出更好的方法。
汇报完毕。坐等挨喷。
转载请注明:XAMPP中文组官网 » yii 前后台分离及登陆验证