纯oop框架
官网:http://www.yiiframework.com/ 中文网站:http://www.yiichina.com/
打开cmd找到yii目录里面的framework输入yiic webapp 项目名称(比如yiic webapp ../one)one就是这个项目的名称,
控制器
一、创建控制器
class IndexController extends Controller { /** * 默认方法 */ public function actionIndex() { echo 666; } }
访问 例如:http://localhost/yii-1.1.18.018a89/study/index.php?r=index/index
r是route缩写,后面第一个为控制器,第二个为方法
二、配置默认控制器
在cofig里面的main.php增加代码如下
//设置默认控制器 'defaultController' => 'Index',
视图
一、载入视图
$this->render('index');会载入布局
$this->renderPartial('index');不会载入布局,也不会加载框架自带的jquery
二、给视图分配数据
$this->render('index',$data);
三、视图处理分配的数据
<?php foreach($article as $v): ?> <li><?php echo $v->title;?></li> <?php endforeach ?>
四、布局
用render自动加载公共区域并在views/layouts下面的文件就是布局文件
位置:components/Controller.php
五、载入外部文件
<link href="<?php echo Yii::app()->request->baseUrl ?>/assets/index/css/index.css" rel="stylesheet" />
扩展自定义函数
在protected目录下建立functions.php文件
引入函数,在index.php下加入以下代码
include_once "./protected/functions.php";
通过gii创建modules
将config下main.php里modules注释打开
访问 http://localhost/yii-1.1.18.018a89/study/index.php?r=gii ,点击Module Generator,如下图
需要访问新创建的admin,需要在main.php,gii下面加入admin如下图
访问地址例如:http://localhost/yii-1.1.18.018a89/study/index.php?r=admin/index/test
小物件(widget)使用
前置条件如下:
小物件使用具体代码如下:
<?php $form = $this->beginWidget('CActiveForm') ?> <?php echo $form->textField($loginForm, 'username', array('id'=>'userName')) ?> <?php echo $form->passwordField($loginForm, 'password', array('id'=>'psd')) ?> <?php echo $form->textField($loginForm, 'captcha', array('id'=>'verify')) ?> <input type="submit" id="sub" value=""/> <!-- 验证码 --> <div class="captcha"> <?php $this->widget('CCaptcha',array('showRefreshButton'=>false,'clickableImage'=>true,'imageOptions'=>array('alt'=>'点击换图','title'=>'点击换图','style'=>'cursor:pointer'))); ?> </div> <?php $this->endWidget() ?>
<ul id="peo"> <li class="error"><?php echo $form->error($loginForm,'username') ?></li> </ul> <ul id="psd"> <li class="error"><?php echo $form->error($loginForm,'password') ?></li> </ul> <ul id="ver"> <li class="error"><?php echo $form->error($loginForm,'captcha') ?></li> </ul>
注意:小物件里面用到的名称需要在对应的model层进行定义
验证码控制器使用方法
public function actions(){ return array( 'captcha' => array( 'class' => 'system.web.widgets.captcha.CCaptchaAction', 'height' => 25, 'width' => 80, 'minLength'=> 4, 'maxLength'=> 4 ), ); }
若需要验证码变化,需要到framework/web/widgets/captcha/CCaptchaAction类里面修改核心类代码
设置验证规则
在对应的model层进行规则验证
public function rules() { return array( // username and password are required array('username', 'required', 'message'=>'用户名必须填写'), array('password', 'required', 'message'=>'密码必须填写'), // rememberMe needs to be a boolean array('rememberMe', 'boolean'), // password needs to be authenticated array('password', 'authenticate'), array('captcha', 'captcha', 'message'=>'验证码错误') ); }
数据库配置
一、配置数据库
在config下面的main.php中配置如下代码,下面配置在framework/db/CDbConnection.php中可以找到
'db'=>array( 'connectionString' => 'mysql:host=127.0.0.1;dbname=blog_test', 'emulatePrepare' => true,//pdo扩展 'username' => 'root', 'password' => '', 'charset' => 'utf8', 'tablePrefix' => 'hd_', 'enableParamLogging' => true//开启调试信息的sql语句具体值信息 ),
二、测试连接
使用var_dump(Yii::app()->db);判断是否连接数据库成功
定义模型
必须有model和tabaleName方法
<?php class User extends CActiveRecord{ public $password1; public $password2; public static function model($className = __CLASS__){ return parent::model($className); } public function tableName(){ return "{{admin}}"; } public function attributeLabels(){ return array( 'password' => '原始密码', 'password1' => '新密码', 'password2' => '确认密码' ); } public function rules(){ return array( array('password', 'required', 'message'=>'原始密码必填'), array('password', 'check_passwd'), array('password1', 'required', 'message'=>'新密码必填'), array('password2', 'required', 'message'=>'确认密码必填'), array('password2', 'compare', 'compareAttribute'=>'password1', 'message'=>'两次密码不相同'), ); } public function check_passwd(){ $userInfo = $this->find('username=:name', array(':name'=>Yii::app()->user->name)); if(md5($this->password) != $userInfo->password){ $this->addError('password', '原始密码不正确'); } } }
redirect与createUrl使用
$this->redirect(array('default/index'));
<p class="out"> <span class="out_bg">    </span>  <a href="<?php echo $this->createUrl('login/out',array("id" => 1)) ?>" target="_self">退出</a> </p>
session
一、设置和获取session
//设置session Yii::app()->session['logintime'] = time(); //获取session Yii::app()->session['logintime']
二、销毁session
//退出登录 Yii::app()->session->logout(); //清除文件 Yii::app()->session->destroy(); //销毁变量 Yii::app()->session->clear();
操作成功提示
控制器中代码如下
if($userModel->updateByPk($userInfo->uid, array('password'=>$password))){ Yii::app()->user->setFlash('success', '修改密码成功'); }
视图中代码如下
<?php if(Yii::app()->user->hasFlash('success')){ echo Yii::app()->user->getFlash('success'); } ?>
打开调试模式
在main.php配置文件中,如下
'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', ), ), ),
数据操作
一、增
增的时候需要new模型
$model = new Model();
$model->attributes = $_POST['user'];
$model->save();
save方法在new模型的时候是增加,在Model::model()的时候是修改
二、查
1.查询单条
查询单条 find(),如:find("username=:name",array(":name"=>"admin"));
通过主键查询 findByPK(),如:findByPK(1);
通过sql查询 findBySql(),如:findBySql("SELECT * FROM {{admin}}");
2.查询多条
查询多条信息 findAll(),如:findAll("username=:name",array(":name"=>"admin"));
通过多个主键查询 findAllByPK(),如:findAllByPK(array(1,2));
通过sql查询多条 findAllBySql(),如:findAllBySql("SELECT * FROM {{admin}}");
三、改
$model = User::model();
$model = attributes = $_POST['user'];
$model->save();
此时save是修改
四、删
$model = User::model();
$model->deleteByPK($id);