我对这个错误感到疯狂。 我有一个带有Debian 7的流浪汉VM,用Puphpet生成,安装很好。
redis-server
正在运行:
我可以在127.0.0.1:6379
上使用服务器:
php5-redis
:
以下是app/local/database.php
中的redis配置文件:
'redis' => [
'cluster' => false,
'default' => [
'host' => '127.0.0.1',
'port' => 6379,
'database' => 0,
],
],
// Get redis
$redis = Redis::connection();
sudo service nginx reload
sudo service redis-server force-reload
composer dumpautoload
但没有解决错误。
我还在:
ERROR: exception 'Symfony\Component\Debug\Exception\FatalErrorException' with message 'Call to undefined method Redis::connection()' in /var/www/fd/app/menus/admin.menu.php:16
(第16行是我进行连接的地方$redis = Redis::connection();
)
我哪里错了?
顺便说一句,我讨厌星期一>。>
答案 0 :(得分:16)
我在遇到这个问题后遇到了这个问题,并希望添加另一个答案,以防它帮助其他人。
在我的情况下,存在别名冲突,因为我的php配置启用了PHP-Redis模块/扩展 - PHP模块和Laravel似乎都有一个名为Redis的冲突对象。我只需使用整个命名空间标识符即可解决此问题:
//$r = Redis::connection()
$r = Illuminate\Support\Facades\Redis::connection();
答案 1 :(得分:5)
问题不在于您的redis服务器设置 - 您的系统中存在错误配置或更改的内容。
您看到的错误
Call to undefined method Redis::connection()
PHP是否告诉您它无法在类connection
上找到名为Redis
的方法。这是一个PHP错误,PHP从未尝试与redis服务器通信。
通常,在Laravel 4.2系统中,没有名为Redis
的类。而是在app/config/app.php
#File: app/config/app.php
'Redis' => 'Illuminate\Support\Facades\Redis',
将Redis
变为外观。这使您能够拨打Redis::connection
。
所以,你的系统出了问题。你要么
在设置别名之前加载一个名为Redis
的自定义类
让Redis
别名为Illuminate\Support\Facades\Redis
外观类别
您Redis
外观类已被修改为返回redis
以外的服务标识
您已将redis
服务作为其他类
根据以下评论,您已安装Redis
PHP扩展程序,全局扩展程序类为“wins”
要找出PHP认为Redis
类的位置,请尝试
$r = new ReflectionClass('Redis');
var_dump($r->getClassFile());
要查看#4
是否存在问题,请尝试直接调用该服务
$app = app();
$app['redis']->connection();
祝你好运!
答案 2 :(得分:2)
该错误是因为您已经安装并启用了模块php5-redis,它变成了Redis类。要避免该错误并使用Laravel Redis Facade,您必须更改app / config / app.php中的别名(或者您的环境中的任何内容)。
'Redis' => 'Illuminate\Support\Facades\Redis'
'RedisFacade' => 'Illuminate\Support\Facades\Redis' //whatever you like
或者只是将cache.php配置为使用Redis并仅使用Cache类。 :)
答案 3 :(得分:1)
在您的PC上安装Redis扩展。
从以下链接下载正确版本的DDL: https://pecl.php.net/package/redis/4.1.0/windows
将dll放入正确的文件夹
Wamp -> C:\wamp\bin\php\php-XXXX\ext
Laragon -> C:\laragon\bin\php\php-XXX\ext
编辑添加的php.ini
文件
extension=php_redis.dll
重新启动服务器并检查phpinfo();
。现在Redis应该在那里了!