Yii框架备忘录
2017-03-26 本文已影响32人
陈走路Aston
一、Controller:
<?php
namespace app\controllers;
use Yii;
use yii\web\Controller;
use yii\web\Cookie;
/**
* chen.jian
*/
class HelloController extends Controller{
public $layout = 'common';
public function actionIndex(){
// 一、请求组件
$request = Yii::$app->request; //Yii全局类,$app静态变量,用来加载应用主体,例如request组件;
echo $request->get("name"); //获取get方式的参数为name的值,同理post;
echo $request->get("name", "majiali"); //获取get方式的参数为name的值,如果没有name的值,默认就是“majiali”,同理post;
echo $request->isGet; //是否进行了get方式的提交true Or false,同理post;
echo $request->userIp; //获取用户的IP地址;
// 二、响应组件
$response = Yii::$app->response;
//自定义返回的状态码。但是好像不常用
$response->statusCode = '404';
//常用, 给responce相应的header头里面添加、修改、删除消息;
$response->headers->add("pragma", "no-cache");
$response->headers->set("pragma", "max-age=5");
$response->headers->remove("pragma");
//响应后跳转
$response->headers->add("location", "http://baidu.com");
//或者使用内置的:
$this->redirect("http://baidu.com", 302);
//响应后文件下载
$response->headers->add("content-dispostion", "attachment; filename='a.jpg'");
//或者使用内置的:
$this->sendFile('./robots.txt');
// 三、session组件
$session = Yii::$app->session(); //此时$session是对象
$session->isActive; //session是否开启;
$session->open(); //开启session;
$session->set("user", "chenjian"); //存session, 去php.ini中查找session.save_path查看session存在哪里。
$session->get("user"); //获取session;
$session->remove("user"); //删除session;
//或者以数组的形式来操作session
$session["user"] = "chenjian"; //设置session
echo $session["user"]; //获取session
unset($session["user"]); //删除session
// 四、cookie集合,其实属于response响应组件
$cookie = Yii::$app->response->cookies;
$data = array('name' => "user", 'value'=>"chenjian");
$cookie->add(new Cookie($data));
$cookie->remove('name');
echo Yii::$app->request->cookies->getValue('user', "majiali"); //获取cookie的值.如果没有值那么返回的默认值就是“majiali”
// 五、加载视图之传递参数
$info = array(
'name' => "chenjian",
'jober' => "PHPer",
'age' => 28,
'majiali'=>['A', 'B']
);
return $this->renderPartial('index', $info); //视图里面接受数组的一个key,例如$name;
// 六、加载视图之布局文件, 对于有公用的代码,可以使用布局文件
// 1. actionIndex方法外定义一个变量public $layout = 'common';, 表示加载布局文件
// 2. 创建views/layouts/common.php的布局文件,里面使用 $content变量来表示render方法传递的视图;
return $this->render('index'); //其实render()方法把视图放在$content变量里面,这个变量可以传递给布局文件。
// 七、加载视图之布局文件之数据块 ------ 类似于覆
}
}
二、View文件下的视图文件:
2.1 普通视图文件: views/hello/index.php
<?php
use yii\helpers\Html;
use yii\helpers\HtmlPurifier;
// 1. 一般显示
echo "sadasd";
// 2. 加载控制器传来的数据,并且对传递过来的代码进行了处理防止代码攻击。
// 控制器中`$data=array('name'=>'ChenJian'); return $this->render('index', $data); `
echo Html::encode($name); //注意,使用的是数组里面的一个key
echo HtmlPurifier::process($name);
// 3. 加载另外一个视图
echo $this->render('about');
?>
2.2 布局文件:views/layouts/common.php
<?php
<!DOCTYPE html>
<html>
<head>
<title>Common</title>
</head>
<body>
<h1>Hello, i am Common</h1>
<?php echo $content; //$content来自控制器 ?>
</body>
</html>
?>
2.3 数据块:views/hello/index.php
<!-- index.php 中定义数据块 -->
<?php $this->beginBlock("block1"); ?>
<h1>新的数据来代替布局文件中的数据</h1>
<?php $this->endBlock(); ?>
<!-- common.php(布局文件)中使用数据块 -->
<?php $this->blocks['blocks1']; ?>
三、数据库的使用:
控制器中:
<?php
namespace app\controllers;
use Yii;
use yii\web\Controller;
use yii\web\Cookie;
use app\models\Hello;
use app\models\Country;
/**
* chen.jian
*/
class HelloController extends Controller{
public function actionIndex1(){
$sql = 'select * from country';
$result = Hello::findBySql($sql);
echo "<pre>";
var_dump($result->all());
}
public function actionIndex2(){
//防止sql注入,使用了占位符的概念,条件中name是$name的变量
$name = "Australia";
$sql = "select * from country where name=:name";
$result = Hello::findBySql($sql, array(':name'=>$name));
var_dump($result->all());
}
public function actionIndex3 (){
// 1. name等于Australia
$result1 = Hello::find()->where(['name' => "Australia"]);
// 2. id大于6
$result2 = Hello::find()->where(['>', 'id', 6]);
// 3. id介于6和10
$result3 = Hello::find()->where(['between', 'id', 6, 10]);
$condition = array('name' => "Australia" );
$result4 = Hello::find()->where($condition); //Object
$result4 = Hello::find()->where($condition)->all(); //Object
echo("<pre>");
var_dump($result4);
}
public function actionIndex4(){
//1. 查询结果转为数组,去除不必要的数据。
$result = Hello::find()->where(['name' => "Australia"])->asArray(); //修正后的Array
var_dump($result->all());
//2. 批量查询。为了保护内存,每次查2条。
$result = Hello::find()->asArray();
foreach ($result->batch(2) as $t) {
var_dump($t); //
echo count($t); // 依次输出22222,因为一共10条数据。
}
}
public function actionIndex5(){
// 1. 删除数据, 调用对象的delete方法
$result = Hello::find()->where(['code' => 'te'])->all(); //Array
var_dump($result[0]->delete());
// 2. 删除全部,或者根据条件
Hello::deleteAll(); //删除全部
Hello::deleteAll('code = "te"'); //根据条件
}
public function actionIndex6(){
//1. 增加数据并且验证
$hello = new Hello();
$hello->code = "CJ22";
$hello->name = "chenjian";
$hello->validate(); //验证,返回boolean
$hello->hasErrors(); //是否有错误,返回boolean
var_dump($hello->save());
}
public function actionIndex7(){
//修改数据
$result = Hello::find()->where(['code' => "CJ"])->one();
$result->population = 888888;
var_dump($result->save());
}
public function actionIndex8(){
//联合查询
$result = Hello::find()->where(['code' => "CJ"])->one();
$data = $result->hasMany('app\models\Country', ['c_code' => 'code'])->all();
echo "<pre>";
var_dump($data);
}
}
模型中;
<?php
namespace app\models;
use yii\db\ActiveRecord;
/**
* chen.jian
*/
class Hello extends ActiveRecord{
public static function tableName(){
return 'country';
}
public function rules(){
return [
['code', 'string', 'length'=>[0, 2]]
];
}
}