I'm going crazy about this error. I've got a vagrant VM with Debian 7, generated with Puphpet, installation was fine.
1. Redis is installed and working
redis-server
is running :
I can use the server on 127.0.0.1:6379
:
2. php5-redis is installed
php5-redis
is actually installed :
3. Laravel Redis config is set
Here is my redis config file in app/local/database.php
:
'redis' => [
'cluster' => false,
'default' => [
'host' => '127.0.0.1',
'port' => 6379,
'database' => 0,
],
],
4. The call to Redis is simple :
// Get redis
$redis = Redis::connection();
5. I tried a lot of things
sudo service nginx reload
sudo service redis-server force-reload
composer dumpautoload
But nothing solved the error.
I'm still having :
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
(line 16 is where I do the connection $redis = Redis::connection();
)
Where am I wrong ?
Btw, I hate mondays >.>
Install Redis extension on your PC.
Download the CORRECT version the DDL from the following link: https://pecl.php.net/package/redis/4.1.0/windows
Put the dll in the correct folder
Edit the
php.ini
file addingRestart server and check
phpinfo();
. Now Redis should be there!That error is because you have installed and enabled the module php5-redis, it became with the class Redis. To avoid that error and use the Laravel Redis Facade, you have to change the alias in app/config/app.php (or whatever is your environment).
'Redis' => 'Illuminate\Support\Facades\Redis'
'RedisFacade' => 'Illuminate\Support\Facades\Redis' //whatever you like
or just configure your cache.php to use Redis and use only the Cache class. :)
The problem isn't with your redis server setup -- there's something mis-configured or changed in your system.
The error you're seeing
Is PHP telling you it can't find a method named
connection
on the classRedis
. It's a PHP error, and PHP never gets around to trying to talk to the redis server.Normally, in a Laravel 4.2 system, there is no class named
Redis
. Instead, an alias is setup inapp/config/app.php
which turns
Redis
into a facade. This is what enables you to make calls likeRedis::connection
.So, there's something wrong with your system. Either you
Have a custom class named
Redis
somewhere that's loaded before the aliases are setupHave
Redis
aliased to something other than a theIlluminate\Support\Facades\Redis
facade classYou
Redis
facade class has been modified to return a service identifier other thanredis
You've rebound the
redis
service as some other classPer the comments below, you have the
Redis
PHP extension installed and the global extension class "wins"To find out where PHP thinks the
Redis
class is, tryTo see if
#4
is the problem, try calling the service directlyGood luck!
I came across this after encountering this issue and wanted to add another answer in case it helps someone else.
In my case there was an alias collision because my php configuration has the PHP-Redis module/extension enabled -- both the PHP module and Laravel seem to have a conflicting object named Redis. I was able to resolve this simply by using the entire namespaced identifier: