Laravel 4: вызов неопределенного метода Redis:: connection()
Я схожу с ума по этой ошибке. У меня есть бродячая виртуальная машина с Debian 7, сгенерированная с Puphpet, установка была в порядке.
1. Redis установлен и работает
redis-server
работает :
Я могу использовать сервер на 127.0.0.1:6379
:
2. php5-redis установлен
php5-redis
фактически установлено :
3. Что Laravel Рэдис config установлен
вот мой файл Рэдис config в 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 'SymfonyComponentDebugExceptionFatalErrorException' 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 и глобальный класс расширения "wins"
чтобы узнать, где PHP думает Redis
класс, попробовать
$r = new ReflectionClass('Redis');
var_dump($r->getClassFile());
чтобы увидеть, если #4
проблема, попробуйте вызвать службу прямо
$app = app();
$app['redis']->connection();
удачи!
эта ошибка заключается в том, что вы установили и включили модуль php5-redis, он стал с классом Redis. Чтобы избежать этой ошибки и использовать фасад Laravel Redis, необходимо изменить псевдоним в app/config / app.php (или что-то еще в вашей среде).
'Redis' => 'Illuminate\Support\Facades\Redis'
'RedisFacade' => 'Illuminate\Support\Facades\Redis' //whatever you like
или просто настройте свой кэш.php использовать Redis и использовать только класс кэша. :)
установите расширение 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
редактировать добавлять
extension=php_redis.dll
перезагрузите сервер и проверьте phpinfo();
. Теперь редис должен быть там!