Как я могу bootstrap Laravel приложение из приложения Laravel? - PullRequest
0 голосов
/ 12 февраля 2020

Я пытаюсь создать концептуальное подтверждение для решения следующей проблемы: мне нужно реорганизовать приложение Kohana в Laraval, но мы продолжаем добавлять новые функции и разрабатывать приложение. Поэтому кодовая база Kohana и Laravel должны некоторое время работать вместе.

Для подтверждения концепции я беру два приложения Laravel, одно из которых имитирует старое приложение Kohana.

Решение, которое я имею в виду, заключается в создании Middleware или поставщика услуг в приложении Laravel, которое проверяет, может ли маршрут быть разрешен в этом Laravel. В случае, если он не может разрешить маршрут, другое приложение должно быть загружено для выполнения запроса.

Когда я пытаюсь bootstrap второй Laravel из класса промежуточного программного обеспечения первого следующего появляется ошибка:

Target class [App\Http\Middleware\Illuminate\Contracts\Http\Kernel] does not exist.

При выполнении следующей строки:

$kernel = $app->make(Illuminate\Contracts\Http\Kernel::class);

Функция связующего программного обеспечения:

public function handle($request, Closure $next)
{
    $routes = Route::getRoutes();
    try {
        //route exists
        $routes->match($request);

        return $next($request);
    }
    catch (\Symfony\Component\HttpKernel\Exception\NotFoundHttpException $e){
        //route doesn't exist

        // define('LARAVEL_START', microtime(true));
        require_once env('LARAVEL_FILE_PATH').'/vendor/autoload.php';

        $app = require_once env('LARAVEL_FILE_PATH').'/bootstrap/app.php';

        $kernel = $app->make(Illuminate\Contracts\Http\Kernel::class);

        $response = $kernel->handle(
            $request = Illuminate\Http\Request::capture()
        );

        $response->send();

        $kernel->terminate($request, $response);

        exit;
    }
}

Кто-нибудь имеет представление о том, что идет не так или может быть есть предложение по другому решению?

1 Ответ

1 голос
/ 12 февраля 2020

Проблема была вызвана пространством имен.

$kernel = $app->make(Illuminate\Contracts\Http\Kernel::class);

Должно быть

$kernel = $app->make(\Illuminate\Contracts\Http\Kernel::class);

Это также относится к

 $request = Illuminate\Http\Request::capture()
...