kaگوx / symfony2-silex-integration-bundle
允许将其放入 Silex 项目中
dev-master
2013-03-07 11:41 UTC
Requires
- php: >=5.3.0
- symfony/framework-bundle: 2.1.*
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
- 创建拉取请求