xunsearch fatal error openssl bio file not found
安装 openssl
,把 openssl
里面的
include
文件夹复制到 libevent-2.1.8-stable
下面
安装 openssl
,把 openssl
里面的
include
文件夹复制到 libevent-2.1.8-stable
下面
有时候我们想在命令行执行一些耗时的命令,我们可以利用
symfony
提供的进度条相关的类,来输出一个进度条,显示当前的处理进度。
1 | <?php |
效果:
输出多个进度条:
1 | $progressBar->start(); |
中间需要打印一个换行符
有时候我们想在命令执行过程中显示一个动态变化的数,同时又想输出的格式保持不变,我们可以使用
setMessage
方法
1 | $progressBar->setFormat("已处理数量: %count%"); // 这里是一个占位符,可以和进度条写在一起 |
具体效果类似:
1 | 已处理数量: 1 (这里的 1 会变更,而不是另起一行输出) |
有可能是配置缓存导致的,
运行:
1 | php artisan config:clear |
可清除配置缓存,配置缓存保存在
bootstrap/cache/config.php
,可以直接去那文件夹看看是不是缓存导致的。
还有另外一个缓存文件
bootstrap/cache/services.json
,上面的命令只是清除配置,下面的命令可以同时清除这两个缓存文件。
1 | php artisan clear-compiled |
1 | php artisan config:clear |
Macroable
给 Builder
添加自定义方法Laravel
中提供了 Macroable
的
trait
,之前一直没有想过可以用上这个东西。
最近才想到可以这么做,源码看这里:https://github.com/laravel/framework/blob/5.6/src/Illuminate/Support/Traits/Macroable.php
目前用的是 5.1
版本,应该 5.1
版本以后的都有这个特性。
当然,你也可以在 Model
基类里面添加自定义方法,但是这样添加的方法 DB
类是用不了的。
但是使用 macro
定义到 Builder
的方法可以同时在 DB
类和 Eloquent Model
中使用(具体不赘述,自己看源码,就是利用
__call
、__callStatic
这些魔术方法)。
使用方法:调用 Macroable
的 macro
方法,绑定一个自定义方法到 Builder
类中,如:
1 | \Illuminate\Database\Query\Builder\Builder::macro('active', function () { |
调用方法是(使用 DB
类):
1 | DB::table(xxx)->active()->get(); |
或者(使用 Eloquent Model
):
1 | \App\Model\User::active()->first(); |
至于我们应该把上面那几行放哪里?
个人觉得一个比较好的地方是 Providers
中,在
app/Providers
下面新建一个 Provider
,把
macro
调用放到 Provider
的
register
方法中。如:
1 | <?php |
当然,加了 Providers
之后还要在
config/app.php
中配置这个 Provider
。
就这样。
还有个问题是,这样添加的方法 ide
无法识别,我们这时候就可以使用 @method
了,如:
1 | @method $this active() |
可以使用命令把这些 @method
写入到 Builder
头部。
一直以来,想调试框架中的某些东西,如想知道 Elpquent
的
create
方法返回值是个什么东西,
以前的话,应该就是在 create
方法调用之后,使用
dd
或者 var_dump
之类的函数打印出来
如:
1 | public function getTest() |
这样一来,这个流程似乎有点冗长,因为我们还要打开浏览器查看
有了
tinker
,我们就可以直接在命令行运行我们想要测试的代码,如:
我们可以看到,create
方法返回了一个模型对象。
我们就把这个 tinker
当作可以交互式的
代码执行工具好了,我们在学习 Laravel
的过程中可以在这里直接测试 Laravel
框架中的一些用法,也可以进行调试什么的。