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();ます。

CheckDB からすべてのモデル オブジェクトをロードしようとする私のコントローラー コードは次のとおりです。

<?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 に答える