Intereting Posts
PHP: file_get_contents ('php: // input') возвращающая строка для сообщения JSON exec () продолжает выполнение команды Again and Again как бесконечный цикл, несмотря на отсутствие цикла в программе Количество эхо-записей MySQL, которое имеет одинаковый идентификатор сеанса Проблема стиля PHPExcel Лучший способ заменить переменные в текстовом формате с помощью PHP Prestashop устанавливает множественный выбор из модуля и получает их на вход Как добавить Ajax в существующую основанную на PHP и Mysql разбивку на страницы PHP Curl получить ответ сервера Посмотрите, содержит ли одна строка другую строку что произойдет, если php.ini отсутствует? Как получить результат из необработанного запроса MySQL в Laravel? Перенаправление на «www» перед требованием ssl Как сделать необязательными правила Validator Laravel? Обновление ajax div с данными формы Как заставить Doctrine обновить поля типа массива?

Как использовать контейнер Symfony 2 в устаревшем приложении

Хотелось бы интегрировать устаревшее приложение с приложением Symfony 2 – заменяя все больше и больше частей старого приложения компонентами Symfony. Подход, который я хотел бы использовать, заключается в использовании контейнера Symfony 2 в унаследованном приложении, который получает службы, которые уже настроены для приложения Symfony 2. Первыми услугами, которые я хотел бы использовать, являются сеанс и контекст безопасности.

Вопросов:

  • Это возможно?
  • Как получить сконфигурированный контейнер службы?

Дополнительная информация в устаревшем приложении: типичный беспорядок PHP: отдельные файлы PHP, как «контроллеры» (проверка $ _GET и $ _POST для разных путей выполнения). Каждая страница включает init.php который устанавливает автозагрузку, соединение с базой данных и т. Д. Управление сеансом имеет свой собственный класс (который я бы хотел заменить), данные извлекаются через вызовы статическим методам (!) Объектов базы данных.

Related of "Как использовать контейнер Symfony 2 в устаревшем приложении"

Использование DIC от Symfony в качестве автономного компонента возможно, но вам придется делать много вещей «вручную» (поскольку вы не планируете использовать полную Symfony Framework с самого начала). Вероятно, вы вряд ли сможете использовать DIC со всем этим наследием.

Если вы хотите пойти по этому пути, я бы предпочел сначала выбрать другой компонент (например, HttpFoundation и HttpKernel).

Поскольку @Cerad предположил, что вы можете обернуть свой старый код в Symfony. Посмотрите на пакет IngewikkeldWrapperBundle . Вы не можете использовать его, как есть, но это может дать вам некоторые идеи.

Есть третий способ.

Вы можете реализовать каждую новую функцию в приложении Symfony. Тогда вы можете сделать так, чтобы оба приложения и приложения Symfony сосуществовали. На уровне сервера (например, Nginx) вы можете проксировать устаревшие URL-адреса для устаревшего приложения и всех перенесенных URL-адресов в приложение Symfony2. В моем случае этот сценарий был лучшим вариантом и оказался работоспособным. Тем не менее, мы стремились отказаться от разработки устаревших приложений (поэтому каждая новая функция или изменение должны были быть разработаны в приложении Symfony2).

Изменить: вот как вы можете загрузить ядро ​​Symfony в устаревшем приложении и отправить событие (которое необходимо для брандмауэра):

 $kernel = new \AppKernel('dev', true); $kernel->boot(); $request = Request::createFromGlobals(); $request->attributes->set('is_legacy', true); $request->server->set('SCRIPT_FILENAME', 'app.php'); $container = $kernel->getContainer(); $container->enterScope('request'); $container->get('request_stack')->push($request); $container->set('request', $request); $event = new GetResponseEvent($kernel, $request, HttpKernelInterface::MASTER_REQUEST); $eventDispatcher = $container->get('event_dispatcher'); $eventDispatcher->dispatch('kernel.request', $event); 

Я считаю, что вы можете получить доступ к экземпляру контейнера из вашего устаревшего приложения, как это

 $kernel = new AppKernel('prod', true); $kernel->loadClassCache(); $kernel->boot(); $request = Request::createFromGlobals(); $container = $kernel->getContainer(); $sc = $container->get('security.context');