Laravel 4: вызов неопределенного метода Redis::connection()

Я схожу с ума по этой ошибке. У меня есть бродячая виртуальная машина с Debian 7, сгенерированная с помощью Puphpet, установка прошла нормально.

1. Redis установлен и работает

redis-server бежит:

Redis-сервер работает

Я могу использовать сервер на 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,
    ],
],

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 ответа

Решение

Я столкнулся с этим после столкновения с этой проблемой и хотел добавить другой ответ на случай, если это поможет кому-то еще.

В моем случае произошла коллизия псевдонимов, потому что в моей конфигурации php включен модуль / расширение PHP-Redis - и у модуля PHP, и у Laravel, похоже, конфликтующий объект с именем Redis. Я смог решить эту проблему, просто используя весь идентификатор пространства имен:

//$r = Redis::connection() 
$r = Illuminate\Support\Facades\Redis::connection();

Проблема не в настройке вашего сервера 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. Согласно комментариям ниже, у вас есть Redis PHP расширение установлено и глобальный класс расширения "выигрывает"

Чтобы узнать, где PHP думает Redis класс есть, попробуй

$r = new ReflectionClass('Redis');
var_dump($r->getClassFile());

Увидеть, если #4 это проблема, попробуйте позвонить в службу напрямую

$app = app();
$app['redis']->connection();

Удачи!

Эта ошибка связана с тем, что вы установили и включили модуль 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.:)

Установите расширение 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 должен быть там!

Другие вопросы по тегам