Trying to access array offset on value of type null

Random Name picture Random Name · Dec 13, 2019 · Viewed 38.8k times · Source

Migrating from php 7.1 to 7.4. We have like 500 functional tests for an API, and some of them started to fail with an error after the migration was complete. These tests were passing before everywhere, and now fail everywhere - not all, just 39.

Environment information:

  • php 7.4
  • codeception
  • yii2

Stack trace:

...\api\vendor\codeception\codeception\src\Codeception\Subscriber\ErrorHandler.php:83
...\api\tests\functional\SomeFileHereCest.php:72
...\api\vendor\codeception\codeception\src\Codeception\Lib\Di.php:127
...\api\vendor\codeception\codeception\src\Codeception\Test\Cest.php:138
...\api\vendor\codeception\codeception\src\Codeception\Test\Cest.php:97
...\api\vendor\codeception\codeception\src\Codeception\Test\Cest.php:80
...\api\vendor\codeception\codeception\src\Codeception\Test\Test.php:88
... more stuff here, not important

Since ErrorHandler.php:83 this is just catching the error, let's look at the SomeFileHereCest.php:72:

// declaration of the apiPrefix variable in the class.
protected $apiPrefix;
//...

public function _before(FunctionalTester $I)
{
    $this->apiPrefix = $this->config['backend']['api_prefix']; // this is the line 72
    //... more similar stuff later

So the $this->config['backend']['api_prefix'] this is a string("v1")

And I dont see where is the issue with this and how to dig into it deeper. Any ideas?

Answer

delboy1978uk picture delboy1978uk · Dec 13, 2019

Sounds like your variable isn't set.

Check with the following isset calls:

isset($this->config); 
isset($this->config['backend']);
isset($this->config['backend']['api_prefix']);

You can actually check multiple vars in one isset call (isset($x, $y, $z)), but this will let you see which var specifically is missing