Dotenv must be an instance of Dotenv\Loader

mrsparrow picture mrsparrow · Feb 28, 2019 · Viewed 11.2k times · Source

I installed phpdotenv from vlucas using composer on a codeigniter project.

I have added the hook as well which I am bit confused if needed for v3.3

    $hook['pre_system'] = function() {
    $dotenv = new Dotenv\Dotenv(APPPATH);
    $dotenv->load();
};

If I don't add this hook I can't retrieve variables from my .env file. If I do add it, then I get this error:

Message: Argument 1 passed to Dotenv\Dotenv::__construct() must be an instance of Dotenv\Loader, string given, called in C:\xampp\htdocs\test\application\config\hooks.php on line 15

Filename: C:\xampp\htdocs\test\vendor\vlucas\phpdotenv\src\Dotenv.php

Seems like the class is loading but it doesn't like the parameter "APPPATH" but all of the documentation I have found uses that.

Any help appreciated

Answer

mrsparrow picture mrsparrow · Feb 28, 2019

Ok so changing that hook to this seems to be working, I am not entirely sure it's the correct approach but digging into the library code seems ok.

$hook['pre_system'] = function() {
    $dotenv = Dotenv\Dotenv::create(__DIR__);
    $dotenv->load();
}

If this is wrong for any reason please let me know. Thanks