Yii框架学习笔记(三)将后台模板整合到框架

2014-04-12 18:23:45

将后台模板整合到框架中有两种方法,一种是两个入口文件,另一种可以把后台做为一个模块。

一,两个入口文件方法:
项目目录结构(图):

前后台引导文件分别如下:
index.php:

[php]require(‘path/to/yii.php’);
Yii::app()->createWebApplication(‘protected/config/main.php’)->run();[/php]

admin.php:

[php]require(‘path/to/yii.php’);
Yii::app()->createWebApplication(‘protected/admin/config/main.php’)->run();[/php]

这样配置比较麻烦一些,我们可以采用覆盖的方法,参考了一个贴子的方法,我又做了一些修改.
protected/admin/config/main.php的代码如下:

[php]
$backend=dirname(dirname(FILE));
$frontend=dirname($backend);
Yii::setPathOfAlias(‘backend’, $backend);

$frontendArray=require($frontend.’/config/main.php’);

$backendArray=array(
‘name’=>’网站后台管理系统’,
‘basePath’ => $frontend,
‘controllerPath’ => $backend.’/controllers’,
‘viewPath’ => $backend.’/views’,
‘runtimePath’ => $backend.’/runtime’,

// autoloading model and component classes
‘import’=>array(
‘application.models.’,
‘application.components.
’,
‘application.extensions.’,
‘application.extensions.nestedset.
’,
‘backend.models.’,
‘backend.components.
’, //这里的先后顺序一定要搞清
),
‘components’=>array(
‘user’=>array(
// enable cookie-based authentication
‘allowAutoLogin’=>true,
),
),

// main is the default layout
//’layout’=>’main’,
// alternate layoutPath
‘layoutPath’=>dirname(dirname(FILE)).DIRECTORYSEPARATOR.’views’.DIRECTORYSEPARATOR.’layouts’.DIRECTORYSEPARATOR,
);
if(!function
exists(‘w3arrayunionrecursive’))
{
/**
* This function does similar work to $array1+$array2,
* except that this union is applied recursively.
* @param array $array1 – more important array
* @param array $array2 – values of this array get overwritten
* @return array
*/
function w3
arrayunionrecursive($array1,$array2)
{
$retval=$array1+$array2;
foreach($array1 as $key=>$value)
{
if(isarray($array1[$key]) && isarray($array2[$key]))
$retval[$key]=w3arrayunion_recursive($array1[$key],$array2[$key]);
}
return $retval;
}
}

return w3arrayunion_recursive($backendArray,$frontendArray);
[/php]

这里我们的model是公用的,controller和view是分开的,我们还可以通过命令行对后台进行model和crud,方法如下:

[php]

yiic shell path/to/site/admin.php
model Article
crud Article
[/php]

这样后台对应的controller和view就生成了!如果只对后台的变量进行配置的话,只需要修改protected/admin下的配置文件就可以了!

二,把后台做为一个模块方法:
第一步:用GII会成一个admin的模块;
第二步:打开(模块名+Module.php)的文件,我这里是oldweeklyadminModule.php文件进行编辑里面有一个OldweeklyadminModule的类继承于CWebModule首先我们调用init的方法:

[php]

public function init()
{
parent::init();//这步是调用main.php里的配置文件
//当Module创建时这个方法就会被调用
// 我们可以修改代码来定制Module

// import the module-level models and components
$this->setImport(array(
‘oldweeklyadmin.models.’,
‘oldweeklyadmin.components.
’,
));
//这里重写父类里的组件
//如有需要还可以参考API添加相应组件
Yii::app()->setComponents(array(
‘errorHandler’=>array(
‘class’=>’CErrorHandler’,
‘errorAction’=>’oldweeklyadmin/default/error’,
),
‘user’=>array(
‘class’=>’CWebUser’,
‘stateKeyPrefix’=>’oldweeklyadmin’,
‘loginUrl’=>Yii::app()->createUrl(‘oldweeklyadmin/default/login’),
),
), false);
$this->generatorPaths[]=’oldweeklyadmin.generators’;
$this->controllerMap=$this->findGenerators();
}
如果进入module的时候要进行密码验证并且和前台登录分开
就要进行设置对执行的动作进行识别
public function beforeControllerAction($controller, $action)
{
if(parent::beforeControllerAction($controller, $action))
{
$route=$controller->id.’/’.$action->id;
if(!$this->allowIp(Yii::app()->request->userHostAddress) && $route!’default/error’)
throw new CHttpException(403,"You are not allowed to access this page.");

$publicPages=array(
‘default/login’,
‘default/error’,
);
if(Yii::app()->user->isGuest && !inarray($route,$publicPages))
Yii::app()->user->loginRequired();
else
return true;
}
return false;
}
protected function allowIp($ip)
{
if(empty($this->ipFilters))
return true;
foreach($this->ipFilters as $filter)
{
if($filter=’*’ || $filter=$ip || (($pos=strpos($filter,’*’))!false && !strncmp($ip,$filter,$pos)))
return true;
}
return false;
}
设置资源文件路径
public function getAssetsUrl()
{
if($this->
assetsUrl===null)
$this->assetsUrl=Yii::app()->getAssetManager()->publish(Yii::getPathOfAlias(‘oldweeklyadmin.assets’));
return $this->
assetsUrl;
}

public function setAssetsUrl($value)
{
$this->_assetsUrl=$value;
}

[/php]

Yii框架学习笔记(二)将html前端模板整合到框架中

上一节成功将Yii框架引入,并生成了要进行的项目文件夹shop。 进入protected文件夹,开始html模板的整合之旅; protected文件夹中需要注意controller,models以及views三个文件夹,这正是MVC模式所在,将html模板与Yii框架整合的关键也在于此。其中controller是控制器,控制器中的文件可以设置class方法,然后class方法访问对应的views中的视图。 比如controller中有SiteController.php这个控制器: [php] array( ‘class’=>’CCaptchaAction’, ‘backColor’=>0xFFFFFF, ), // page action renders "static" pages stored under ‘protected/views/site/pages’ // They can be accessed via: index.php?r=site/page&view=FileName ‘page’=>array( ‘class’=>’CViewAction’, ), ); } /** * This is the default

Yii框架学习笔记(四)连接数据库

YII采用ORM(object-Relation Mapping)的设计模式进行数据库编程。 配置数据库连接 在protected/config/main.php文件中: [php]’db’=>array( ‘connectionString’=>’mysql:host=localhost;dbname=testdrive’, ’emulatePreare’=>true, ‘username’=>’root’, ‘password’=>”, ‘charset’=>’utf8’, ),[/php] 定义数据库操作类:models [php] class User extends CActiveRecord{ public static function model(CLASS){ return parent::model($className); } //静态方法model()是每一个AR类所必须的。 public function tableName(){ return ‘{{User}}’; } } ?>[/php]