Controller
实现在HelloController.php中编写
1 |
|
http://127.0.0.1/basic/web/index.php?r=hello/index 访问成功
获取get和post 请求内容
1 |
|
同样也可以 $request->post(‘id’,20);进行post
YII操作HTTP
1 |
|
YII 操作Session
session 的存储路径可在 php.ini 中找到
1 |
|
1 | echo $session->get('user'); // 获得session值 |
YII 操作Cookie
1 |
|
View 层
要访问视图文件 需要把视图文件放到与控制器名相同的文件夹下
1 |
|
.\basic\views\Hello.php
1 |
|
访问http://127.0.0.1/basic/web/index.php?r=hello/index
成功得到视图文件
当要在view文件中使用控制器中的的变量时 需要把数据放入数组当中
1 |
|
1 | <h1> =$view_str;</h1> |
当$hello_str 可控 会造成恶意代码攻击 可以使用两个方法进行过滤
1 | $hello_str = '小姐姐<script>alert(123)</script>'; |
1 |
|
优化布局
当在hello文件夹中有about.php index.php
1 |
|
1 |
|
可见 除了 hello about hello index 其他的都显得 多余
接下来把 多余的代码 放在basic\views\layouts 文件夹下 并创建一个common.php
内容为
1 |
|
index.php和about.php直接写hello index hello about
1 |
|
访问http://127.0.0.1/basic/web/index.php?r=hello/index
如果想在index.php视图访问about.php视图文件
如果访问另一个视图文件的变量
YI操作数据块
当不想显示模板中的一些内容时 用
$this->endBlock();
来定义一个html代码块,该代码块可在layout文件中引用,
$this->blocks[‘block_name’]
Model
YII 数据模型
对数据库进行增删改查操作数据库
实现创建数据库yii 表test tittle id 字段
在config文件夹中的db.php配置好数据库
1 |
|
但是这样看起来代码有点多 可以用find()方法 将查询条件放到数据中去
1 |
|
这样就显得简洁多了
如果要查询id>0 的话就要用第三个参数
1 | $results = Test::find()->where(['>','id','0'])->all(); |
查询id>=1 id<=2
1 | $results = Test::find()->where(['between','id',1,2])->all(); |
like 操作
1 | $results = Test::find()->where(['linke','title','title'])->all(); |
用asArray 可以降低农村使用量和使代码,数据清晰
1 | $results = Test::find()->where(['linke','title','title'])->asArray()->all(); |
批量查询1
2
3foreach(Test::find()->batch(1) as $tests){
printf(count($tests)) // 每次操作一条数据 将结果放在$tests
}
进行删除操作1
2
3
4
5$results = Test::find()->where(['id']=>1)->all();
$results[0]->delete();
//第二中方法,及利用占位符
Test::deleteAll('id>:id',array(':id'=>0)); //
进行增加数据
1 |
|
接下来使用rules 进行验证
model文件夹下的Test.php内容
1 |
|
控制器HelloController.php代码
1 |
|
当id 为字符时 不满足验证器0-5 的访问 返回data error
接下来进行修改操作
1 |
|
可以加个判断
接下来进行 关联查询
所谓关联查询 就是 比如有两张表 1顾客表 2订单表 多个订单对应一个顾客 形成一对多的关系 一个订单对应 一个顾客 形成一对一的关系
接下来编写 order.php customer.php
成功得到数据
但是在控制器进行数据库的操作不满足mvc 在model类 进行封装一个 操作数据库的类
在进行查询的时候 会把查询内容放到select 语句中,当这个数据更新时不会再进行select 而是拿上次slect 的结果 所以如果要再进行select 时 需要用unset()释放那个结果