mouf/mvc.silex-mouf

该项目是对Silex微框架的一个非常简单的扩展。它为Silex添加了Mouf依赖注入能力。

1.0.x-dev 2013-09-06 20:02 UTC

This package is auto-updated.

Last update: 2024-09-15 04:42:00 UTC


README

该项目是对Silex微框架的一个非常简单的扩展。它为Silex添加了Mouf依赖注入能力。

为什么?

Silex是一个微框架。它建立在Pimple之上,Pimple是一个用大约80行代码编写的非常简单的依赖注入容器(DIC)。Pimple是一个不错的DIC,但随着项目的增长,它可能会变得相当冗长。并且Silex原生上没有使用另一个DIC的方法(Silex的Application类扩展了Pimple类)。

此项目允许您在Silex项目中直接使用Mouf,这是一个图形化依赖注入框架。您不需要填充$app变量来注入依赖,而可以使用Mouf用户界面来声明实例。

如何?

扩展的Application类只有一个附加方法:registerMoufManager()。这是用于将Mouf DIC实例注册到Silex中的。

完成此操作后,您可以通过$app对象访问Mouf中声明的任何实例,就像在Silex项目中一样。

以下是一个在Pimple中注入控制器的示例。

  • 使用Composer安装此包。
  • 此包依赖于Mouf。一旦下载Mouf,您需要安装Mouf
  • 然后,声明一个简单的测试控制器
    <?php
    namespace Example\Controller;
    
    use Symfony\Component\HttpFoundation\JsonResponse;
    
    class TestController
    {
    	  private $text;
    	  public function __construct($text)
    	  {
    		  $this->text = $text;
    	  }
    
    	  public function testAction()
    	  {
    		  return new JsonResponse(array("hello"=>$this->text));
    	  }
    }
  • 创建一个实例 mycontroller 以在Mouf中为您的控制器。完成此操作后,您应该在Mouf UI中看到以下内容
    Controller's instance
  • 使用扩展的Mouf\Silex\Application类初始化您的应用程序
    // Load Mouf (and Composer's autoloader)
    require_once __DIR__.'/mouf/Mouf.php';
    
    // Get Silex app with Mouf support
    $app = new Mouf\Silex\Application();
    
    // Register Silex's controllers support
    $app->register(new Silex\Provider\ServiceControllerServiceProvider());
    
    // Register the Mouf DI container
    $app->registerMoufManager(Mouf\MoufManager::getMoufManager());
    
    // 'mycontroller' instance is declared in Mouf!
    $app->get('/hello', "mycontroller:testAction");
    
    $app->run();  

看看有多棒?您可以使用Pimple的简单路由机制,并摆脱构建依赖关系时的所有意大利面条式代码。

已知限制

此项目是一个概念验证。它证明了可以轻松地连接2个DI容器(此包包含... 10行代码!)它还显示了这种技术的局限性。实际上,从Mouf无法引用在Pimple中声明的对象(没有可能的往返)。然而,如果有关DIC互操作性的标准变得真实,这可能成为可能。