guanguans
guanguans
> It seems to be broken.
# laravel 中根据请求路径、方法匹配路由实例 ## 需求 最近由于业务功能的需求,需要根据数据库记录的请求路径(如`admin/auth/menu/46/edit`)、请求方法(如`GET`)去匹配路由实例,拿到路由实例后续做一些其他事情。 ## 分析 其实就是路由的核心功能(将一类请求映射匹配到一个回调类型的变量)。框架本身自带的功能,查找源码是以下代码块实现的: ```php // Illuminate/Routing/RouteCollection.php public function match(Request $request) { // 1. 获取路由集合 $routes = $this->get($request->getMethod()); // 2. 匹配路由 $route = $this->matchAgainstRoutes($routes, $request);...
# 递归匿名函数手动实现 http_build_query 系统函数 > 最近觉得 [http_build_query](https://www.php.net/manual/zh/function.http-build-query.php) 函数的功能蛮神奇的。可以将任意一个复杂数组转换成一个复杂的 URL 查询字符串。于是自己尝试手动实现了一下([user_http_build_query](https://github.com/guanguans/laravel-skeleton/blob/master/app/Support/helpers.php#L9-L104))。 ## 版本一、主函数递归额外辅助函数实现 ```php /** * http_build_query 的实现。 * * @param array $queryPayload * @param string $numericPrefix * @param string $argSeparator...
# laravel 中 in 多列特殊查询类型解决方案 > SQL 查询中有一种 in 多列特殊查询类型,大概是这个样子 `select * from order where (id,buyer) in(( 1, '张三' ),( 2, '李四' )) and order.deleted_at is null`。laravel 的查询构建器并没有直接支持该类型的查询。我这边通过查询构建器 `Macroable` 新增了一个...
# 分享一个简单的 laravel 应用健康检查命令 > 分享一个简单的 laravel 应用健康检查命令([HealthCheckCommand](https://github.com/guanguans/laravel-skeleton/blob/master/app/Console/Commands/HealthCheckCommand.php))。 ## 效果  ## HealthCheckCommand ```php
# 分享一个便捷、通用的 laravel 模型属性转换器 > 分享一下自己编写的一个便捷、`通用` 的 laravel 模型属性[转换器类](https://github.com/guanguans/laravel-skeleton/blob/master/app/Casts/CallbackGetCast.php)。可便捷的通过调用 `回调类型的字符串` 对属性进行转换。 ## 通用访问器 CallbackGetCast ```php
# PHP 字符串中直接解析函数的写法  PHP 中的字符串理论上是不能够解析函数的,仅能够解析变量。最近发现一种特殊的写法,是可以让字符串直接解析函数的。 ## 写法 ```php // 单行 ${!${''} = 代码} // 多行 ${!${''} = 代码 } ``` ## 分析 首先要知道 PHP 中 `$varName` 与 `${'varName'}` 指的是同一个名称的变量。如果要声明一个名称为`空`的变量只能通过这样...
# 组建自己的 PHP 框架 大约在两三年前自己就有过写个 PHP web 框架的想法,期间也尝试过去实践开发,但总是由于各种各样的原因并没有完成。 这次终于恒心下来,忙里偷闲的组建了一个自己的 PHP 微框架。前前后后零零碎碎的开发了快一个月的时间,直到今天完成文档的编写,才向大家呈现。 除了框架本身的([Coole](https://github.com/guanguans/coole))核心代码,还提供一个框架应用([coolephp/skeleton](https://github.com/coolephp/skeleton))模板,另外编写了一份简陋的[文档](https://www.guanguans.cn/coole), 望能给 `也想写框架的人带来一点参考`(大神请忽略)。 ## 生命周期  1. 客户端向入口脚本 index.php 发起请求。 2. 入口脚本中创建应用,向应用中注册配置服务、核心服务、第三方服务。 3. 定义路由,载入到应用中。 4. 启动运行应用。 5. 创建请求对象。 6....
# Yii 中优雅的使用事件  ## Yii 中使用一个事件大概是这个样子的 ``` php // 绑定事件 $component->on($event::EVENT_NAME, [$object, 'methodNameA']); $component->on($event::EVENT_NAME, [$object, 'methodNameB']); // 触发事件 $component->trigger($event::EVENT_NAME, $event); ``` > 从上面代码中可以看出如果要触发一个 5 个监听监听的事件,是要入侵 6 行代码的,这显然是不够优雅的,所以写了个组件包将事件与监听绑定写在组件配置文件,调用的时候只需一行代码去触发事件。 ## 环境要求...