Перенос пользовательских веб-приложений Legacy PHP в Laravel - PullRequest
0 голосов
/ 11 марта 2020

Я пытаюсь следовать этому руководству до Миграция устаревших веб-приложений на Laravel.

Это моя ситуация:

У меня 2 веб-приложения под одним и тем же хостом, оба записаны в PHP

  • one (унаследованная версия) представляет собой «пользовательский каркас»
  • second представляет собой приложение Laravel 5.4

Моя цель состоит в том, чтобы обслуживать оба приложения только в приложении Laravel, поэтому моя уникальная точка входа для приложения - index.php из Laravel.

. Как вы можете прочитать в статья, я пытаюсь запустить устаревшее приложение внутри Laravel App\Exceptions\Handler

public function render($request, Exception $exception) {
   if( $exception instanceof NotFoundHttpException ) {
      // pass to legacy framework - contents of index.php
      die();
   }
}

, когда устаревший маршрут не найден.

Я создал свой собственный App\Providers\LegacyServiceProvider

<?php

namespace App\Providers;

use Illuminate\Support\ServiceProvider;

class LegacyServiceProvider extends ServiceProvider
{
    protected $defer = true;

    /**
     * Bootstrap the application services.
     *
     * @return void
     */
    public function boot()
    {
        //
    }

    /**
     * Register the application services.
     *
     * @return void
     */
    public function register()
    {
        $this->app->singleton("LegacyApp", function ($app){
            require_once base_path("legacy/index.php");
            return;
        });
    }
}

добавлено в config/app.php laravel файл конфигурации

    // other providers
    App\Providers\LegacyServiceProvider::class,


и теперь начинается самое интересное ... Это index.php из устаревшее приложение

<?php
require_once __DIR__ ."/app/config/conf.php";

$oSession = new Session();
$oDb = new DbMedoo();
$dbCon = $oDb->dbConn();

include __DIR__ . '/app/routes.php';

app/config/conf.php

<?php

// Some definitions here

// ROUTING
$router = new AltoRouter();

// TWIG
$loader = new Twig_Loader_Filesystem(SITE_CONFIG_DIR . "../../src/App/views");

// Other stuff here

app/routes.php file

<?php
// **************************************************
// ****************    AltoRouter   *****************
// **************************************************

$router->map( 'GET|POST', '/', 'home.php', 'home');

// Some other legacy routes here

и, наконец, простой home.php "контроллер"

<?php

// Some initial checks here

$someModelClass = new SomeModelClass();
$anotherModelClass = new AnotherModelClass();

// some other logics here

$template = $twig->loadTemplate('home.twig');

echo $template->render(array(
    'someVariables' => $someVariableToPass,
));

Как видите, я нет класса !!

END OF STORY!

Итак, когда я пытаюсь запустить устаревшее приложение в App\Exception\Handler

if( $exception instanceof NotFoundHttpException ) {
    // pass to legacy framework
    app()->make("LegacyApp");
    die(); // prevent Laravel sending a 404 response
}

Эта ошибка выглядит как

(1/1) ReflectionException
Class LegacyApp does not exist

Предложения приветствуются

Кто-то здесь с такой же ситуацией? Как я мог сделать это без рефакторинга всей кодовой базы?

Спасибо за совет

1 Ответ

0 голосов
/ 11 марта 2020

Я бы сказал, что вы не можете. И не используйте слово "рефакторинг". Используйте слово «переписать». Потому что именно так вы и поступили бы с приложением, которое сейчас запускает и перемещает груз, даже если оно не в «Laravel».

Я бы предсказал, что финансового обоснования почти наверняка нет.

...