Модель RedBeanPHP FUSE в приложении Zend Framework 2?

Я пытаюсь использовать ORM RedBeanPHP (v3.3) в приложении ZF2 (v2.0.2), и у меня возникают проблемы с его автоматической моделью FUSE. Я не могу сделать ссылку на мои классы моделей. Он не собирает их автоматически и вместо этого использует «обычные» бобы.

Я использую модуль RjhRedbean для загрузки RedBean в ZF2.

Мой класс модели следующий, помещенный в папку .\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()? Я пытался:

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

Кажется, ничего не помогает. При создании bean-компонента у меня тоже возникают те же проблемы...

Спасибо.


person dstj    schedule 15.10.2012    source источник
comment
Я ожидаю, что это то, что мне нужно исправить. Если вы хотите помочь мне заставить это работать, пожалуйста, напишите мне по адресу [email protected]. Как только у нас будет исправление, мы сможем опубликовать значимое решение здесь. А пока я почитаю про автоматическую модель FUSE. С нетерпением ждем ответа от вас.   -  person Richard Holloway    schedule 20.10.2012


Ответы (2)


Причина, по которой это не работает, заключается в том, что FUSE не может автоматически найти модель для компонента, как обычно, из-за проблем, возникающих при использовании пространств имен.

Вы можете обойти эту проблему, используя файл карты классов и определив в нем все модели, которые вы используете. Убедитесь, что ваши модели находятся в глобальном пространстве имен.

Дополнительную информацию и примеры можно найти в моем блоге: Как использовать FUSE модели в RjhRedbean

person Richard Holloway    schedule 25.10.2012
comment
Спасибо! Это работает... Я пришел из C#, так что глобальное пространство имен для меня несколько ересь, но оно работает... Спасибо за вашу помощь. - person dstj; 30.10.2012
comment
@dsjt: я рад, что смог разобраться с этим для вас. Я пытаюсь принять этот модуль в рамках modules.zendframework.com, поэтому я стремлюсь быть в курсе сообщил о проблемах. Габор, автор Redbean, не заинтересован в пространствах имен, которые могут объяснить ситуацию здесь, но он действительно предлагает помощь, если вы хотите поместить это в пространство имен по адресу: redbeanphp.com/extra/php_5_3_namespaces. Спасибо, что попробовали RjhRedbean. - person Richard Holloway; 30.10.2012

Я изменил модуль RjhRedbean следующим образом:
1. Создал класс с именем ModelFormatter, этот класс ничего не делает, кроме как возвращает соответствующее пространство имен, связанное с вашими моделями. пространство имен может быть установлено в вашей конфигурации.

2.В класс RjhRedbeanServiceFactory добавлено
RedBean_ModelHelper::setModelFormatter($serviceLocator->get('ModelFormatter'));

person newbie    schedule 19.10.2013