问题原因:
因为Laravel的Redis连接实例是通过RedisManger的工厂类创建的,返回的是一个mixin的类型,因此在IDE中不能自动补全Redis的方法,缺少这个功能,使用起来有些麻烦,尤其是Redis有数十个方法,每个方法也有不少参数。
相关部分的代码如下:
/**
* @mixin \Illuminate\Redis\Connections\Connection
*/
class RedisManager implements Factory
.......
/**
* Get the connector instance for the current driver.
*
* @return \Illuminate\Contracts\Redis\Connector
*/
protected function connector()
{
$customCreator = $this->customCreators[$this->driver] ?? null;
if ($customCreator) {
return $customCreator();
}
switch ($this->driver) {
case 'predis':
return new PredisConnector;
case 'phpredis':
return new PhpRedisConnector;
}
}
解决方案
下面先看下最终的效果:
下图中可以看到,输入Redis Facades静态类名后,后面会自动提示方法名和方法参数。
这里借助的工具laravel-ide-helper
参考资料: Redis autocomplete not work? #519
项目中的安装文档需要安装相应的依赖,虽然可以区分环境安装,依赖安装后可以生成对应的帮助类文件(_ide开头的文件,主要是IDE来使用的)。
如果不想安装,可以直接将生成的_ide开头的文件,复制到自己项目的根目录中即可,IDE可以自动识别(缺点是不能自动更新,不过没有太多更新需要的话,直接复制文件,同时将文件加到 gitignore中,则比较清洁)。
主要需要两个文件:
_ide_helper.php
, 这个是安装依赖后,通过命令生成的(可以直接从别处考来,也可以安装依赖后,生成,再卸载依赖)
composer require --dev barryvdh/laravel-ide-helper
php artisan ide-helper:generate
#composer remove --dev barryvdh/laravel-ide-helper
另外一个文件是_ide_helper_redis.php
, 这个文件主要是为Redis类添加了方法描述,IDE正是通过这个文件实现的自动补全。可以从上面的github issue下载,也可以自己编辑维护。
下面只是一个示例(可能缺失某些方法,大家可以自己进行修改):
<?p