Yii2学习笔记(二):慕课网视频教程笔记

1、下图是框架的目录结构

Yii2学习笔记(二):慕课网视频教程笔记_第1张图片

其中:controllers存放控制器文件、models存放数据库的模型文件、views存放视图文件,web下面的index.php是入口文件

在页面中运行http://localhost/basic/web/index.php?r=hello/hello:

   (1)下面是controllers里面的HelloController.php文件:

'yii\filters\HttpCache',
			'lastModified'=>function()
			{
				return filemtime('hw.txt');
				
			},
			'etagSeed'=>function()
			{
				$fp = fopen('hw.txt','r');
				$title = fgets($fp);
				fclose($fp);
				return $title;
			}
				]

	];
	}

		public function actionHello()
		{
	//四、http缓存实例
	$content=file_get_contents('hw.txt');

		return $this->renderPartial('test2',['new'=>$content]);

	//三、页面缓存


	//二、片段缓存:详情在cache.php中
	//	return $this->renderpartial('cache');




	//一、数据缓存
		//1、获取缓存组件
		$cache=\YII::$app->cache;
/*		//往缓存中写数据
		$cache->add('key1','hello');//如果添加的key值相等,那么缓存就会忽略
		$cache->add('key1','hello3');//后面的添加,以第一个添加的为准,
									//比如这个就会显示key1为hello								
		//读缓存
		$data=$cache->get('key1');
		//修改缓存
		//$cache->set('key1','hello2');
		//删除数据
		//$cache->delete('key1');
		//清空所有数据
		//$cache->flush();
		var_dump($data);//显示boolean false;

		//2、缓存有效期设置
		//测试的时候,先运行add,并注释掉echo,运行页面;
		//然后注释掉add,运行echo,过5s后再次刷新,会发现没有显示
		//$cache->add('key2','hello2',5);
		//set也可以
		//$cache->set('key2','hello2',5);
		//echo $cache->get('key2');

		//3、缓存中的依赖关系
		//(1)文件依赖
		//如果修改文件hw的内容,那么缓存就会立即失效,hw文件在web目录下
		//$dependency=new \yii\caching\FileDependency(['fileName'=>'hw.txt']);
		//$cache->add('key3','hello3',3000,$dependency);
		//var_dump($cache->get('key3'));	
		//(2)表达式依赖
		//下面的表达式是URL的请求参数,如果修改请求参数name的值,cache就失效
		//$dependency=new \yii\caching\ExpressionDependency(['expression'=>'\YII::$app->request->get("name")']);
		//$cache->add('key4','hello4',3000,$dependency);
		//var_dump($cache->get('key4'));	
		//(3)DB依赖
		//通过sql语句来依赖,如果sql语句返回的值有变化,那么cache就失效
		//$dependency=new \yii\caching\DbDependency([
		//	'sql'=>'select count(*) from db_bcty365.test']);
		//$cache->add('db_key','hello db',3000,$dependency);
		//var_dump($cache->get('db_key'));

	//类的映射机制:减少系统查询类的时间		
		//	\YII::$classMap['app\models\test']='G:\PHP\basic\models\test.php';
		//	$test=new Test;会跳到autoLoad($class)函数,并赋值'命名空间+test类名'给$class,如果没有上面的映射语句,系统会将$class转换成对应的绝               			//		对路径来查找test类,这个过程也是很消耗时间的;但是如果用了上面的映射语句,此时系统就会直接使用映射的绝对路径,从而减少了系统开销
	
*/
	//数据模型的操作
	/*	//查询语句
			//下面是四种方式,主要用第四种
			//1、最常用的查询方式
			$sql="select * from test where id=1";
			$results=Test::findBySql($sql)->all();//返回一个数组
			
			//2、根据用户提交的变量来查询
			$id=1;
			$sql="select * from test where id=".$id;
			$results=Test::findBySql($sql)->all();//返回一个数组
			
			//3、因为2存在SQL注入问题,所以出现了3这种方法
			$sql="select * from Test where name=:name1";
			//下面这个做法是为了防止SQL注入,比如一个用户输入了'a or name=b',那么执行查询语句就会查找a和b两个用户的内容
			//这样显然是不安全的,因此YII提供了一种方法,就是在findBySql的第二个参数出添加一个数组,然后sql语句中
			//使用如上所示的:name1的表示形式,这样就会把name1的内容当成一个整体来执行,而不会当成部分sql代码
			$results=Test::findBySql($sql,array('name1'=>'a or name=b'))->all();//返回一个数组,这个语句返回一条name为'a or name =b'的内容
			
	
			//4、因为3比较繁琐,因此出现了4
				//name='a'的数据
		//	$results=Test::find()->where(['name'=>'a'])->all();
				//id>0的数据
		//	$results=Test::find()->where(['>','id',0])->all();
				//id>=1和id<=2的数据
		//	$results=Test::find()->where(['between','id',1,2])->all();
				//name like "%a%"
		//	$results=Test::find()->where(['like','name','a'])->all();
		//降低内存开销的方式:
			//1、将结果从对象转化成数组
			$results=Test::find()->where(['between','id',1,2])->asarray()->all();//此时显示结果为数组形式	
				print_r($results);		
			//2、批量查询	
			foreach(Test::find()->batch(10) as $array)//batch(10)就是每次从数据库中拿10条数据放到内存中,保存到变量array中
			{
				print_r($array);
			}
*/
		//删除语句
			//1、单个删除
	//	$results=Test::find()->where(['id'=>1])->all();
	//	$results[0]->delete();
			//2、多个删除
	//	Test::deleteAll('id>:id',array(':id'=>2));
	
		//添加数据
			//插入数据时有个验证的过程,验证规则rules写在test.php类里面
	/*	$test=new Test;
		$test->id=5;
		$test->name='hh';
		$test->validate();
		if($test->hasErrors())
		{
			echo 'data is error';
			die;
		}
		$test->save();//保存到数据库中
	*/	
		
		//修改数据
		//$test=Test::find()->where(['id'=>5])->one();//通过one()返回一个对象
		//$test->name="aa";
		//$test->save();
		
	//数据块的使用	
			//return $this->render('about'); 
			
			
		//	return $this->renderPartial('about');
			
/*
		//公共文件	
				render方法干两件事情:
				一、把后面的参数存到$content变量中
				二、会把布局文件显示出来,这个布局文件就是公共属性$layout的值
				return $this->render('about');


			
			

		//视图之间的数据传递:从控制器传到视图index.php
			总共有三步
			一、定义要传递的数据
			//1、传递字符串变量
			$str='hello
                    
                    

你可能感兴趣的:(PHP学习笔记)