yii学习过程(常用组件的使用)

               接下来,继续学习Yii2框架的使用。前面说过Yii2是面向对象的设计,所以php中常用的全局数组和基本功能都活做好了封装。下面依次开始介绍这个组件。

         1.http中的request请求组件

                 1.1  获取参数

                $request=\Yii::$app->request;   //返回一个request对象

                $data=$request->get("id");  //获取 get请求参数为id 的值      等价于      $_GET["id"]

                $data=$request->get("id",20);//   获取参数id,若参数没有值,则赋值20给id参数

                $data=$request->post("name");  //获取  post请求的 id参数         post()和get()方法使用一直


                 1.2 判断请求类型

                     $method=$request->isGet ;//判断是否为  get请求    返回bool值

                    $method=$request->isPost;  //判读是否为  post请求  返回bool值


                1.3 获取csrf验证的验证码参数  (yii2中的post请求必须含有一个隐藏的表单字段,_csrf赋予下面的值,否则页面报错400,提交不上表单)

                     $csrf=$request->csrfToken;  // csrf  Cross-site request forgery 防止跨站请求伪造攻击                               

                                             <input   type="hidden"   value="<?=\Yii::$app->request->csrfToken?>">    //  隐藏的 csrf验证字段


               1.4 获取cookie 

                       $cookies=\Yii::$app->request->cookies;

                       $cookie=$cookies->get("path");  //获取 一个 cookie名字为 path的值的Cookie的对象

                       $value=$cookie->value;// 获取到cookie的值


                1.5 哈希加密密码和密码校验

                                                       

                       $password="admin";        //哈希加密字符串   

                       $getPassWord=  $request->getSecurity()->generatePasswordHash($password);        

                                                                             //数据库中获取的密码 与提交过来的密码进行验证

                       $request->getSecurity()-validatePassword($password,$passWordFromDb);

       1.6 获取用户的ip地址

           $ip=$request->userIp;//获取到客户端的ip地址

           常用的方法大致是这么大,剩余的大家可以查询官方文档做详细的了解和使用。

   2.http的response组件

      2.1 添加cookie

          $response=\Yii::$app->response;//response对象

          $cookie=new Cookie(["name"=>"path","value"=>"/hello/php"]);//new一个Cookie对象

          $cookie->path="/";//设置cookie的path

          $response->cookies->add($cookie);//http响应一个cookie回去

     2.2 headers //http响应头对象

          $response->headers->add("Pragram","no-Cache");//不缓存


    3.Session组件

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

         if(!$session->isActive())//session处于非打开状态

        {

            $session->open();//打开session

        }

      $sessionValue=$session->get("id");//获取$_SESSION["id"]等价

         $session->set("id",20);//储存session值

    4.生成url

       Url::to(["index/login"],true);//默认不填第二个参数false生成相对url  true生成绝对url

    

    5.ArrayHelper类

        ArrayHelper::htmlEncode($array);//对$array的所有值做编码变为html实体符号

   6.转换字符实体,防止xss攻击

        $safeString=Html::encode($string); //获取转换后的字符

    

         7. 接下来讲解控制器(Controller),视图(View)的创建和应用     


                     在controller目录下新建一个IndexController.php  命名规则:驼峰式命名+Controller.php

                     namespace app\controllers;

                     use yii\web\Controller;

                     class IndexController extends Controller

                     {

                             public function beforeAction()  //执行在  action之前    一般做权限之类的判断

                            {

                               echo "1 start<br/>";

                            }


                            public function  actionIndex()

                           {

                                   echo "2 index<br/>"

                            }

                            public function afterAction()    //后置操作,执行在action之后

                            {

                                echo " 3 end<br/>";

                             }


                      }     

                   访问浏览器:http://localhost/index/index   输出:    

                   1start

                   2index

                   3end

                 此时在 view目录下创建一个和控制器一样的目录 index,在里面添加一个index.php  里面添加一句话 "hello world" 

                然后此时在 actionIndex()  {

                            return  $this->render("index");//视图名称  

                }

                  此时再刷新网页:  会出现我们再index/index.php中的hello world  的字,还有好友一些框架的css样式(简称父模板)。因为我们使用了 render()这个方法渲染视图,若不想渲染父模板,则用方法  renderPartial("index") 方法,就只会渲染本身的视图,包含任何父模板。


             7.1   父模板的使用 

                    如果我们的网站的网页有很多地方都是一样的代码,例如html的基本结构:

                      <!doctype html>

                      <html>

                         <head>        

                                  <title></title>

                         <head>

                        <body>

                                          <?=$content?>

                        </body>

                     </html>

                   这个就是重复代码,如果我们将此作为模板,然后把我们body里面的内容直接写在视图里面,不用再每次去写这个html头。我们可以这么做在IndexController里面添加一个私有变量   private  $layout  ="common";(此时在view/layouts/)新建一个common.php文件内容为上面的html文件头。此时,我们在actionIndex()方法中使用render("index");   访问浏览器,会出现    原本只有纯文本的“”hello world“”出现在了body标签之中,也就是说这两个页面结合在了一起。其中$content变量就是index.php中的内容,通过  <?=$content?>再输出到了body标签里面。

                 

               7.1   Controller传递参数到页面

            很简单通过renderPartial()的第二参数传入即可: 例如

                 return $this->rednerPartial("index",["name"=>"yii","language"="php"]);

             在index.php中直接输出 :

                    echo $name;  echo $language;//                     yii  php 就会显示 

     

    



发布了67 篇原创文章 · 获赞 87 · 访问量 68万+
展开阅读全文

没有更多推荐了,返回首页

©️2019 CSDN 皮肤主题: 编程工作室 设计师: CSDN官方博客

分享到微信朋友圈

×

扫一扫,手机浏览