Yii 是一个高性能,基于组件的 PHP 框架

一.

1.安装yii方式

composer安装或者下载一份应用程序模板。刚开始学习,我使用后者

2.目录结构

      a.解压源码包根目录下,requirements.php文件检查系统配置。

      b.web目录下index.php是入口文件。通过这里访问应用,什么都没有配置的话访问结果如下图,这是因为需要配置cookievalidationkey防止恶意攻击。(配置目录在config下web.php文件中)

         

删除linux path中的python环境变量 删除path.ini_php

           

        配置文件

        

删除linux path中的python环境变量 删除path.ini_命名空间_02

       配置之后再次访问

       

删除linux path中的python环境变量 删除path.ini_php_03

3.入口脚本如何处理请求

       入口脚本不会直接处理请求,而是将他交给应用主体,就是框架里经常使用的app(YII::app),他其实是个对象,在正式处理请求之前他会先加载一些应用组件和一些相应的模块,这样帮助他更好的处理请求。然后应用主体会将请求交给相应的控制器,控制器需要与数据库打交道就交给模型,处理完后就交给视图。视图为了更好的展示会使用小部件和前端资源。

删除linux path中的python环境变量 删除path.ini_前端_04

4.命名空间

参考文档http://www.php.net/manual/zh/language.namespaces.rationale.php

     如果一个文件c引入多个文件(比如a文件和b文件),这些文件当中有同名的类,在c中使用时就会发生冲突。为了避免这样的情况发生就使用了命名空间,同一个命名空间中是不会有相同名称的类的。

在文件中声明语法:namespace  a/b/c;如果一个文件中不声明命名空间,那么他就在顶层命名空间中,也称为全局类。

删除linux path中的python环境变量 删除path.ini_前端_05

   

删除linux path中的python环境变量 删除path.ini_ViewUI_06

    

删除linux path中的python环境变量 删除path.ini_命名空间_07

在文件中使用语法:use a/b/c  as  或者$people=new a/b/c/People();

删除linux path中的python环境变量 删除path.ini_数据库_08

5.控制器的创建

  controllers目录中创建控制器。

  a.控制器都在一个命名空间中namespace app\controllers;

  b.控制器都要继承Controller这个类,那么要使用他的命名空间就需要写use yii\web\Controller;

  c.控制器里的方法叫做操作,必须以action开头,比如actionIndex

  d.访问的时候url是这样写的 

删除linux path中的python环境变量 删除path.ini_ViewUI_09

  e.url中加参数

删除linux path中的python环境变量 删除path.ini_ViewUI_10

6.在控制器中获得参数,通过请求组件获得

    a.首先需要全局类YII

    b.需要全局类的静态变量app,即\YII::app,就是应用主体

    c.应用主体会在处理前加载应用组件,现在就需要加载请求组件,YII::app->request;

    get方法中给出的值,在id传递为空时显示,是默认值。

   

删除linux path中的python环境变量 删除path.ini_数据库_11

    判断请求方式和获取客户端ip

       

删除linux path中的python环境变量 删除path.ini_命名空间_12

7.控制器响应处理

 

删除linux path中的python环境变量 删除path.ini_命名空间_13

8.session处理。靠session组件,获取方式和前边请求一样


$session= \YII::app->session;


 打开session


$session->open();


判断session是否打开


$session-isActive


设置session值


$session->set("name","tom");


获取session值得方法


$session->get("name");


删除session


$session->remove("user");


删除linux path中的python环境变量 删除path.ini_ViewUI_14

  

session的识别原理:cookie保存在本地,会有个sessionid,请求发送时,会把这个sessionid发送过去,服务器通过这个来识别session信息,在session存储文件中根据这个值查找session。可以在php.ini文件中查找session.save_path查找保存位置

 9.控制器cookie处理

使用cookies组件


$cookie=\YII::app->cookies;


增加cookie,需要cookie对象为参数,使用这个cookie类,得引入命名空间,use yii\web\Cookie;


$cookie->add(new Cookie());


删除


