Laravel 4: вызов неопределенного метода Redis::connection()
Я схожу с ума по этой ошибке. У меня есть бродячая виртуальная машина с Debian 7, сгенерированная с помощью Puphpet, установка прошла нормально.
1. Redis установлен и работает
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,
],
],
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
,
Итак, что-то не так с вашей системой. Или вы
Есть пользовательский класс с именем
Redis
где-то, что загружается до настройки псевдонимовЕсть
Redis
псевдоним к чему-то другому, чемIlluminate\Support\Facades\Redis
фасадный классВы
Redis
Класс фасада был изменен для возврата идентификатора службы, отличного отredis
Вы отскок
redis
сервис как какой-то другой классСогласно комментариям ниже, у вас есть
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 должен быть там!