piotrpolak / codeigniter-symfony2-bridge
一个CodeIgniter库,它以紧凑而优雅的方式促进Symfony2服务集成到CodeIgniter应用程序中。
1.0.0
2018-10-24 14:37 UTC
Requires
- php: >=5.3.0
Requires (Dev)
- codeclimate/php-test-reporter: ^0.3.2
- phpunit/phpunit: ^4.8
This package is auto-updated.
Last update: 2024-08-25 07:34:13 UTC
README
一个库,它以紧凑的方式促进将Symfony服务集成到旧框架应用程序中。
作为1.0.0版本,该包与composer兼容,代码已从CodeIgniter框架解耦。
如果您想使用最初的CodeIgniter库,请检查0.1.0发布。
一些历史和最常见场景
该库是为一个长期支持项目编写的,该项目必须与全新的Symfony2+应用程序集成。业务逻辑封装在由Symfony2+依赖注入组件管理的服务中,并由Symfony2+组件包和一些旧CodeIgniter组件使用。
尽可能的情况下,服务方法接受原始类型的变量作为输入,以便于使用。
方法输出可以是原始类型和复杂对象,因为桥接和Symfony2+内核本身管理PSR类自动加载。桥接不会创建与通信和参数序列化相关的任何开销。
兼容性
CodeIgniter:2.0 - 3.1+
Symfony:2.0+, 3.0+, 4.0+
测试
composer install --prefer-dist && ./vendor/bin/phpunit -v
为了测试任意版本组合,请使用(可能需要sudo权限连接到Docker守护进程)
PHP_VERSION=7.2 bin/test_in_docker.sh
示例
获取Symfony2+服务容器
$bridge = new \PiotrPolak\CodeIgniterSymfonyBridge\Bridge('./symfonyRootDir'); try { // \Symfony\Component\DependencyInjection\Container $container = $bridge->getKernel()->getContainer(); } catch(\PiotrPolak\CodeIgniterSymfonyBridge\Exception\KernelInitializationException $e) { // Unable to initialize Symfony2+ kernel }
有关Symfony服务容器和依赖注入的更多信息
- https://symfony.com.cn/doc/current/book/service_container.html
- https://symfony.com.cn/doc/current/components/dependency_injection/introduction.html
使用服务
$bridge = new \PiotrPolak\CodeIgniterSymfonyBridge\Bridge('./symfonyRootDir'); try { $result = $bridge->getKernel()->getContainer()->get('my_service')->businessLogicServiceMethod('parameter of a primitive type')); } catch(\PiotrPolak\CodeIgniterSymfonyBridge\Exception\KernelInitializationException $e) { // Unable to initialize Symfony2+ kernel }
在设计服务时,优先使用原始类型的参数 - 这会创建最小的开销,并使服务集成变得容易。服务方法输出可以是任何类型。
获取Doctrine2实体管理器
$bridge = new \PiotrPolak\CodeIgniterSymfonyBridge\Bridge('./symfonyRootDir'); try { $em = $bridge->getKernel()->getContainer()->get('doctrine')->getManager(); } catch(\PiotrPolak\CodeIgniterSymfonyBridge\Exception\KernelInitializationException $e) { // Unable to initialize Symfony2+ kernel }
获取Doctrine2实体管理器的访问权限,您将能够访问实体及其相关存储库。
加载在Symfony2+组件包中定义的任意类
$bridge = new \PiotrPolak\CodeIgniterSymfonyBridge\Bridge('./symfonyRootDir'); try { $container = $bridge->getKernel()->getContainer(); // Initializes Symfony2+ PSR class loader $imageHelper = new \Pepis\ImageManipulationBundle\Helpers\ImageHelper(); } catch(\PiotrPolak\CodeIgniterSymfonyBridge\Exception\KernelInitializationException $e) { // Unable to initialize Symfony2+ kernel }
许可
该软件根据以下许可证双许可