-
//视图之数据安全 //在$hello_str的值后边加上一段js代码,在浏览器刷新页面时,js代码被当成真的js代码显示出来。 //这样会产生问题,假如$hello_str是从用户那边传递过来的,用户以请求的方式发送了一段内容(含有js代码),这样就真的放在视图里去显示了。 //那么如果在js代码中用户放进了一些恶意代码,就会造成跨站脚本攻击,从而危害到安全。Yii框架提供了一些专门的工具来防止这些问题的发生。 $hello_str = 'Hello God!<script>alert(3);</script>'; $data = array(); $data['view_hello_str'] = $hello_str; return $this->renderPartial('index',$data); <!-- 视图之数据安全 --> <!-- Yii提供了一个工具类Html(在命名空间中的类,需要通过php代码去告诉应用程序去使用yii\helpers\Html;下的这么一个类),类中有一个方法encode(可以对这个变量当中的js代码进行转义) --> <?php use yii\helpers\Html; use yii\helpers\HtmlPurifier; ?> <h1><?=Html::encode($view_hello_str);?></h1> <!-- js代码会被原样的显示出来 --> <!-- 除了通过转义的方式去避免跨站脚本攻击之外,还可以通过另外一个类HtmlPurifier去过滤js代码 --> <h1><?=HtmlPurifier::process($view_hello_str);?></h1> <!-- process方法可以把变量里的js代码给彻底过滤掉 -->查看全部
-
HelloController.php //视图之数据传递 //通过renderPartial()显示视图会有一个问题,假如定义了一个变量$hello_str,如何把它传递给index视图去使用。 $hello_str = 'Hello God!';//传递字符串 $test_arr = array(1,2);//传递数组 //传递的过程在Yii框架中分成三步:1.创建一个数组 $data = array(); //2.把需要传递给视图的数据,放到数组当中。怎样使用$data数组里的数据,在视图文件里把$data数组的key(view_hello_str)当成变量使用即可。 $data['view_hello_str'] = $hello_str; $data['view_test_arr'] = $test_arr; //3.把$data数组传递给index视图,传递需要借助renderPartial的第二个参数 return $this->renderPartial('index',$data); views/hello/index.php <!-- 视图之数据传递:这时$view_hello_str的value = $hello_str的value --> <h1><?=$view_hello_str;?></h1> <h1><?=$view_test_arr[0];?></h1> <!-- 打印$view_test_arr数组的第1个元素 -->查看全部
-
Hellocontroller.php //视图之视图的创建 //要想展现views视图index.php文件,需要在控制器里调用renderPartial()方法。 //这个方法在Controller父类中,而HelloController完全继承Controller,可以用$this变量直接调用这个方法。 return $this->renderPartial('index');//方法的参数为要显示的视图文件。Yii框架为了方便开发,文件后缀名不用写,Yii框架规定还必须在前面加上return。 views/hello/index.php <h1>hello view!</h1>查看全部
-
user yii/web/Cookie; //server到客户端 $cookies = \Yii::$app->response->cookies; //获取cookie $cookie_data = array('name'=>'user', 'value'=>'wangnima'); $cookie->add(new Cookie($cookie_data)); //设置cookie数据 $cookie->remove('user'); //删除cookie数据 //从客户端取得cookie $cookies = \Yii::$app->request->cookies; //获得浏览器请求的数据 echo $cookies->getValue('user',20);查看全部
-
//控制器之session处理 //获取session应用组件 $session = \Yii::$app->session; //开启session,调用open()函数即可 $session->open(); //通过$session里的isActive判断session是否开启 //if($session->isActive){ // echo "session is active";//如果没显示出来表示还没开启session //} //开启后,调用set('存放数据的名字','存放数据的值')方法就可以往session里存放数据了;把session当成对象来使用。 //$session->set('user','王大锤');//刷新后,浏览器扔个请求回来,这段代码就会执行,那么session数据就保存成功。要知道session保存到哪里(sess_ffpsdesfctthaseqi7875odus0),需要找php.ini文件里的session.save_path = "c:/wamp/tmp" //取出session数据 //echo $session->get('user'); //删掉session数据 //$session->remove('user'); //通过另外一种方式对session进行操作(把session当成一个数组:PHP提供了ArrayAccess的这么一个接口,凡是实现这个接口的类所产生的对象都可以把它当成数组来使用) //$session['user'] = '王撕葱';//存放session数据 //echo $session['user'];//访问session数据 //unset($session['user']);//删除session数据 //session的识别原理(当用不同浏览器向服务器发送请求时,服务器是可以识别哪个浏览器发送的请求的,根据不同浏览器获取不同的session值扔回不同的浏览器。服务器是根据PHPSESSID的值识别不同的浏览器的) //$session['user'] = '王尼玛'; echo $session['user'];//Chrome、Firefox浏览器可以显示出来,IE没有显示查看全部
-
那么当我们的浏览器发送过来一个请求之后呢,在Index操作里对请求进行处理之后呢,服务器会把请求处理的结果打包成一个消息,再把消息扔回浏览器。那么这个消息就称之为响应。在操作当中,通过响应组件也可以对响应进行一些设置和处理的。 $res = \Yii::$app->response; //$res->statusCode = '404';//为响应设置一个状态码,不设置的服务器返回的默认为200。(404:Not Found;200:OK) //pragma头部跟浏览器缓存有关,no-cache表示接收到返回数消息时,不要把消息缓存在浏览器里面//$res->headers->add('pragma','no-cache'); //通过set方式,可以改掉头部的内容;max-age=5告诉浏览器如果收到消息缓存个5秒钟 //$res->headers->set('pragma','max-age=5'); //通过remove方式删掉pragma头部 //$res->headers->remove('pragma'); //http头跳转功能,需要在头部里加上一个location的字段,告诉浏览器收到消息后跳转到一个地址 //$res->headers->add('location','http://www.baidu.com'); //跳转功能常用,Yii框架在Controller这个父类当中提供了专门的函数redirect() //$this->redirect('http://www.baidu.com',302);//在跳转的时候,还可以顺便指定返回消息的状态码是多少。(302:表示用户请求的东西临时放在百度这个地址里) //通过http头可以进行文件下载。告诉浏览器收到数据的时候可以以附件的形式去保存数据,保存成文件。 //$res->headers->add('content-disposition','attachment;filename="a.jpg"'); //因为下载功能也常用,所以响应当中也专门提供了一个包装的方法sendFile $res->sendFile('./rebots.txt');//在入口脚本所在的文件夹去寻找要下载的文件 $res->statusCode = '404';//为响应消息设置状态码查看全部
-
localhost/basic/web/index.php?r=hello/index&id=3 那么通过浏览器向hello控制器里的index操作发送请求的时候,可以在请求的后面加上一些参数,比方说加上&id=3。那么当这个请求发送到index操作之后,怎样才能在index操作里把id参数取出来?可以通过请求组件这么一个东西来完成。要想获得请求组件,可以通过Yii框架里面的全局的类(Yii),那么在这个类里有一个静态变量($app),也就是之前所说的应用主体,那么这个应用主体在刚开始的时候会加载各种各样的应用组件。这里有一个request组件,也就是请求组件。获取到请求组件之后,把它放到$request变量之中。通过这个请求组件,就可以获取发送过来的请求当中的数据了。 $request = \Yii::$app->request;//Yii类是全局类,要想使用需在前面加上反斜杠\ 因为传递过来的参数是通过get的这种方式,可以通过request组件里面的get方式来获取请求当中的数据。 echo $request->get('id'); echo $request->get('id',20);//如果没有id传过来,get获取不到,或者说get获取到的是null值。那么让get做一个判断,如果id没有传过来,就返回另一个值。可以通过设置get的第二个参数做到这一点。 //获取post请求当中的数据,通过post('参数的名字',没有参数传过来时post返回的默认值)方式 $request->post('name',2333); //利用request这个请求组件,还可以判断发送过来的请求类型 if ($request->isGet/isPost) { echo "this is get method!"; } //通过这个请求参数,还可以去获取用户的一些信息(如ip) echo $request->userIp; $request->userIP;或$request->userIp;都能获取用户的ip地址。但yii2源码里,应该是userIP。查看全部
-
消除数据库查询缓存查看全部
-
yii 一对多关联查询查看全部
-
yii sql查询查看全部
-
在basic/controllers文件夹下新建一个HelloController.php文件 namespace app\Controllers use yii\web\controller class HelloController extends Controller{ function actionIndex(){ echo "hello word"}} 访问的时候的参数就是r=hello/index其中hell代表控制器,index代表控制器的方法 路由中的r=hello不能像写类一样用大写Hello ..否则找不到相应的控制器。查看全部
-
当没有指定命名空间的时候默认是顶层命名空间成为全局类,实例化需要用到\ $c = new \Apple(); $c->getInfo(); 不对类定义命名空间(namespace)时,这个类为全局类 实例化全局类时在类名的前面加上反斜杠 \ 即可调用。 use是引用命名空间 use Home/Model as m 中的m可以变相的看成是代替Home/Model/查看全部
-
Yii应用的静态结构图 一封信的故事,先到门卫(index)再交给老大(主体)老大给了我(控制器),我先用模型记录了一部分到数据库,然后写了回信交给(视图),并且拿了些小玩意从部件里面一并发回查看全部
-
/basic/web/index.php (Yii框架的入口脚本) /basic/config/web.php配置cookieValidationKey(这个配置项主要是为了防止cookie攻击的。随便设置一个值) 'cookieValidationKey' => 'yjpynww',查看全部
-
requirements.php 检测系统环境 更改PHP版本到5.4.0或以上。(phpStudy)查看全部
举报
0/150
提交
取消