PHP
写PHP的老王
七年老码农,记录自己开发走过的坑,欢迎关注【写PHP的老王】公众号
展开
-
对于魔术方法__call,__callStatic 新的认识
误解的一般解释__call方法在对象方法不存在的时候被调用__callStatic方法在调用对象静态方法不存在的时候被调用例如class Car{ public function __call($method,$params=[]){ echo "car call\n"; }}(new Car())->color();class Bus{...原创 2019-10-15 09:13:30 · 231 阅读 · 0 评论 -
Laravel 如何完成beforeResponse功能?
背景一般的项目需求都会要求统一的输出结构,特别是对于api应用而言。因此,如果有beforeResponse的功能,则可以在数据输出之前对response进行统一格式化处理。假设这么一种场景,应用做api开发,使用抛异常的方式(自定义异常类ApiException)返回无效非法请求的情况。正常请求则返回合法数据(数组或可序列化的模型),希望返回的数据格式正常请求返回数据格式:{ "c...原创 2019-08-02 22:15:03 · 887 阅读 · 0 评论 -
你知道Laravel中Facade为什么这样实现?
Route::get('/', function () { return view('welcome');});在laravel中的路由文件routes/web.php有这么一段代码,用于配置路由。这里Route就是用Facade实现类方法get的静态调用。Laravel中的Facade解决类什么问题?在php中,很多情况都需要使用一个容器获取到所有的对象,然后再调用改对象的...原创 2019-08-04 20:24:04 · 298 阅读 · 0 评论 -
如何把 Laravel 默认邮箱登录改成用户名登录
Laravel中默认的登录是通过邮箱和密码进行登录的。那么,怎么样才能用最少的改动将它改成用密码登录呢?默认的,Laravel使用的是Illuminate\Foundation\Auth\AuthenticatesUsers这个trait完成登录功能的。通过观察AuthenticatesUsers的代码,发现下面一段很有意思的代码: protected function validate...转载 2019-08-11 18:00:44 · 901 阅读 · 0 评论 -
Laravel5.8入门系列二,快速实现用户注册登录功能
一 XAMPP 环境配置这次我们需要开始使用继承开发环境了,因为我们需要使用数据库,完成用户的登录注册功能。首先要配置好XAMPP环境,我们需要添加一个vhost,指向blog5.8的public目录。配置8000端口打开XAMPP的配置目录xampp/apache/conf,编辑http.conf文件,搜索Listen 80,然后在下面再添加一个端口监听Listen 8000。修改后...原创 2019-09-07 23:16:34 · 2171 阅读 · 0 评论 -
Laravel5.8入门系列三,添加注册邮箱验证
为了密码垃圾用户,一般在用户注册的时候都会对用户进行验证。这里我们在注册的时候填写了用户的邮箱,但在注册过程中并没有对用户邮箱的真实性进行验证,因此需要添加一个邮件验证机制。整体思路是用户注册的时候,向用户的邮箱发送一个带有特殊验证串的链接,用户点击链接之后,用户验证通过,然后就可以正常登录的,否则用户登录的时候提示用户需要邮件进行激活。修改用户数据表为了实现上面的功能,需要在用户表中添加两...原创 2019-09-08 22:00:35 · 1243 阅读 · 0 评论 -
Laravel5.8 入门系列四,实现内容发布系统的准备工作
在这一节,要讲的内容是添加一个内容发布的功能,实现网站内容的增删改查功能。在这之前,先要完成一些准备工作。创建数据表使用php artisan make:migration create_posts_table创意一个表迁移文件/database/migrations/xxxx_create_posts_table.php,生成数据表posts的数据迁移内容如下:<?phpuse ...原创 2019-09-15 22:35:26 · 246 阅读 · 0 评论 -
老王,你给我说说 Laravel 的请求是怎么到达控制器的
老王啊,你总在说Laravel的东西,能不能给我大概简单的说一下一个请求是怎么样到达我写在控制的代码中去的。中间都经历了哪些东西啊。入口Laravel5.8 入口文件为public/index.php$kernel = $app->make(Illuminate\Contracts\Http\Kernel::class);$response = $kernel->hand...转载 2019-09-18 09:02:02 · 506 阅读 · 1 评论 -
老王带你一步步看源码|Laravel 的路由匹配的过程都干了些什么?
Laravel 的路由配置有很多,可以设置域名,设置请求协议,设置请求方式,请求路径。那么,Laravel在获取到请求之后,去匹配路由都做了些什么呢?本文以Laravel5.8源码讲解,带你一步步看源码。Laravel 默认路由的验证器有四个,UriValidator,MethodValidator,SchemeValidator,HostValidator分别处理uri的匹配,请求方法的匹配,...原创 2019-09-27 09:02:37 · 533 阅读 · 0 评论 -
PHP神奇又有用的Trait
php和java,c++一样都是单继承模式。但是像python,是支持多继承(即Mixin模式)。那么如何在php中实现多继承模式?这就需要使用trait。Trait使用方式:trait Arrayabletrait{ public function toArray(){ }}class Model{ use Arrayabletrait;}$model = new Mo...原创 2019-03-04 17:40:26 · 899 阅读 · 0 评论 -
Yii2,thinkphp5,query类
考虑一个场景,一个函数需对相同表进行多次查询,多次查询中有部分查询条件相同。对于这种情况,Yii2和thinkphp5的实现方式要格外小心。在Yii2中,可以直接使用clone 复用共同的查询条件,但是thinkphp5的话,必须把相同条件再重复写一次。例如,需要查询总有效文章数,以及今日发布有效文章数。Yii2 版本$query = Post::find();$query->wh...原创 2019-03-04 17:39:20 · 626 阅读 · 0 评论 -
ThinkCMF thinkphp5.1 个人修改版本
上一个项目在api上使用了thinkphp5.1,但是后台还是使用thinkcmf5.0,tp版本是5.0 .当时就想统一thinkphp版本。最近得空有时间修改,因此在ThinkCMF 5.0.180901基础上将thinkphp版本改成5.1.29 。修改后,已经对本地测试的不兼容进行修改。ThinkCMF修改基础版本ThinkCMF 5.0.180901 正式版ThinkPHP版本...原创 2019-01-27 16:39:10 · 2222 阅读 · 0 评论 -
如何快速高效的将数组转换成树形结构
任何无限极分类都会涉及到创建一个树状层级数组。从顶级分类递归查找子分类,最终构建一个树状数组。如果分类数据是一个数组配置文件,且子类父类id没有明确的大小关系。那么我们如何高效的从一个二维数组中构建我们所需要的树状结构呢。假设数据源如下:return [ ['id'=>1,'name'=>'文章','parent_id'=>0], ['id'=>2,'name'=...原创 2019-01-27 16:40:11 · 11513 阅读 · 0 评论 -
PHP foreach 引用传递 循环之后的事情
foreach 是PHP语法中最最常用的。foreach可以直接对循环结构进行便利,也可以以引用的方式进行遍历,在遍历的过程修改原来循环结构今天就来谈谈foreach 以引用的方式,循环之后的一些事情。case 1$a = [0,1,3,5];foreach ($a as $key => &$item) { echo $item.' ';}print_r($a);...原创 2019-01-27 16:41:15 · 2251 阅读 · 0 评论 -
用sphinx给PHP加个给力的搜索功能
最近工作上需要实现搜索功能,尝试了几种方案。虽然最终线上部署的还是最low的方案,但是中间的过程还是比较有意思的。业务上根据关键字查找内容。关键字的出处多来源于标题,文章描述等。主要实现方式有一些几种,各个方式各有利弊,需要权衡。like模糊查询标题和描述,使用或条件查询like查询估计是最常用的方式了,也是最容易实现的方式。业务代码少,逻辑清晰,准确率也高。不用其他额外操作(比如分词)。但是...原创 2019-01-27 17:02:29 · 276 阅读 · 0 评论 -
PHP POST 数组限制
今天调一个接口,测试批量上传数据。上传数据用的是POST方式,分成一个多维数组上传。但是,问题来了,最多可以批量上传多少条数据?PHP默认POST数据的限制是2M,但是并不代表你就可以真的传2M以内的任意长度的数组。PHP对输入变量是有限制的。默认php.ini里的max_input_vars的限制是1000.如果POST一个二维数组,每个二维子数组里有五个元素,那么,只能POST200个子...原创 2019-01-27 17:04:57 · 3097 阅读 · 0 评论 -
PHP 依赖注入,注入容器和服务定位器
考虑一个问题,如果一个web应用需要一个日志服务,日志服务可以是文本,数据库或者邮件的形式,而且日志需要将获取的信息格式化指定的形式。应用可以根据需要,任意切换日志服务是文本还是数据库还是邮件。如果以传统的方式,日志记录的代码类似下面的形式: class Logger{ public function formatLog($log) { ...原创 2019-01-28 14:16:29 · 1227 阅读 · 0 评论 -
Yii2 源码学习--yii\base\Objec
在Yii2中,所有的类的都集成于基类Object。Object对象通过几个php的魔术方法,实现属性获取,设置,属性是否存在,属性是否可设置的方法。1.构造函数 public function __construct($config = []) { if (!empty($config)) { Yii::configure($this, ...原创 2019-02-13 14:10:35 · 201 阅读 · 0 评论 -
Laravel5.6 文件上传以及文件管理后台
今天聊聊在Laravel5.6 如何实现文件上传功能,以及上传文件的管理功能。主要有文件列表,上传新文件,创建文件夹,删除文件夹以及删除文件。首先添加一个控制器,在命令行中输入php php artisan make:controller Admin/FileController,创建一个空的FileController控制器,控制器中有下列四个方法:index 显示文件和目录列表uplo...原创 2019-02-20 10:11:12 · 1545 阅读 · 0 评论 -
你所不知道的php json解析
json解析在php,或者说在任何编程语言中都非常常见。但是,你是否知道,json解析在php中是以扩展形式存在。json处理,最常用的就是json_encode,json_decode。string json_encode ( mixed $value [, int $options = 0 [, int $depth = 512 ]] )json_encode接受三个参数,但是一般的,...原创 2019-01-27 16:35:14 · 882 阅读 · 0 评论