本博客包含多个文档和书籍的翻译,但有能力者推荐阅读英文原版

Yii框架学习笔记

Coding Alan 3年前 (2016-12-12) 1182次浏览 0个评论

以下均在basic框架中进行的操作,advanced版可以参考

视图文件:

//以下common.php位于views下的layouts文件夹中,about.php位于views文件夹下面的hello文件夹中
class HelloController extends Controller{
  public $layout = 'common'; //视图文件夹中的common.php,在其中输出$content
  public function actionIndex(){
    return $this->render('about'); //视图文件夹中的about.php内容返回到一个$content变量中
  }
}

视图文件中的转义

//对JS等代码进行转义仍显示在前端
use yii\helpers\Html;
Html::encode()
//对JS等代码进行处理不显示在前端
use yii\helpers\HtmlPurifier;
HtmlPurifier::process()

HelloController.php(访问路径web/index.php?r=hello/index)

namespace app\controllers;
use yii\web\Controller;

class HelloController extends Controller{
//方法前要加action
  public function actionIndex(){
    // get\post相关方法需使用全局命名空间YII
    // $request = \YII::$app->request;

    // 下面的DEFAULT_VALUE为name不存在时所显示的值
    // $request->post('name','DEFAULT_VALUE');

    // 判断是否通过GET方式请求,同理isPost
    // if($request->isGet){
    //   echo $request->get('id','DEFAULT_VALUE');
    // }
    // //获取用户IP地址
    // echo $request->userIp;

    // 响应设置
    $res = \YII::$app->response;
    // $res->headers->add('pragma', 'no-cache');
    // $res->headers->set('pragma','max-age=5');
    // $res->headers->remove('pragma');
    //跳转
    // $res->redirect('http://www.baidu.com',302);
    // $this->redirect("http://alanhou.org",301);
    //下载文件
    // $res->headers->add('content-disposition','attachment; filename="a.jpg"');
    // $res->sendFile('./robots.txt');
    // $res->statusCode = '404';
  }
}

Session相关

$session = \YII::$app->session;
$session->open();
//判断session是否开启
// if($session->isActive){
//   echo "session is active";
// }
// 方法一:$session->set('user','Alan');
// 方法二:$session['user'] = 'Alan';
// echo $session->get('user');
// $session->remove('user');
// unset($session['user']);

Cookie相关

namespace app\controllers;
use yii\web\Controller;
use yii\web\Cookie;

class HelloController extends Controller{

  public function actionIndex(){
    // $cookies = \YII::$app->response->cookies;
    // $cookie_data = array('name'=>'user', 'value'=>'Alan');
    // $cookies->add(new Cookie($cookie_data));
    // $cookies->remove('user');

    $cookie = \YII::$app->request->cookies;
    //DEFAULT_VALUE为user这个cookie不存在时默认显示的值
    echo $cookie->getValue('user','DEFAULT_VALUE');
  }
}

Model文件-操作数据库

1.在config/db.php配置数据库信息
2.models下创建一个Test.php,用于操作test表

namespace app\models;
use yii\db\ActiveRecord;

class Test extends ActiveRecord{

}

3.在controller的文件中进行操作

//首先引入:
use app\models\Test;
//在方法中进行代码书写

//**查询数据**
// $sql = 'SELECT * FROM test WHERE id=1';
// $results = Test::findBySql($sql)->all();
//当用户传入值时可通过占位符:id形式防止sql注入
// $sql = 'SELECT * FROM test WHERE id=:id';
// $results = Test::findBySql($sql, array(':id'=>'1 or 1=1'))->all();
//如果是id>1则将where修改为where(['>','id',1])
//id>=1 and id<=2 where('between', 'id', 1, 2) //默认返回对象的形式,比较占用资源,可以添加asArray()转换成数组 $results = Test::find()->where(['id'=>1])->asArray()->all();
print_r($results);
//批量查询
foreach(Test::find()->batch(2) as tests){
  print_r($tests);
}

//**删除数据**
// 方法一
// $results = Test::find()_>where(['id'=>2])-all();
// $results[0]->delete();
//方法二
Test::deleteAll('id>=:id', array(':id'=>2));

增加数据时为保证安全通常会进行数据的检测,详细内容可参考 http://www.yiichina.com/doc/guide/2.0/tutorial-core-validators
以下简单的在models/Test.php加入代码进行验证

class Test extends ActiveRecord{
  public function rules(){
    return [
      ['id', 'integer'],
      ['title', 'string', 'length'=>[0,10]]
    ];
  }
}

controller文件中:

// 增加数据
$test = new Test;
$test->id = '1';
$test->title = 'blahblah';
$test->validate();
if($test->hasErrors()){
  die("ERROR");
}
$test->save();

修改数据

// 修改数据
$test = Test::find()->where(['id'=>1])->one();
$test->title = 'title 1 modified';
$test->save();

Composer安装

curl -sS http://install.phpcomposer.com/installer | php
php composer.phar global require "fxp/composer-asset-plugin:~1.1.1"
php composer.phar create-project --prefer-dist yiisoft/yii2-app-basic 2.0.7
喜欢 (0)
[]
分享 (0)
发表我的评论
取消评论

表情 贴图 加粗 删除线 居中 斜体 签到

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址