原文: 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 就会显示