ingewikkeld/wrapperbundle

A Symfony2 Bundle用于将遗留symfony 1项目包装到您的Symfony2项目中

dev-master 2016-08-15 07:18 UTC

This package is not auto-updated.

Last update: 2020-01-01 18:04:08 UTC


README

这是什么?

IngewikkeldWrapperBundle是一个简单的Symfony2 Bundle,用于包装您的旧遗留symfony 1应用程序。这允许您逐步将旧的symfony 1代码重构为全新的Symfony2代码。

IngewikkeldWrapperBundle使用回退路由。所有未被您的Symfony2代码捕获的路由都会路由到IngewikkeldWrapperBundle,后者会引导您的symfony 1项目。

注意:虽然这个Bundle非常有用,但不建议长时间使用。您为每个通过此Bundle的请求运行两个不同的框架,这意味着有两个框架为每个请求增加了开销。如果您有这个可能性,请在Symfony2中考虑缓存遗留代码的输出。

安装

安装只需几个步骤

  1. 使用composer
  2. 下载Bundle
  3. 配置自动加载
  4. 启用Bundle
  5. 配置您的遗留项目
  6. 将您的资源复制到文档根目录
  7. 配置您的路由
  8. 重构您的项目

1. 使用composer

需要Bundle

$ composer require Ingewikkeld/WrapperBundle:dev-master

2. 下载Bundle(如果不使用composer)

确保Bundle被放置在vendor/bundles/Ingewikkeld/IngewikkeldWrapperBundle。您可以通过使用 vendors 脚本、使用子模块或下载zip文件来实现。

vendors脚本

打开您的Symfony2项目的 deps 文件,并添加以下内容

[IngewikkeldWrapperBundle]
    git=git://github.com/Ingewikkeld/IngewikkeldWrapperBundle.git
	target=bundles/Ingewikkeld/WrapperBundle

现在,通过运行以下命令来安装依赖项

$ bin/vendors install

子模块

如果您正在使用Git,您还可以使用子模块将Bundle安装到您的项目中。在项目根目录中执行以下命令

$ git submodule add git://github.com/Ingewikkeld/IngewikkeldWrapperBundle.git vendor/bundles/Ingewikkeld/WrapperBundle
$ git submodule update --init

zip文件

当然,您可以直接从Github下载zip文件。解压文件并将zip文件的文件内容复制到您的Symfony2项目的vendor/bundles/Ingewikkeld/WrapperBundle目录中。

3. 配置自动加载(如果不使用composer)

在Ingewikkeld命名空间可以加载之前,我们需要设置自动加载器来实际加载命名空间。为此,您需要编辑 app/autoload.php 文件。在 $loader->registerNamespaces() 调用中,您需要添加Ingewikkeld命名空间,如下所示

$loader->registerNamespaces(array(
	// ...
    'Ingewikkeld'      => __DIR__.'/../vendor/bundles',
));

4. 启用Bundle

在AppKernel(app/AppKernel.php)中启用Bundle。在 registerBundles() 方法中,将WrapperBundle添加到 $bundles 数组中

   $bundles = array(
		// ...
        new Ingewikkeld\WrapperBundle\IngewikkeldWrapperBundle(),
    );

5. 配置您的遗留项目

将您的旧项目放入您的 app/ 目录中。对于我的第一个项目,我把整个项目放入了 app/legacy/ 目录中。现在,向 app/config/config.yml 添加一些配置值以设置 WrapperBundle 以从您的旧 symfony 1 项目中提供服务页面

parameters:
    wrapper_legacypath: legacy # directory inside app/ where your project is located
    wrapper_app: frontend # app to load
    wrapper_env: prod # environment to load
    wrapper_debug: false # whether debug is on or not
    wrapper_version: 1.4 # Symfony version of the legacy project you are wrapping in this bundle 

6. 将您的资产复制到文档根目录

需要存在于文档根目录中的所有文件都需要从您的旧项目复制到那里。目前,这些文件还没有被自动加载(请参阅“已知问题”),因此必须复制到您的 Symfony2 项目的 web/ 目录中。通常,您需要复制 images/、css/、js/ 和 uploads/ 目录。

7. 配置您的路由

在您的 app/config/routing.yml 文件底部,添加以下内容

IngewikkeldWrapperBundle: resource: "@IngewikkeldWrapperBundle/Controller/" type: annotation prefix: /

这将确保包装路由将捕获所有其他路由未捕获的请求。

8. 重构您的项目

现在,开始重构并将您的旧项目移植到 Symfony2 代码。

项目当前状态

项目的当前状态是: 概念证明

目前,这种方法适用于我其中一个旧项目。这是一个使用 symfony 1.0 的项目。这可能(还)不适用于您。我非常欢迎拉取请求以添加功能或确保与其他版本的 symfony 1 兼容。如果您已确认此捆绑包与 symfony 1 的其他版本兼容,请告诉我!

已知问题 / TODO

  1. 资产不是自动加载的,但必须复制到 Symfony2 文档根目录
  2. 迄今为止,只确认与 symfony 1.0 的兼容性
  3. 目前只能加载一个 symfony 1 应用
  4. 目前没有会话共享

补充说明

  1. Symfony 1.4 的支持已确认,但存在与 Swiftmailer 冲突。要么从 composer.json 中删除 Swiftmailer 行并更新依赖项(更简单的方法),要么删除旧版本。