Laravel 4:调用未定义的方法Redis :: connection()

时间:2014-09-22 13:51:20

标签: laravel laravel-4 redis

我对这个错误感到疯狂。 我有一个带有Debian 7的流浪汉VM,用Puphpet生成,安装很好。

1。 Redis已安装并正常运行

redis-server正在运行:

redis-server running

我可以在127.0.0.1:6379上使用服务器:

enter image description here

2。已安装php5-redis

实际安装了

php5-redis

enter image description here

3。 Laravel Redis配置已设置

以下是app/local/database.php中的redis配置文件:

'redis' => [

    'cluster' => false,

    'default' => [
    'host'     => '127.0.0.1',
    'port'     => 6379,
    'database' => 0,
    ],
],

4。对Redis的调用很简单:

// Get redis
$redis = Redis::connection();

5。我尝试了很多东西

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();

我哪里错了?

顺便说一句,我讨厌星期一>。>

4 个答案:

答案 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

等电话

所以,你的系统出了问题。你要么

  1. 在设置别名之前加载一个名为Redis的自定义类

  2. Redis别名为Illuminate\Support\Facades\Redis外观类别

  3. Redis外观类已被修改为返回redis以外的服务标识

  4. 您已将redis服务作为其他类

  5. 反弹
  6. 根据以下评论,您已安装Redis PHP扩展程序,全局扩展程序类为“wins”

  7. 要找出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应该在那里了!