Zend Framework 2应用程序中的RedBeanPHP FUSE模型?

时间:2012-10-15 02:40:56

标签: zend-framework2 redbean

我正在尝试在ZF2(v2.0.2)应用程序中使用ORM RedBeanPHP(v3.3),而我在使用其自动FUSE模型时遇到问题。我无法将其链接到我的模型类。它不是自动捡起它们而是使用“常规”豆。

我正在使用RjhRedbean模块在​​ZF2中加载RedBean。

我的模型类如下,放在文件夹.\module\Check\src\Check\Model\Model中。

<?php
namespace Check\Model;

use \RedBean_SimpleModel;

class Model_Check extends RedBean_SimpleModel
{
   public $id;
   public $type;
   ...

   public function open()
   {
   }

   public function toArray()
   {
      return array($this->id, $this->type);
   }

我确认自$c = new Model_Check();工作以来自动加载器已经接收了它。

我的控制器代码试图从DB加载所有Check模型对象:

<?php
namespace Check\Controller;

use Zend\Mvc\Controller\AbstractActionController;
use Zend\View\Model\ViewModel;
use Zend\View\Model\JsonModel;
use RjhRedbean;
use Check\Model\Model_Check;

class CheckController extends AbstractActionController
{
   public function listAction()
   {
      $rb = $this->getServiceLocator()->get('RjhRedbean');

      $checks = $rb->findAll('Check');  // does not link to my Model object

      foreach ($checks as $check) {
         $ar = $check->toArray();         // does not exist in the objects returned
         ...

返回的对象是RedBean_OODBBean

我应该在findAll()方法中添加什么作为bean名称?我试过了:

$checks = $rb->findAll('Model_Check');
$checks = $rb->findAll('Check/Model/Check'); 
$checks = $rb->findAll('Check/Model/Model_Check'); 

似乎没有办法解决问题。在创建bean时,我也遇到了同样的问题......

感谢。

2 个答案:

答案 0 :(得分:1)

这不起作用的原因是由于使用命名空间中引入的问题,FUSE无法像通常那样自动找到bean的模型。

您可以通过使用类映射文件并定义您在其中使用的所有模型来解决此问题。确保模型位于全局命名空间中。

更多信息和示例可以在我的博客上找到:How to use FUSE models in RjhRedbean

答案 1 :(得分:0)

我修改了RjhRedbean模块如下:
1.处理一个名为ModelFormatter的类 此类不执行任何其他操作,只返回与模型相关的相应命名空间。 命名空间可以在您的配置中设置。

2.在RjhRedbeanServiceFactory类中添加了
    RedBean_ModelHelper :: setModelFormatter($ serviceLocator-&GT;获得( 'ModelFormatter'));