Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Uncaught ErrorException: Return type of cebe\openapi\spec\Paths::offsetExists($offset) ... #67

Closed
b166er opened this issue Oct 14, 2021 · 2 comments

Comments

@b166er
Copy link

b166er commented Oct 14, 2021

I'm confused about this exception and have no idea how to resolve it. After doing some testing, I can't figure out what the problem is.

my test-case:

<?php

namespace Tests\Feature;

use Tests\TestCase;
use Spectator\Spectator;

class RootTest extends TestCase {

    /**
     * A basic test example.
     *
     * @return void
     */
    public function testGetRootPath() {
        Spectator::using('test.yaml');
        $response = $this->get('/');
        $response->assertStatus(301);
    }

}

my /routes/api.php:

// root move to First API
Route::get('/', function () {
    return redirect()->route('test.index', [], Response::HTTP_MOVED_PERMANENTLY);
})->name('root');

my test.yaml

openapi: 3.0.0
info:
  version: 1.0.0
  title: TestAPI
paths:
    "/":
        "get":
            summary: "Root Path"
            tags:
                - root
            responses:
                "301":
                    description: "Moved permanently to Index"

Full Stack Exception:

Fatal error: During inheritance of ArrayAccess: Uncaught ErrorException: Return type of cebe\openapi\spec\Paths::offsetExists($offset) should either be compatible with ArrayAccess::offsetExists(mixed $offset): bool, or the #[\ReturnTypeWillChange] attribute should be used to temporarily suppress the notice in /var/www/php/vendor/cebe/php-openapi/src/spec/Paths.php:181
Stack trace:
#0 /var/www/php/vendor/cebe/php-openapi/src/spec/Paths.php(31): Illuminate\Foundation\Bootstrap\HandleExceptions->handleError(8192, 'Return type of ...', '/var/www/php/ve...', 181)
#1 /var/www/php/vendor/composer/ClassLoader.php(571): include('/var/www/php/ve...')
#2 /var/www/php/vendor/composer/ClassLoader.php(428): Composer\Autoload\includeFile('/var/www/php/ve...')
#3 /var/www/php/vendor/cebe/php-openapi/src/SpecBaseObject.php(170): Composer\Autoload\ClassLoader->loadClass('cebe\\openapi\\sp...')
#4 /var/www/php/vendor/cebe/php-openapi/src/SpecBaseObject.php(134): cebe\openapi\SpecBaseObject->instantiate('cebe\\openapi\\sp...', Array)
#5 /var/www/php/vendor/cebe/php-openapi/src/Reader.php(56): cebe\openapi\SpecBaseObject->__construct(Array)
#6 /var/www/php/vendor/cebe/php-openapi/src/Reader.php(135): cebe\openapi\Reader::readFromYaml('openapi: 3.0.0\r...', 'cebe\\openapi\\sp...')
#7 /var/www/php/vendor/hotmeteor/spectator/src/RequestFactory.php(92): cebe\openapi\Reader::readFromYamlFile('/var/www/php/st...')
#8 /var/www/php/vendor/hotmeteor/spectator/src/Middleware.php(139): Spectator\RequestFactory->resolve()
#9 /var/www/php/vendor/hotmeteor/spectator/src/Middleware.php(108): Spectator\Middleware->pathItem('/', 'GET')
#10 /var/www/php/vendor/hotmeteor/spectator/src/Middleware.php(59): Spectator\Middleware->validate(Object(Illuminate\Http\Request), Object(Closure))
#11 /var/www/php/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(167): Spectator\Middleware->handle(Object(Illuminate\Http\Request), Object(Closure))
#12 /var/www/php/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(103): Illuminate\Pipeline\Pipeline->Illuminate\Pipeline\{closure}(Object(Illuminate\Http\Request))
#13 /var/www/php/vendor/laravel/framework/src/Illuminate/Routing/Router.php(697): Illuminate\Pipeline\Pipeline->then(Object(Closure))
#14 /var/www/php/vendor/laravel/framework/src/Illuminate/Routing/Router.php(672): Illuminate\Routing\Router->runRouteWithinStack(Object(Illuminate\Routing\Route), Object(Illuminate\Http\Request))
#15 /var/www/php/vendor/laravel/framework/src/Illuminate/Routing/Router.php(636): Illuminate\Routing\Router->runRoute(Object(Illuminate\Http\Request), Object(Illuminate\Routing\Route))
#16 /var/www/php/vendor/laravel/framework/src/Illuminate/Routing/Router.php(625): Illuminate\Routing\Router->dispatchToRoute(Object(Illuminate\Http\Request))
#17 /var/www/php/vendor/laravel/framework/src/Illuminate/Foundation/Http/Kernel.php(166): Illuminate\Routing\Router->dispatch(Object(Illuminate\Http\Request))
#18 /var/www/php/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(128): Illuminate\Foundation\Http\Kernel->Illuminate\Foundation\Http\{closure}(Object(Illuminate\Http\Request))
#19 /var/www/php/app/Http/Middleware/TrailingSlash.php(28): Illuminate\Pipeline\Pipeline->Illuminate\Pipeline\{closure}(Object(Illuminate\Http\Request))
#20 /var/www/php/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(167): App\Http\Middleware\TrailingSlash->handle(Object(Illuminate\Http\Request), Object(Closure))
#21 /var/www/php/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/TransformsRequest.php(21): Illuminate\Pipeline\Pipeline->Illuminate\Pipeline\{closure}(Object(Illuminate\Http\Request))
#22 /var/www/php/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/ConvertEmptyStringsToNull.php(31): Illuminate\Foundation\Http\Middleware\TransformsRequest->handle(Object(Illuminate\Http\Request), Object(Closure))
#23 /var/www/php/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(167): Illuminate\Foundation\Http\Middleware\ConvertEmptyStringsToNull->handle(Object(Illuminate\Http\Request), Object(Closure))
#24 /var/www/php/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/TransformsRequest.php(21): Illuminate\Pipeline\Pipeline->Illuminate\Pipeline\{closure}(Object(Illuminate\Http\Request))
#25 /var/www/php/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/TrimStrings.php(40): Illuminate\Foundation\Http\Middleware\TransformsRequest->handle(Object(Illuminate\Http\Request), Object(Closure))
#26 /var/www/php/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(167): Illuminate\Foundation\Http\Middleware\TrimStrings->handle(Object(Illuminate\Http\Request), Object(Closure))
#27 /var/www/php/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/ValidatePostSize.php(27): Illuminate\Pipeline\Pipeline->Illuminate\Pipeline\{closure}(Object(Illuminate\Http\Request))
#28 /var/www/php/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(167): Illuminate\Foundation\Http\Middleware\ValidatePostSize->handle(Object(Illuminate\Http\Request), Object(Closure))
#29 /var/www/php/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/PreventRequestsDuringMaintenance.php(86): Illuminate\Pipeline\Pipeline->Illuminate\Pipeline\{closure}(Object(Illuminate\Http\Request))
#30 /var/www/php/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(167): Illuminate\Foundation\Http\Middleware\PreventRequestsDuringMaintenance->handle(Object(Illuminate\Http\Request), Object(Closure))
#31 /var/www/php/vendor/fruitcake/laravel-cors/src/HandleCors.php(38): Illuminate\Pipeline\Pipeline->Illuminate\Pipeline\{closure}(Object(Illuminate\Http\Request))
#32 /var/www/php/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(167): Fruitcake\Cors\HandleCors->handle(Object(Illuminate\Http\Request), Object(Closure))
#33 /var/www/php/vendor/fideloper/proxy/src/TrustProxies.php(57): Illuminate\Pipeline\Pipeline->Illuminate\Pipeline\{closure}(Object(Illuminate\Http\Request))
#34 /var/www/php/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(167): Fideloper\Proxy\TrustProxies->handle(Object(Illuminate\Http\Request), Object(Closure))
#35 /var/www/php/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(103): Illuminate\Pipeline\Pipeline->Illuminate\Pipeline\{closure}(Object(Illuminate\Http\Request))
#36 /var/www/php/vendor/laravel/framework/src/Illuminate/Foundation/Http/Kernel.php(141): Illuminate\Pipeline\Pipeline->then(Object(Closure))
#37 /var/www/php/vendor/laravel/framework/src/Illuminate/Foundation/Http/Kernel.php(110): Illuminate\Foundation\Http\Kernel->sendRequestThroughRouter(Object(Illuminate\Http\Request))
#38 /var/www/php/vendor/laravel/framework/src/Illuminate/Foundation/Testing/Concerns/MakesHttpRequests.php(510): Illuminate\Foundation\Http\Kernel->handle(Object(Illuminate\Http\Request))
#39 /var/www/php/vendor/laravel/framework/src/Illuminate/Foundation/Testing/Concerns/MakesHttpRequests.php(294): Illuminate\Foundation\Testing\TestCase->call('GET', '/', Array, Array, Array, Array)
#40 /var/www/php/tests/Feature/RootTest.php(17): Illuminate\Foundation\Testing\TestCase->get('/')
#41 /var/www/php/vendor/phpunit/phpunit/src/Framework/TestCase.php(1527): Tests\Feature\RootTest->testGetRootPath()
#42 /var/www/php/vendor/phpunit/phpunit/src/Framework/TestCase.php(1133): PHPUnit\Framework\TestCase->runTest()
#43 /var/www/php/vendor/phpunit/phpunit/src/Framework/TestResult.php(722): PHPUnit\Framework\TestCase->runBare()
#44 /var/www/php/vendor/phpunit/phpunit/src/Framework/TestCase.php(885): PHPUnit\Framework\TestResult->run(Object(Tests\Feature\RootTest))
#45 /var/www/php/vendor/phpunit/phpunit/src/Framework/TestSuite.php(678): PHPUnit\Framework\TestCase->run(Object(PHPUnit\Framework\TestResult))
#46 /var/www/php/vendor/phpunit/phpunit/src/Framework/TestSuite.php(678): PHPUnit\Framework\TestSuite->run(Object(PHPUnit\Framework\TestResult))
#47 /var/www/php/vendor/phpunit/phpunit/src/Framework/TestSuite.php(678): PHPUnit\Framework\TestSuite->run(Object(PHPUnit\Framework\TestResult))
#48 /var/www/php/vendor/phpunit/phpunit/src/TextUI/TestRunner.php(670): PHPUnit\Framework\TestSuite->run(Object(PHPUnit\Framework\TestResult))
#49 /var/www/php/vendor/phpunit/phpunit/src/TextUI/Command.php(143): PHPUnit\TextUI\TestRunner->run(Object(PHPUnit\Framework\TestSuite), Array, Array, true)
#50 /var/www/php/vendor/phpunit/phpunit/src/TextUI/Command.php(96): PHPUnit\TextUI\Command->run(Array, true)
#51 /var/www/php/vendor/phpunit/phpunit/phpunit(92): PHPUnit\TextUI\Command::main()
#52 {main} in /var/www/php/vendor/cebe/php-openapi/src/spec/Paths.php on line 31

if i execute this small php-code i get same exception:

namespace App\Http\Controllers;
use cebe\openapi\spec\Paths;
use App\Http\Controllers\Controller;

class TestController extends Controller {
  public function test() {
        $input = ['/' => [
                'get' => [
                    'summary' => 'Root Path',
                    'tags' => [
                        0 => 'root'
                    ],
                    'responses' => [
                        301 => [
                            'description' => 'Moved permanently to Index'
                        ]
                    ]
                ]
        ]];
        $test = new Paths($input);
        var_dump($test);
  }
}

any ideas? maybe my test.yaml schema has a bug or is malformed?

@b166er
Copy link
Author

b166er commented Oct 14, 2021

ok, sorry, nvm, i found the bug, it's my php 8.1, it's not safe for phpunit: cebe/php-openapi#123

@hotmeteor
Copy link
Owner

@b166er Thanks, I'll see if I can get it to be PHP 8.1 compatible.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

3 participants