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

gre*_*ena 10 redis laravel laravel-4

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

1. Redis已安装并正常运行

redis-server 在跑 :

redis-server正在运行

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

在此输入图像描述

2.安装了php5-redis

php5-redis 实际安装:

在此输入图像描述

3. Laravel Redis配置已设置

这是我的redis配置文件app/local/database.php:

'redis' => [

    'cluster' => false,

    'default' => [
    'host'     => '127.0.0.1',
    'port'     => 6379,
    'database' => 0,
    ],
],
Run Code Online (Sandbox Code Playgroud)

4.对Redis的调用很简单:

// Get redis
$redis = Redis::connection();
Run Code Online (Sandbox Code Playgroud)

我尝试了很多东西

sudo service nginx reload
sudo service redis-server force-reload
composer dumpautoload
Run Code Online (Sandbox Code Playgroud)

但没有解决错误.


我还在:

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
Run Code Online (Sandbox Code Playgroud)

(第16行是我连接的地方$redis = Redis::connection();)

我哪里错了?

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

Nei*_*man 18

我在遇到这个问题后遇到了这个问题,并希望添加另一个答案,以防它帮助其他人.

在我的情况下,存在别名冲突,因为我的php配置启用了PHP-Redis模块/扩展 - PHP模块和Laravel似乎都有一个名为Redis的冲突对象.我只需使用整个命名空间标识符即可解决此问题:

//$r = Redis::connection() 
$r = Illuminate\Support\Facades\Redis::connection();
Run Code Online (Sandbox Code Playgroud)

  • 或者您可以在app.php> aliases下添加具有相同值的附加条目.示例:``'Redis2'=>'照亮\支持\ Facades\Redis',``然后执行``php artisan dump-autoload`` (2认同)

Ala*_*orm 5

问题不在于您的redis服务器设置 - 您的系统中存在错误配置或更改的内容.

你看到的错误

Call to undefined method Redis::connection()
Run Code Online (Sandbox Code Playgroud)

PHP告诉你它无法找到connection类上命名的方法Redis.这是一个PHP错误,PHP永远不会试图与redis服务器通信.

通常,在Laravel 4.2系统中,没有名为的类Redis.而是设置别名app/config/app.php

#File: app/config/app.php
'Redis'           => 'Illuminate\Support\Facades\Redis',
Run Code Online (Sandbox Code Playgroud)

变成Redis了立面.这使你可以拨打电话Redis::connection.

所以,你的系统出了问题.不管你

  1. Redis在设置别名之前,有一个名为somewhere 的自定义类

  2. Redis化名为比其他一些Illuminate\Support\Facades\Redis门面类

  3. Redis已对外观类进行了修改,以返回除以外的服务标识符redis

  4. redis像其他一些班级一样反弹这项服务

  5. 根据下面的注释,您已Redis安装PHP扩展并且全局扩展类"wins"

要找出PHP认为Redis课程的位置,请尝试

$r = new ReflectionClass('Redis');
var_dump($r->getClassFile());
Run Code Online (Sandbox Code Playgroud)

要查看#4问题是否存在,请尝试直接调用该服务

$app = app();
$app['redis']->connection();
Run Code Online (Sandbox Code Playgroud)

祝好运!

  • 我最近遇到了这个问题,安装了PHP 5.6,碰巧运行了php-redis模块 - 我在这里发现了这篇文章以及一个Laravel github问题:https://github.com/laravel/framework/问题/ 1066.在我的情况下,并且因为它似乎偶尔发生,Laravel Redis别名正在与Redis PHP模块发生冲突.似乎最好的解决方案是在Laravel中找到别名定义并将其重命名为LRedis (2认同)