1

我正在尝试在 ZF2 (v2.0.2) 应用程序中使用 ORM RedBeanPHP (v3.3),但我在使用其自动 FUSE 模型时遇到了问题。我不能让它链接到我的模型类。它不会自动拾取它们,而是使用“常规”bean。

我正在使用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();工作正常。

我试图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时,我也遇到了同样的问题......

谢谢。

4

2 回答 2

1

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

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

更多信息和示例可以在我的博客上找到:如何在 RjhRedbean 中使用 FUSE 模型

于 2012-10-25T23:04:54.053 回答
0

我修改了 RjhRedbean 模块如下:
1.创建了一个名为 ModelFormatter 的类,这个类除了返回与您的模型相关的适当命名空间之外什么都不做。命名空间可以在您的配置中设置。

2.在RjhRedbeanServiceFactory类中添加
RedBean_ModelHelper::setModelFormatter($serviceLocator->get('ModelFormatter'));

于 2013-10-19T09:21:00.650 回答