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

原文: https://blog.csdn.net/xyz_dream/article/details/56301722

接下来,继续学习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 就会显示