$cookie->remove("name");


删除linux path中的python环境变量 删除path.ini_前端_15

  

从请求中读取cookie


$cookie=\YII::app->request->cookies;
$cookie->getValue("name");//也可以设置第二个参数,为默认值


删除linux path中的python环境变量 删除path.ini_php_16

  

二、视图

10.视图创建

在views目录下管理视图文件,根据控制器创建文件夹,文件夹下放置该控制器控显示的视图文件。视图文件后缀为php,控制器里边控制显示时可以省略后缀名。

使用renderPartial方法,前边框架规定必须return。

删除linux path中的python环境变量 删除path.ini_php_17

 

12.向模板中传递数据,三步,创建数组,添加数组,传递。

删除linux path中的python环境变量 删除path.ini_ViewUI_18

13.模板文件中使用传递过来的数据

删除linux path中的python环境变量 删除path.ini_命名空间_19

数据带标签的处理

删除linux path中的python环境变量 删除path.ini_php_20

结果

删除linux path中的python环境变量 删除path.ini_命名空间_21

14.render方法显示视图文件。做两件事情:1.将视图文件放到$content变量当中;2.将布局文件显示出来。

布局文件在views\layouts中创建

删除linux path中的python环境变量 删除path.ini_php_22

控制器中用的时候,指定是哪个布局文件

删除linux path中的python环境变量 删除path.ini_ViewUI_23

15.在一个视图中显示另一个视图,还可以向另一个视图穿数据,在另一个视图中数据使用和前边相同

删除linux path中的python环境变量 删除path.ini_ViewUI_24

16.数据块

替换模板中指定位置

删除linux path中的python环境变量 删除path.ini_php_25

删除linux path中的python环境变量 删除path.ini_php_26

如果视图文件没设置,增加判断

删除linux path中的python环境变量 删除path.ini_命名空间_27

三.数据模型

17.数据库配置在config目录下的db.php文件中

18.数据模型创建,在modules目录下,文件和表名相同。

删除linux path中的python环境变量 删除path.ini_数据库_28

19.查询数据

删除linux path中的python环境变量 删除path.ini_php_29

删除linux path中的python环境变量 删除path.ini_前端_30

20.条件查询

具体规则可以查看官网介绍,其中all()查询出的为对象,使用asArray()后再使用all(),查询出为数组对象。

删除linux path中的python环境变量 删除path.ini_数据库_31

删除linux path中的python环境变量 删除path.ini_ViewUI_32

21.删除

删除linux path中的python环境变量 删除path.ini_前端_33

22.增加数据

删除linux path中的python环境变量 删除path.ini_前端_34

增加时先实例化模型,然后可以对传来的参数进行检验,模型文件中检验

删除linux path中的python环境变量 删除path.ini_前端_35

控制器进行调用

删除linux path中的python环境变量 删除path.ini_前端_36

23.修改

删除linux path中的python环境变量 删除path.ini_php_37

24.关联查询,首先得创建每个表的模型

删除linux path中的python环境变量 删除path.ini_php_38

根据哪个表查,下面是根据顾客表查顾客订单

删除linux path中的python环境变量 删除path.ini_命名空间_39

上面代码可以优化一处

删除linux path中的python环境变量 删除path.ini_命名空间_40

模型文件

删除linux path中的python环境变量 删除path.ini_前端_41

继续优化,这样写,系统就会去customer的模型中执行_get函数,然后系统默认给前边就了get,就找到了模型中的getOrders方法,然后提取数据,会默认给语句后增加all()函数,所以模型中将all()那句又去掉了。

删除linux path中的python环境变量 删除path.ini_命名空间_42

删除linux path中的python环境变量 删除path.ini_php_43

其中,有个with方法,就是在第一次查询后,再到order表中查

删除linux path中的python环境变量 删除path.ini_php_44

根据订单查询所属的顾客,模型文件,hasOne只有一个

删除linux path中的python环境变量 删除path.ini_命名空间_45

删除linux path中的python环境变量 删除path.ini_数据库_46