laravel-swoole icon indicating copy to clipboard operation
laravel-swoole copied to clipboard

Custom main application class (instanceof instanceof Container class)

Open HASSANDL opened this issue 2 years ago • 2 comments

I use instanceof Laravel\Lumen\Application for main app class (instanceof instanceof Container class) but you check app instanceof Container class in src/Concerns/WithApplication.php

/**
     * @return \Illuminate\Contracts\Container\Container|mixed
     * @throws \ReflectionException
     */
    public function getApplication()
    {
        if (! $this->app instanceof Container) {
            $this->app = $this->loadApplication();
            $this->bootstrap();
        }

        return $this->app;
    }

when start swoole show below error:

Uncaught Illuminate\Contracts\Container\BindingResolutionException: Target [Illuminate\Contracts\Http\Kernel] is not instantiable. in /var/www/ts_back/vendor/illuminate/container/Container.php:1089
Stack trace:
#0 /var/www/ts_back/vendor/illuminate/container/Container.php(886): Illuminate\Container\Container->notInstantiable()
#1 /var/www/ts_back/vendor/illuminate/container/Container.php(758): Illuminate\Container\Container->build()
#2 /var/www/ts_back/vendor/illuminate/container/Container.php(694): Illuminate\Container\Container->resolve()
#3 /var/www/ts_back/vendor/laravel/lumen-framework/src/Application.php(300): Illuminate\Container\Container->make()
#4 /var/www/ts_back/vendor/swooletw/laravel-swoole/src/Concerns/WithApplication.php(148): Laravel\Lumen\Application->make()
#5 /var/www/ts_back/vendor/swooletw/laravel-swoole/src/Concerns/WithApplication.php(31): SwooleTW\Http\Server\Manager->getBootstrappers()
#6 /var/www/ts_back/vendor/swooletw/laravel-swoole/src/Concerns/WithApplication.php(63): SwooleTW\H {"exception":"[object] (Symfony\\Component\\ErrorHandler\\Error\\FatalError(code: 0): Uncaught Illuminate\\Contracts\\Container\\BindingResolutionException: Target [Illuminate\\Contracts\\Http\\Kernel] is not instantiable. in /var/www/ts_back/vendor/illuminate/container/Container.php:1089

when I change to if (! is_subclass_of($this->app, 'Container')) { start without problem.

HASSANDL avatar Apr 28 '22 11:04 HASSANDL

I'm getting the same problem. Any fixes?

Cryental avatar May 16 '22 18:05 Cryental

I solved by checking in bootstrap/app.php file

Added a check at the beginning of the file

<?php

if (class_exists('\Illuminate\Container\Container')) {
    return \Illuminate\Container\Container::getInstance();
}

require_once __DIR__ . '/../vendor/autoload.php';

In order not to download an already connected file https://github.com/swooletw/laravel-swoole/blob/master/src/Concerns/WithApplication.php#L52

64j avatar Dec 14 '22 08:12 64j