純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" target="_blank" rel="external nofollow" 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(" target="_blank" rel="external nofollow" 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);
轉載于:https://my.oschina.net/u/2555277/blog/1615387