您的位置:首页 > 编程语言 > PHP开发

yii 小知识点总结

2016-09-25 16:01 471 查看
安装:http://www.coreseek.cn/products-install/install_on_windows/

手册:http://www.coreseek.cn/docs/coreseek_4.1-sphinx_2.0.1-beta.html

常用命令

测试配置是否可用:bin\indexer -c etc\csft.conf

测试索引全部数据:bin\indexer -c etc\csft.conf --all

测试索引指定数据:bin\indexer -c etc\csft.conf 索引名称(如:xml、mysql)

测试 命令行 搜索: bin\search -c etc\csft.conf

测试 中文 搜索:bin\search -c etc\csft.conf -a 网络搜索

测试 搜索服 务端: bin\searchd -c etc\csft.conf

配置数据源

在etc下的csft_mysql.conf 中,修改mysql配置。

需要注意的是sql_query的sql语句第一个字段一定要是主键,下面的sql_attr_uint和sql_attr_timestamp是一些其他的属性。

sql_query_info_pre和sql_query_info这是在测试的时候用的。sql_query_info的where条件id=$id,id是表中的主键,$id永远都是$id,是个变量,不用修改。

接下来将文件中要求修改的绝对路径改掉就可以了。

生成索引

生成全部索引:在coreseek目录下: bin\indexer.exe -c etc\csft_mysql.conf --all

生成指定索引:在coreseek目录下: bin\indexer.exe -c etc\csft_mysql.conf mysql

开启searchd服务

在coreseek目录下: bin\searchd.exe -c etc\csft_mysql.conf

php操作sphinx

先包含类文件:include('F:\sphinx\coreseek-3.2.14-win32\api\sphinxapi.php')

实例化类:$sphinx = new SphinxClient();

创建对象:$sphinx->SetServer('127.0.0.1',9312);

建立查询:$result=$sphinx->query('这是要查询的关键字','*'); *代表查询全部源,可以指定要查询的数据源

数据参数



关键词高亮:buildExcerpts函数

public array SphinxClient::buildExcerpts(array $docs,string $index,string $words [,array $opts])$sphinx->buildExcerpts($docs, $index, $words, $opts);//第一个参数是从数据库中查询的结果集//第二个参数是索引的名字。//第三个参数是要高亮显示的关键字。//第四个参数是显示的字 格式化。$opts=array("before_match"=>"<span style='font-weight:bold;color:red'>","after_match"=>"</span>","chunk_separator"=>"...","around"=>3,"limit"=>10);

form 组件

