不孬

less is more


  • 首页

  • 关于

  • 标签

  • 分类

  • 归档

  • 搜索

实现迭代器

发表于 2018-10-11 | 更新于 2018-12-13 | 分类于 php | 阅读次数:
前言迭代器接口可以让对象像数组一样被遍历,如 foreach ,和数组的区别是数组一开始数据就是填充好的,也就是已经加载到内存的,如果数据量比较大甚至超过服务器内存,那将无法工作,而迭代器就可以通过一条一条数据的读取(从文件或数据库)进行操作 Iterator接口php提供的接口,我们看一下要实现的内容 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859Iterator extends Traversable &# ...
阅读全文 »

Yii-安全组件

发表于 2018-10-09 | 更新于 2018-12-10 | 分类于 yii | 阅读次数:

加密&解密 相关方法

数据加密和解密

encryptByPassword & decryptByPassword

通过key 对原数据进行加密,每次加密后的生成的数据是不一样的,但是都可以通过它来解密出原来的数据

1
2
3
4
5
6
7
8
9
10
11
12
13
/**
* 获取加密(编码)后的数据。
* 和 decryptByPassword 配对使用
* @param string $data the data to encrypt 要加密的数据
* @param string $password the password to use for encryption 加密使用的key
* @return string the encrypted data
* @see decryptByPassword()
* @see encryptByKey()
*/
public function encryptByPassword($data, $password)
{
...
}

阅读全文 »

redis实现文章根据点赞及时间排序

发表于 2018-10-07 | 更新于 2018-10-08 | 分类于 redis实战 | 阅读次数:

redis教程和命令

redis教程和命令
Redis 命令参考

需求:

  1. 根据对文章的点赞数来计算文章受欢迎程度,假设一篇文章至少需要200个赞才算有趣的文章,有趣的文章要求保留在列表前排至少 1 天
  2. 对文章进行分组,文章分值排序同样作用与一个组内的文章

思路:

实现文章评分:

因为要实现随时间流逝不断减少的分数,我们可以用文章发布时间来作为文章分数的基数,也就相对于随着时间的流逝文章的分数越低,因为后发布的分数比前发布的分数要高。
根据需求需要超过200个赞的要在前排保留一天,我们可以计算出一个赞是多少分,一天的秒数86400除以200,等于432,也就是每获得一个赞将会的到432分

阅读全文 »

Yii-小点汇总

发表于 2018-07-03 | 更新于 2018-12-15 | 分类于 yii , 小点汇总 | 阅读次数:

关于异常输出

在出现异常的时候,Yii的异常处理默认是要将之前的输出清空,也就是说通过 echo 或 var_dump 打印的内容将会被清掉不输出到页面,可以通过设置 ErrorHandler 类的 discardExistingOutput = false 属性来保证输出

1
2
3
4
5
6
7
8
9
10
'components' => [
...
...
'errorHandler' => [
'errorAction' => 'site/error',
'discardExistingOutput' => false
],
...
...
]

开启debug,但是前端页面关闭debug导航条

我们只需要在渲染视图之前解绑debug模块注册的事件就可以

1
2
# 解绑事件
Yii::$app->view->off(\yii\web\View::EVENT_END_BODY, [\yii\debug\Module::getInstance(), 'renderToolbar']);

阅读全文 »

Request组件和Response组件

发表于 2017-07-03 | 更新于 2018-12-10 | 分类于 yii , 请求和响应组件 | 阅读次数:

Request组件

前言

Request 中的方法并不难,主要是一些功能的封装罢了,原理上没有很复杂的东西。只是涉及到许多HTTP的有关知识,具体的代码分析和相关知识可以看

这里主要归纳一下使用方法,以常用的 yii\web\Request 为例

请求头请求体

getHeaders() 获取请求头

可以获取所有的请求头

getRawBody() 获取请求体

使用了 php://input 来获取请求体,这个 php://input 有这么几个特点:

php://input 是个只读流,用于获取请求体。
php://input 是返回整个HTTP请求中,除去HTTP头部的全部原始内容, 而不管是什么 Content Type(或称为编码方式)。 相比较之下, $_POST 只支持 application/x-www-form-urlencoded 和 multipart/form-data-encoded 两种 Content Type 。其中前一种就是简单的HTML表单以 method="post" 提交时的形式, 后一种主要是用于上传文档。因此,对于诸如 application/json 等 Content Type,这往往是在 AJAX 场景下使用, 那么使用 $_POST 得到的是空的内容,这时就必须使用 php://input 。
相比较于 $HTTP_RAW_POST_DATA , php://input 无需额外地在 php.ini 中 激活 always-populate-raw-post-data ,而且对于内存的压力也比较小。
当编码方式为 multipart/form-data-encoded 时, php://input 是无效的。这种情况一般为上传文档。 这种情况可以使用传统的 $_FILES 或者 yii\web\UploadedFile

阅读全文 »

Yii-model

发表于 2017-07-03 | 更新于 2018-12-10 | 分类于 yii , model | 阅读次数:

前言

简单的接收数据的表单,使用继承自 Model 类的模型即可,如果是需要增删改之类的牵扯到表的则用 Active Record 活动记录(也是继承自 Model)

下面所述,字段和属性一个意思

像数组一样访问和遍历模型

可像访问数组单元项一样访问属性,这要感谢 yii\base\Model 支持 ArrayAccess 数组访问参考链接 和 ArrayIterator 数组迭代器参考链接:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
public function actionModel()
{
$model = new TestForm;
// 显示所有的公有属性
var_dump($model->attributes);
// yii\base\Model 支持 ArrayAccess 数组访问 可以像访问数组但愿项一样访问属性
$model['name'] = 'example';
echo $model['name'];
// Model 支持 ArrayIterator 数组迭代器,迭代器遍历模型,访问所有的公有属性
foreach ($model as $name => $value) {
echo "$name: $value\n";
}
}

阅读全文 »
1…5678
echo-ding

echo-ding

纸上得来终觉浅,绝知此事要躬行。

44 日志
26 分类
54 标签
GitHub E-Mail 微博 知乎
Links
  • bunao
© 2019 echo-ding
由 Hexo 强力驱动 v3.3.7