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]

’网站后台管理系统’, ‘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__)).DIRECTORY_SEPARATOR.’views’.DIRECTORY_SEPARATOR.’layouts’.DIRECTORY_SEPARATOR, ); if(!function_exists(‘w3_array_union_recursive’)) { /** * 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_array_union_recursive($array1,$array2) { $retval=$array1+$array2; foreach($array1 as $key=>$value) { if(is_array($array1[$key]) && is_array($array2[$key])) $retval[$key]=w3_array_union_recursive($array1[$key],$array2[$key]); } return $retval; } } return w3_array_union_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 && !in_array($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]<?php class User extends CActiveRecord{ public static function model(CLASS){ return parent::model($className)