文本框:textInput();密码框:passwordInput();单选框:radio(),radioList();复选框:checkbox(),checkboxList();下拉框:dropDownList();隐藏域:hiddenInput();文本域:textarea(['rows'=>3]);文件上传:fileInput();提交按钮:submitButton();重置按钮:resetButtun(); <?phpuse yii\widgets\ActiveForm;use yii\helpers\Html;?><?php
$form = ActiveForm::begin(['action' => ['test/getpost'],'method'=>'post',]); ?> <? echo $form->field($model, 'username')->textInput(['maxlength' => 20]) ?><? echo $form->field($model, 'password')->passwordInput(['maxlength' => 20]) ?><? echo $form->field($model,
'sex')->radioList(['1'=>'男','0'=>'女']) ?><? echo $form->field($model, 'edu')->dropDownList(['1'=>'大学','2'=>'高中','3'=>'初中'], ['prompt'=>'请选择','style'=>'width:120px']) ?><? echo $form->field($model, 'file')->fileInput() ?><? echo $form->field($model, 'hobby')->checkboxList(['0'=>'篮球','1'=>'足球','2'=>'羽毛球','3'=>'乒乓球'])
?><? echo $form->field($model, 'info')->textarea(['rows'=>3]) ?><? echo $form->field($model, 'userid')->hiddenInput(['value'=>3]) ?><? echo Html::submitButton('提交', ['class'=>'btn btn-primary','name' =>'submit-button']) ?> <? echo Html::resetButton('重置', ['class'=>'btn
btn-primary','name' =>'submit-button']) ?><?php ActiveForm::end(); ?>

发送邮件

修改配置文件(config/web.php)

'mailer' => [ 'class' => 'yii\swiftmailer\Mailer', 'useFileTransport' => false, 'transport' => [ 'class' => 'Swift_SmtpTransport', 'host' => 'smtp.163.com', //每种邮箱的host配置不一样 'username' => '18903181076@163.com', //发件人邮箱 'password' => 'xgslagfpomsxuseq', //授权码
'port' => '25', 'encryption' => 'tls', ], 'messageConfig'=>[ 'charset'=>'UTF-8', 'from'=>['18903181076@163.com'=>'nickname'] //发件人昵称 ],],
控制器发送邮件

$mail = Yii::$app->mailer->compose();$mail->setTo('****@qq.com'); //接收人邮箱$mail->setSubject("test"); //邮件标题$mail->setHtmlBody("发送内容发送内容发送内容"); //发送内容(可写HTML代码)if ($mail->send()){echo "成功";}else{echo "失败";}
如果发送页面

$mail = Yii::$app->mailer->compose("email"); //在mail文件夹下创建页面文件,在文件内编辑内容$mail->setTo('****@qq.com'); //接收人邮箱$mail->setSubject("test"); //邮件标题if ($mail->send()){echo "成功";}else{echo "失败";}
微博登陆

配置文件:

config.phpheader('Content-Type: text/html; charset=UTF-8');define( "WB_AKEY" , '1023495131' ); //申请应用apkeydefine( "WB_SKEY" , '30f12ebfe03e62026735d84bb50887f1' ); //申请应用密钥define( "WB_CALLBACK_URL" , 'http://www.meit.com?r=index/callback' ); //回调页面

登录页面:

php$session=Yii::$app->session;$session->open(); //开启sessioninclude_once( '/weibosdk/config.php' ); //包含控制文件$o = new SaeTOAuthV2( WB_AKEY , WB_SKEY ); //实例化类文件$code_url = $o->getAuthorizeURL( WB_CALLBACK_URL ); //此为微博登录链接地址view<a href="<?php echo $code_url?>">微博登录</a>

回调页面:

callback.php$session=Yii::$app->session;$session->open(); //开启sessioninclude_once( '/weibosdk/config.php' ); //包含配置文件$o = new SaeTOAuthV2( WB_AKEY , WB_SKEY ); //实例化类文件if (isset($_REQUEST['code'])) { $keys = array(); $keys['code'] = $_REQUEST['code']; $keys['redirect_uri']
= WB_CALLBACK_URL; try { $token = $o->getAccessToken( 'code', $keys ) ; } catch (OAuthException $e) { }}if ($token) { $_SESSION['token'] = $token; setcookie( 'weibojs_'.$o->client_id, http_build_query($token) ); $this->redirect(["index/index"]); //授权成功} else
{ $this->redirect(["index/login"]); //授权失败}

显示用户信息页面:

需要显示用户信息(如用户名)的页面$session=Yii::$app->session;$session->open();include_once( '/weibosdk/config.php' );$c = new SaeTClientV2( WB_AKEY , WB_SKEY , $_SESSION['token']['access_token'] );$ms = $c->home_timeline(); // done$uid_get = $c->get_uid();$uid = $uid_get['uid'];$user_message
= $c->show_user_by_id( $uid);//根据ID获取用户等基本信息

aa增删改查

表单中防止400错误的方法

在表达中加入以下代码

<input name='_csrf' type='hidden' id='_csrf' value='".Yii::$app->request->csrfToken."'>

执行sql语句

$db=Yii::$app->db;$sql="select * from user where u_name='$u_name' and u_pwd='".md5($u_pwd)."'";$re=$db->createCommand($sql)->execute();

模型操作

modelname为实例化的model模型名

eg:$users=new UserForm();

查:

1.findBySql $sql="select * from tablename where condition"Modelname::findBySql($sql,array(':id'=>1 or 1=1))->all(); //返回一个对象。第二个参数是为了防止sql注入//findBySql是cactiverecord的方法2.find $results=modelname::find()->where(['id'=>1])->all();查询出id=1的记录$results=modelname::find()->where(['>','id',0])->all();查询出id大于0的记录$results=modelname::find()->where(['between','id',0,3])->all();查询出id在0,3之间的记录$results=modelname::find()->where(['like','title','keyword'])->all();查询出标题中和关键字相符的记录内存使用量优化方法:1.查询结果转化成数组$results=modelname::find()->where(['between','id',0,3])->asArray()->all();2.减少每次取出数据的数量foreach(modelname::find->batch(2)
as $results){ }//每次只查询2条
4000
记录,降低内存占用删:先取出对象再调用对象的delete方法 $result=modelname::find()->where(['id'=>1)->one();$result->delete();//删除一条数据modelname::deleteAll('id>:id',array(':id'=>0));//删除id大于0的数据增:创建一个cactiverecord对象,调用他的save方法
$test=new modename();$test->username='summer';$test->password='123456';$test->validate(); //调用rule函数验证数据if($test->hasErrors()){echo '数据不合法';die();}$test->save();//往modelname表中插入了了summer,123456的数据,为了安全和数据的合理性,我们通常会在model文件中定义一个rule函数去验证数据改:
$result=modelname::find()->where(['id'=>1)->all()->one();$result->username='lily';$result->save();数据表的关联查询:假设有顾客表(id,name)和订单表(id,price,customer_id)两张表;1.根据顾客查询订单$customer=customer::find()->where['name'=>'zhangsan']->one();$order=$customer->hasMany('Order::className',['customer_id'=>'id'])->asArray()->all();在model中封装:public
function getOrder(){ $order=$this->hasMany('Order::className',['customer_id'=>'id'])->asArray()->all(); return $order;}在controller中调用:$customer=customer::find()->where['name'=>'zhangsan']->one();$order=$customer->getOrder();

aa分页

控制器部分

<?phpuse yii\data\Pagination;public function actionList(){$test=new TestForm(); //实例化model模型$arr=$test->find();//$countQuery = clone $arr;$pages = new Pagination([//'totalCount' => $countQuery->count(),'totalCount' => $arr->count(),'pageSize' => 2 //每页显示条数]);$models
= $arr->offset($pages->offset)->limit($pages->limit)->all();return $this->render('list', ['models' => $models,'pages' => $pages]);}?>

view视图部分

<?phpuse yii\widgets\LinkPager;foreach($models as $k=>$v){echo "<tr>";echo "<td>".$v['u_id']."</td>";echo "<td>".$v['u_name']."</td>";echo "<td>".$v['u_state']."</td>";echo "</tr>";}echo LinkPager::widget(['pagination' => $pages,]);?>

aa日历插件

下载插件

composer require "2amigos/yii2-date-picker-widget" "*"

视图层使用类

use dosamigos\datepicker\DatePicker;

1> 使用widget方式

<?phpecho DatePicker::widget(['model' => $model,'attribute' => 'date','template' => '{addon}{input}','clientOptions' => ['autoclose' => true,'format' => 'yyyy-mm-dd']]);?>
2> ActiveForm方式

<?phpecho $form->field($model, 'date')->widget( DatePicker::className(), [ 'inline' => true, 'template' => '<div class="well well-sm" style="background-color: #fff; width:250px">{input}</div>', 'clientOptions' => [ 'autoclose' => true, 'format' => 'yyyy-mm-dd'
]]);?>
aa对称加密

1.打开main-local.php文件添加:

'mailer' => [

'class' => 'yii\swiftmailer\Mailer',

'useFileTransport' => false,

'transport' => [

'class' => 'Swift_SmtpTransport',

'host' => 'smtp.sina.com', //每种邮箱的host配置不一样

'username' => 'gg24155@sina.com', //发件人邮箱

'password' => 'gghw4089225', //授权码

'port' => '25',

'encryption' => 'tls',

],

'messageConfig'=>[

'charset'=>'UTF-8',

'from'=>['gg24155@sina.com'=>'nickname'] //发件人昵称

],

],

2.控制器demo:

//对称加密+发送邮箱

public function actionEncrypt(){

header("Content-type:text/html;charset=utf-8");

$msg = "张三";

//$pwd = "123";

$re = Yii::$app->security->encryptByKey($msg,'');

$arr = urlencode($re);

$mail = Yii::$app->mailer->compose();

$mail->setTo('871346747@qq.com'); //接收人邮箱

$mail->setSubject("test"); //邮件标题

$mail->setHtmlBody("http://www.hanwei.com/day_exercise/frontend/web/index.php?r=test/get_email&name=".$arr);
//发送内容(可写HTML代码)

if ($mail->send()){

echo "成功";

}else{

echo "失败";

}

}

//接受邮箱信息

public function actionGet_email(){

header("Content-type:text/html;charset=utf-8");

$re3 = urldecode($_GET['name']);

$re1 = Yii::$app->security->decryptByKey($re3,'');

echo $re1;

}

表单绑定

.视图层demo:

<?php

use yii\helpers\Html;

use yii\widgets\ActiveForm;

?>

<meta charset="utf-8"/>

<?=Html::cssFile('@web/css/jquery-ui.css')?>

<?=Html::jsFile('@web/js/jquery-2.1.4.min.js')?>

<?=Html::jsFile('@web/js/jquery-ui.js')?>

<center>

<form action="index.php?r=works/add" method="post" id="add_form">

<h2>工作经历</h2>

公司名称:<input type="text" name="w_name[]"/><br/>

你的职位:<input type="text" name="w_zhi[]"/><br/>

开始日期:<input type="text" class="start" name="time1[]"><br/>

结束日期:<input type="text" class="end" name="time2[]"><br/>

<input type="button" value="+添加更多工作经历" id="m_desc"/><br/>

<div id="show"></div>

<input type="submit" value="提交"/>

</form>

</center>

<script type="text/javascript">

$(document).ready(function(){

$(".start").datepicker();

$(".end").datepicker();

});

$(".start").datepicker({

onSelect:function(dateText,inst){

$(".end").datepicker("option","minDate",dateText);

}

});

$(".end").datepicker({

onSelect:function(dateText,inst){

$(".start").datepicker("option","maxDate",dateText);

}

});

$('#m_desc').click(function(){

var data="公司名称:<input type='text' name='w_name[]'/><br/>你的职位:<input type='text' name='w_zhi[]'/><br/>开始日期:<input type='text' class='start' name='time1[]'><br/>结束日期:<input type='text' class='end' name='time2[]'><br/>";

$("#show").append(data);

$(".start").datepicker({

onSelect:function(dateText,inst){

$(".end").datepicker("option","minDate",dateText);

}

});

$(".end").datepicker({

onSelect:function(dateText,inst){

$(".start").datepicker("option","maxDate",dateText);

}

});

})

$('#add_form').submit(function(){

var arr = $(this).serialize();

$.get($(this).attr('action'),arr,function(data){

if(data==1){

alert('Yes');

}else{

alert('No');

}

})

return false;

})

</script>

2.控制器demo:

<?php

namespace frontend\controllers;

use Yii;

use frontend\models\Works;

class WorksController extends \yii\web\Controller

{

public $layout = false;

public $enableCsrfValidation = false;

public function actionIndex(){

return $this->render('index');

}

public function actionAdd(){

$arr=$_GET;

for($i=0;$i<count($arr['w_name']);$i++){

$connection = \Yii::$app->db;

$res = $connection->createCommand()->batchInsert('works', ['w_name','w_zhi','time1','time2'], [

[$arr['w_name'][$i],$arr['w_zhi'][$i],$arr['time1'][$i],$arr['time2'][$i]],

])->execute();

}

if($res){

echo "1";

}else{

echo "2";

}

}

}

aa文件上传

1.单文件上传

1)调用模型层完成:

M层调用:

use yii\web\UploadedFile;

[['a_pic'],'string','max'=>255],

//图片上传

public $a_pic;

public function upload(){

$this->a_pic->saveAs('uploads/' . $this->a_pic->baseName . '.' . $this->a_pic->extension);

return true;

}

C层调用:

use yii\web\UploadedFile;

$arr = $model->a_pic = UploadedFile::getInstance($model, 'a_pic');

if ($model->upload()) {

$photo = $arr->name;

$connection = \Yii::$app->db;

$connection->createCommand()->insert('work1', [

'a_title' => $title,

'a_desc' => $desc,

'a_pic' => $photo,

])->execute();

}

2)不适用模型层进行文件上传

public $enableCsrfValidation = false; //禁止表单提交

$upload=new UploadedFile(); //实例化上传类

$name=$upload->getInstanceByName('myfile'); //获取文件原名称

$img=$_FILES['myfile']; //获取上传文件参数

$upload->tempName=$img['tmp_name']; //设置上传的文件的临时名称

$img_path='uploads/'.$name; //设置上传文件的路径名称(这里的数据进行入库)

$arr=$upload->saveAs($img_path); //保存文件

var_dump($arr);

<form action="index.php?r=exercise/upload" method="post" enctype="multipart/form-data">

标题:<input type="text" name="e_title"><br/>

头像:<input type="file" name="e_img"><br/>

<input type="submit" value="提交"></form>

2.多文件上传

1)调用模型层完成:

//模型层

public $e_img;

public function upload(){

foreach ($this->e_img as $file){

$file->saveAs('uploads/' . $file->baseName . '.' . $file->extension);

}

return true;

}

//控制器层

use yii\web\UploadedFile;

$model = new Exercise();

$arr = $model->e_img = UploadedFile::getInstances($model, 'e_img');

if ($model->upload()){

for($i=0;$i<count($arr);$i++){

$photo[] = $arr[$i]->name;

}

$str = implode(',',$photo);

$connection = \Yii::$app->db;

$connection->createCommand()->insert('exercise', [

'e_title' => "$e_title",

'e_img' => $str,

])->execute();

return $this->redirect(['exercise/list']);

$connection = \Yii::$app->db;

$command = $connection->createCommand('SELECT * FROM exercise');

$posts = $command->queryAll();

foreach($posts as $key => $val){

$img = explode(',',$val['e_img']);

$val['e_img'] = $img;

$photos[] = $val;

}

return $this->render('list',['list'=>$photos]);

//视图层

<?php foreach($list as $key=>$val){?>

<tr>

<td><?php echo $val['e_title']?></td>

<td>

<?php foreach($val['e_img'] as $k=>$v){?>

<img src="../web/uploads/<?php echo $v?>" style="width:100px;height:100px;"/>

<?php }?>

</td>

</tr>

<?php }?>

2)在调用模型层的基础上序列化

//控制器demo:

<?php

namespace frontend\controllers;

use app\models\Photo;

use Yii;

use yii\web\UploadedFile;

use yii\data\Pagination;

class PhotoController extends \yii\web\Controller{

public function actionIndex(){

$model = new Photo();

return $this->render('index', ['model' => $model]);

}

public function actionUpload(){

$model = new Photo();

if (Yii::$app->request->isPost) {

$arr = $model->photo = UploadedFile::getInstances($model, 'photo');

if ($model->upload()){

for ($i=0; $i <count($arr) ; $i++) {

$img[]= $arr[$i]->name;

}else{

$str = serialize($img);

$model->photo = "$str";

$model->save();

}

}

return $this->render('index', ['model' => $model]);

}

public function actionList(){

$query = Photo::find();

$countQuery = clone $query;

$pages = new Pagination(['totalCount' => $countQuery->count(),'pageSize'=>2]);

$models = $query->offset($pages->offset)

->limit($pages->limit)

->all();

return $this->render('list', [

'models' => $models,

'pages' => $pages,

]);

}

}

//视图层demo:

<table>

<tr>

<td>id</td>

<td>ͼƬ</td>

</tr>

<?php foreach ($models as $key => $v) {?>

<tr>

<td><?php echo $v['p_id']?></td>

<?php

$photos = unserialize($v['photo']);

foreach ($photos as $key => $va) {?>

<td><img src="../web/uploads/<?php echo $va?>" alt="" height="50" width="50"/></td>

<?php }?>

</tr>

<?php }?>

</table>

<?php

use yii\widgets\LinkPager;

echo LinkPager::widget([

'pagination' => $pages,

]);?>

aa   sphinx

1、搜索中文时,出现 iconv 不是内部或外部命令。解决办法:运行一下 "set PATH=%CD%\bin;%PATH%",即可解决;

2、bin\indexer -c etc\csft_mysql.conf --all

创建索引

3、echo 搜索的词 | iconv -f gbk -t utf-8 | search -c etc\csft_mysql.conf --stdin | iconv -f utf-8 -t gbk

4.在Yii框架中使用Sphinx

1)

use SphinxClient;

Yii::$classMap['SphinxClient']="@vendor/yiisoft/yii2/sphinx/sphinxapi.php";

$cl=new SphinxClient();

$cl -> SetServer('127.0.0.1',9312);

$cl->SetLimits(($page - 1) * $pagesize , $pagesize );

$cl->SetMaxQueryTime(3000);

$cl->SetConnectTimeout ( 3 );

$cl->SetArrayResult ( true );

$cl->SetMatchMode ( SPH_MATCH_ANY);

$res = $cl -> Query("$name","*");

2)

在common/config/main-local.php中新添加:

'coreseek' => [

'class' => 'SphinxClient',

]

控制器层直接调用:$cl = Yii::$app->coreseek;

aa  session cookie

session

//控制器层:



1.加载部件
use yii\web\Session;

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

//方法1:

$session['name']=$customer['a_user'];

//方法2:

//$session->set('name',$customer['a_user']);

//视图层:

<?php

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

//方法1:

echo $session['name'];

//方法2:

//echo $session->get('name');

?>

cookie

use app\models\Login;

存cookie

$cookie = \YII::$app->response->cookies;

$searchs = array("name"=>"search" ,"value"=>$search);

$cookie->add(new Cookie($searchs));

取cookie

$cookie = \YII::$app->request->cookies;

$search = $cookie->getValue("search");

移除cookie

$cookie->remove('search');

aa sphinx 搜索

1.控制器demo:

<?php

namespace frontend\controllers;

use Yii;

use frontend\models\Goods;

use SphinxClient;

use yii\data\Pagination;

class GoodsphinxController extends \yii\web\Controller

{

public function actionIndex()

{

$goods = new Goods();

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

$g_name = $request->get('g_name')?$request->get('g_name'):'';

$min_price = $request->get('min_price')?$request->get('min_price'):'';

$max_price = $request->get('max_price')?$request->get('max_price'):'';

$cl = new SphinxClient();

$db = new \yii\db\Query;

$cl->SetServer ('127.0.0.1',9312);

$cl->SetConnectTimeout (3);

if($min_price != "" && $max_price != ""){

//SetFilterFloatRange:浮动范围过滤器

$cl->SetFilterFloatRange("g_price",floatval($min_price),floatval($max_price));

}

//控制搜索结果集的返回格式

$cl->SetArrayResult (true);

$pages = new Pagination([

'totalCount' => 1200,

'defaultPageSize' => 2

]);

$cl -> SetLimits($pages->offset,$pages->limit);

if($g_name==null){

$cl->SetMatchMode (SPH_MATCH_FULLSCAN);

$res = $cl->Query ($g_name, "goods");

$pages->totalCount=$res['total'];

foreach($res['matches'] as $k=>$v){

$ids[]=$v['id'];

}

$data=$db->select('g_id,g_name,g_price')->from('goods')->where(['in','g_id',$ids])->all();

}else{

$cl->SetMatchMode (SPH_MATCH_ANY);

$res = $cl->Query ($g_name, "goods");

$pages->totalCount=$res['total'];

if($res['matches']!=null){

foreach($res['matches'] as $k=>$v){

$ids[]=$v['id'];

}

$data=$db->select('g_id,g_name,g_price')->from('goods')->where(['in','g_id',$ids])->all();

foreach($data as $k=>$v){

$data[$k]['g_name']=$cl->BuildExcerpts([$v['g_name']],'goods',$g_name,array('before_match'=>"<font style='font-weight:bold;color:#f00;'>",'after_match'=>"</font>"))[0];

}

}else{

$data="没有包含<font style='font-weight:bold;color:#f00;'>'{$g_name}'</font>的数据";

}

}

if(Yii::$app->request->isAjax){

return $this->renderPartial('index',['goods'=>$goods,'pages'=>$pages,'data'=>$data]);

}else{

return $this->render('index',['goods'=>$goods,'pages'=>$pages,'data'=>$data]);

}

}

}

2.视图层demo:

<?php

use yii\helpers\Html;

use yii\widgets\ActiveForm;

use yii\widgets\LinkPager;

use yii\web\View;

/* @var $this yii\web\View */

/* @var $form yii\widgets\ActiveForm */

/* @var $model app\models\LoginForm */

$this->title = '搜索';

?>

<div id="lists">

<center>

<h1><?= Html::encode($this->title) ?></h1>

<?php $form = ActiveForm::begin(['action'=>['goodsphinx/index'],'method'=>'get',]); ?>

商品名称:<input type="text" name="g_name">

价格区间:<input type="text" name="min_price">

------<input type="text" name="max_price">

<? echo Html::submitButton('搜索', ['class'=>'btn btn-primary','name' =>'submit-button']) ?>

<?php ActiveForm::end(); ?>

<?php if(is_array($data)){ ?>

<table border=1>

<tr>

<td>ID</td>

<td>商品名称</td>

<td>商品价格</td>

</tr>

<?php foreach($data as $k=>$v){ ?>

<tr>

<td><?= $v['g_id']?></td>

<td><?= $v['g_name']?></td>

<td><?= $v['g_price']?></td>

</tr>

<?php }?>

</table>

<?php }else{ echo $data; } ?>

<?php echo LinkPager::widget([

'pagination'=> $pages,

]); ?>

</center>

</div>

<?php $this->beginBlock('abc'); ?>

$(document).on('click','.pagination a',function(e){

e.preventDefault();

var url=$(this).attr('href');

$.get(url,function(msg){

$('#lists').html(msg);

});

});

<?php $this->endBlock(); $this->registerJs($this->blocks['abc'], View::POS_END); ?>

验证码

1.模型层demo:

引用小部件:

use yii\captcha\Captcha;

定义变量:

public $verifyCode;

验证规则:

['verifyCode', 'captcha','message'=>'验证码错误'],

2.视图层demo:

引用小部件:

use yii\captcha\Captcha;

添加验证码:

<?= $form->field($model, 'verifyCode')->widget(Captcha::className(), [ 'template' =>'<div class="row"><div class="col-lg-3">{image}</div><div class="col-lg-6">{input}</div></div>',

]) ?>

缓存使用

1.打开common\config\main.php:

'memcache' => [

'class' => 'yii\caching\Memcache',

'servers' => [

[

'host' => '127.0.0.1',

'port' => 11211,

'weight' => 100,

],

],

],

2.控制器demo:

<?php

namespace frontend\controllers;

use Yii;

use yii\web\Controller;

class CacheController extends Controller

{
//页面缓存
public function behaviors(){

return [

[

'class' => 'yii\filters\PageCache',

'only' => ['index2'],

'duration' => 3,

'variations' => [

\Yii::$app->language,

],

'dependency' => [

'class' => 'yii\caching\DbDependency',

'sql' => 'SELECT COUNT(*) FROM goods',

],

],

];

}
//缓存存入

public function actionIndex(){

Yii::$app->cache->set('name','dada');

Yii::$app->memcache->set('name','xiao');

}
//缓存取出

public function actionIndex2(){

echo "Yii自带系统缓存:".Yii::$app->cache->get('name');

echo "<br/>";

echo "Yii自带Memcache缓存:".Yii::$app->memcache->get('name');

}
//片段缓存
public function actionFragment(){

return $this->render('fragment');

}

}

3.视图层(真静态缓存)demo:

<?php

$id = "123";

echo time();

echo "<br/>";

if ($this->beginCache($id,['duration' => 5])){

echo time();

$this->endCache();

}

第三方登陆

1.index.php文件:

<meta property="qc:admins" content="0353610511410761004162163757164506000" />

<meta charset='utf-8'>

<a href='https://graph.qq.com/oauth2.0/authorize?response_type=code&client_id=101307013&redirect_uri=http://1.alihw.applinzi.com/info.php'>qq登陆</a>

2.info.php文件:

<?php

header("content-type:text/html;charset=utf-8");

//获得code

$code=$_GET['code'];

//获取access_token

$arr=file_get_contents("https://graph.qq.com/oauth2.0/token?grant_type=authorization_code&client_id=101307013&client_secret=838471f08a0470d2a9ba425f68167c1e&code=$code&redirect_uri=http://1.alihw.applinzi.com/info.php");

//print_r($arr);die;

$arr=explode('=',$arr);

$arr=explode('&',$arr[1]);

$access_token=$arr[0];

//print_r($access_token);die;

//获取openid

$url="https://graph.qq.com/oauth2.0/me?access_token=$access_token";

$openid=file_get_contents($url);

//print_r($openid);die;

$str=substr($openid,45,32);

//print_r($str);

//获取用户信息

$url1="https://graph.qq.com/user/get_user_info?access_token=$access_token&oauth_consumer_key=101307013&openid=$str";

$info=file_get_contents($url1);

$user=json_decode($info,true);

$name = $user['nickname'];

$img = $user['figureurl'];

echo "<img src='$img'>".$name."<a href='https://graph.qq.com/oauth2.0/authorize?response_type=code&client_id=101307013&redirect_uri=http://1.alihw.applinzi.com/info.php'>退出</a>";

//print_r($user);

微信开发

1.index.php文件:

<meta property="qc:admins" content="0353610511410761004162163757164506000" />

<meta charset='utf-8'>

<a href='https://graph.qq.com/oauth2.0/authorize?response_type=code&client_id=101307013&redirect_uri=http://1.alihw.applinzi.com/info.php'>qq登陆</a>

2.info.php文件:

<?php

header("content-type:text/html;charset=utf-8");

//获得code

$code=$_GET['code'];

//获取access_token

$arr=file_get_contents("https://graph.qq.com/oauth2.0/token?grant_type=authorization_code&client_id=101307013&client_secret=838471f08a0470d2a9ba425f68167c1e&code=$code&redirect_uri=http://1.alihw.applinzi.com/info.php");

//print_r($arr);die;

$arr=explode('=',$arr);

$arr=explode('&',$arr[1]);

$access_token=$arr[0];

//print_r($access_token);die;

//获取openid

$url="https://graph.qq.com/oauth2.0/me?access_token=$access_token";

$openid=file_get_contents($url);

//print_r($openid);die;

$str=substr($openid,45,32);

//print_r($str);

//获取用户信息

$url1="https://graph.qq.com/user/get_user_info?access_token=$access_token&oauth_consumer_key=101307013&openid=$str";

$info=file_get_contents($url1);

$user=json_decode($info,true);

$name = $user['nickname'];

$img = $user['figureurl'];

echo "<img src='$img'>".$name."<a href='https://graph.qq.com/oauth2.0/authorize?response_type=code&client_id=101307013&redirect_uri=http://1.alihw.applinzi.com/info.php'>退出</a>";

//print_r($user);

自动载入类文件

1.自己建一个php测试页面

<?php

header("Content-type:text/html;charset=utf-8");

function myLoader($classname){

//实例化文件名

$class_file = strtolower($classname).".php";

if(file_exists($class_file)){

require_once($class_file);

}else{

echo "加载文件失败";

}

}

//注册自定义方法

spl_autoload_register("myLoader");

$test = new Test();

$test->index();

2.建一个类文件test.php

<?php

header("Content-type:text/html;charset=utf-8");

class Test{

function index(){

echo "123";

}

}

coreseek配置文件

#MySQL数据源配置,详情请查看:http://www.coreseek.cn/products-install/mysql/

#请先将var/test/documents.sql导入数据库,并配置好以下的MySQL用户密码数据库

#源定义

source mysql

{

type = mysql

sql_host = localhost

sql_user = root

sql_pass = root

sql_db = rbac

sql_port = 3306

sql_query_pre = SET NAMES utf8

sql_query_pre = replace into counter (id,max_id)values(1,(select max(g_id) from goods))

sql_query = SELECT g_id, g_name, g_desc FROM goods

#sql_query第一列id需为整数

#title、content作为字符串/文本字段,被全文索引

#sql_attr_uint = g_id #从SQL读取到的值必须为整数

#sql_attr_timestamp = date_added #从SQL读取到的值必须为整数,作为时间属性

sql_query_info_pre = SET NAMES utf8 #命令行查询时,设置正确的字符集

sql_query_info = SELECT * FROM goods WHERE g_id=$id #命令行查询时,从数据库读取原始数据信息

}

# 增量索引数据源定义

source kk_increase : mysql

{

sql_query_pre = SET NAMES utf8

sql_query = SELECT g_id, g_name, g_desc FROM goods where g_id > (select max_id from counter where id=1)

#sql_query_pre = replace into counter (id,max_id)values(1,(select max(g_id) from goods))

#sql_attr_uint = g_id #从SQL读取到的值必须为整数

#sql_attr_timestamp = date_added #从SQL读取到的值必须为整数,作为时间属性

sql_query_info_pre = SET NAMES utf8 #命令行查询时,设置正确的字符集

sql_query_info = SELECT * FROM goods WHERE g_id=$id #命令行查询时,从数据库读取原始数据信息

}

#index定义

index mysql

{

source = mysql #对应的source名称

path = E:/coreseek/var/data/mysql #请修改为实际使用的绝对路径,例如:/usr/local/coreseek/var/...

docinfo = extern

mlock = 0

morphology = none

min_word_len = 1

html_strip = 0

#中文分词配置,详情请查看:http://www.coreseek.cn/products-install/coreseek_mmseg/

#charset_dictpath = E:/coreseek/usr/local/mmseg3/etc/ #BSD、Linux环境下设置,/符号结尾

charset_dictpath = E:/coreseek/etc/ #Windows环境下设置,/符号结尾,最好给出绝对路径,例如:C:/usr/local/coreseek/etc/...

charset_type = zh_cn.utf-8

}

#增量索引定义

index kk_increase

{

source = kk_increase #对应的source名称

path = E:/coreseek/var/kk_increase

charset_dictpath = E:/coreseek/etc/

charset_type = zh_cn.utf-8

}

#新定义

source goods

{

type = mysql

sql_host = localhost

sql_user = root

sql_pass = root

sql_db = kaoshi

sql_port = 3306

sql_query_pre = SET NAMES utf8

sql_query = SELECT g_id,g_name,g_price FROM goods

sql_attr_float = g_price

#从SQL读取到的值必须为整数,作为时间属性

sql_query_info_pre = SET NAMES utf8 #命令行查询时,设置正确的字符集

sql_query_info = SELECT * FROM goods WHERE g_id=$id #命令行查询时,从数据库读取原始数据信息

}

#index定义

index goods

{

source = goods #对应的source名称

path = E:/coreseek/var/data/goods #请修改为实际使用的绝对路径,例如:/usr/local/coreseek/var/...

docinfo = extern

mlock = 0

morphology = none

min_word_len = 1

html_strip = 0

#中文分词配置,详情请查看:http://www.coreseek.cn/products-install/coreseek_mmseg/

#charset_dictpath = E:/coreseek/usr/local/mmseg3/etc/ #BSD、Linux环境下设置,/符号结尾

charset_dictpath = E:/coreseek/etc/ #Windows环境下设置,/符号结尾,最好给出绝对路径,例如:C:/usr/local/coreseek/etc/...

charset_type = zh_cn.utf-8

}

#全局index定义

indexer

{

mem_limit = 128M

}

#searchd服务定义

searchd

{

listen = 9312

read_timeout = 5

max_children = 30

max_matches = 1000

seamless_rotate = 0

preopen_indexes = 0

unlink_old = 1

pid_file = E:/coreseek/var/log/searchd_mysql.pid #请修改为实际使用的绝对路径,例如:/usr/local/coreseek/var/...

log = E:/coreseek/var/log/searchd_mysql.log #请修改为实际使用的绝对路径,例如:/usr/local/coreseek/var/...

query_log = E:/coreseek/var/log/query_mysql.log #请修改为实际使用的绝对路径,例如:/usr/local/coreseek/var/...

binlog_path = #关闭binlog日志

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: