kaگوx/symfony2-silex-integration-bundle

允许将其放入 Silex 项目中

安装: 420

依赖者: 0

建议者: 0

安全: 0

星星: 7

关注者: 1

分支: 0

开放问题: 1

类型:symfony-bundle

dev-master 2013-03-07 11:41 UTC

This package is not auto-updated.

Last update: 2024-09-28 13:51:11 UTC


README

简介

Silex 是一个适用于小型应用的优秀框架。整体简洁性、路由优雅性和底层 symfony 组件的强大功能在这里起着关键作用。

然而,如果你最初只打算添加一些功能,但项目后来增长了很多,该怎么办呢?服务声明现在需要几百行代码。即使你将控制器分离成挂载的控制器,它们也仍然很庞大。你发现自己正在重新实现大多数 symfony2 组件和包的提供者。现在你希望从一开始就使用 symfony2。

一个可能的解决方案是将应用程序完全移植到 symfony2。但如果你不想暂停应用程序的开发,这个方案相当困难且耗时。

此包通过无缝地将 Silex 应用程序集成到 Symfony2 中来解决此问题。

以下是您将获得的内容

  • symfony 2.1 dev-master 兼容性
  • silex 路由现在是 symfony2 路由
  • symfony2 路由优先于 silex 路由
  • 通过替换路由逐步将 silex 控制器迁移到 symfony2
  • silex 服务现在是 symfony2 服务,并且可以通过容器访问
  • 在 symfony2 包中使用 silex 应用程序中定义的服务
  • 逐步将服务迁移到 symfony2 容器格式
  • silex 服务用相应的 symfony2 服务(twig、doctrine dbal、doctrine orm、forms)替换
  • 通过 symfony2 配置文件配置常用服务
  • silex 和 symfony2 共享相同的数据库连接、twig 模板、表单等
  • 轻松集成自定义服务
  • 通过添加 silex.auto_integrator 标签简单地在 Silex 中访问 symfony2 服务
  • 为复杂场景编写自定义集成类

安装

  • 将 Symfony 2.1 依赖项添加到 Silex 应用程序 composer.json
  • "kagux/symfony2-silex-integration-bundle": "dev-master" 添加到 composer.json
  • 工作 composer 需求列表示例
        "require": { 
         "php": ">=5.3.3",
         "silex/silex": "1.0.*",
         "symfony/symfony": "2.1.*",        
         "doctrine/orm": ">=2.2.3,<2.4-dev",        
         "doctrine/doctrine-bundle": "1.0.*",
         "twig/extensions": "1.0.*",        
         "symfony/assetic-bundle": "2.1.*",        
         "symfony/swiftmailer-bundle": "2.1.*",        
         "symfony/monolog-bundle": "2.1.*",        
         "sensio/distribution-bundle": "2.1.*",        
         "sensio/framework-extra-bundle": "2.1.*",        
         "sensio/generator-bundle": "2.1.*",
         "jms/security-extra-bundle": "1.2.*",
         "jms/di-extra-bundle": "1.1.*",
         "kagux/symfony2-silex-integration-bundle": "dev-master"
        }
  • 运行 php composer.php update
  • /app/AppKernel.php 中注册 KaguxSilexIntegrationBundle
    public function registerBundles()
    {
        $bundles = array(
            ...
            new Kagux\SilexIntegrationBundle\KaguxSilexIntegrationBundle()
        );
        
        ....

    } 
  • 创建一个包含与集成相关的代码的新包
  • 为了举例,我们将其命名为 KaguxLegacyAppBundle
  • 创建一个工厂类来包装您的 Silex 应用程序
namespace Kagux\LegacyAppBundle\Application;

use Silex\Application;

class ApplicationFactory
{
    /**
     * @throws \Exception
     * @return \Silex\Application
     */
    public function create()
    {
        $app=new Application;
        $app->get('/silex', function() use ($app) {
            return 'Hello, world!';
        });
        return $app;
    }

}
  • 为您的 Silex 应用程序定义一个服务
parameters:
 silex.application.class:  Silex\Application
 silex.application.factory.class: Kagux\LegacyAppBundle\Application\ApplicationFactory

services:
  silex.application.factory:
    class: %silex.application.factory.class%

  legacy.silex.application:
    class: %silex.application.class%
    factory_service: silex.application.factory
    factory_method: create
  • 将其添加到您的 config.yml
  kagux_silex_integration:
   app_service: legacy.silex.application
  • 在您的包中创建路由文件 /src/Kagux/LegacyAppBundle/Resources/config/routing.yml
  legacy_silex_application:
    resource: .
    type: silex
  • 将其添加到 /app/config/routing.yml
kagux_legacy_app:
    resource: "@KaguxLegacyAppBundle/Resources/config/routing.yml"
    prefix:   /

这就完成了。此时,如果您浏览 your_site.com/silex,您将看到 'Hello, world!'。

待办事项

  • 更新到 symfony 2.2
  • 创建规范

贡献

  • Fork
  • 在单独的分支中创建更改
  • 将您的更改压缩到 master
  • 创建拉取请求