yii 小知识点总结

安装: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条记录,降低内存占用 删:先取出对象再调用对象的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日志
}





  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值