2

我有一个名为 Admin 的模型,具有自定义功能。

<?php

namespace ZendCustom\Model;

use Zend\Db\TableGateway\TableGateway;
use Zend\Db\Exception\ErrorException;

abstract class Admin {

/**
 * @var TableGateway
 */
protected $_table;

/**
 * @var array 
 */
protected $data;

/**
 * @var bool
 */
protected $loaded = false;

/**
 * Constructor
 * 
 * @param array $data
 * @throws Exception
 */
public function __construct(array $data = array()) {
    if (!is_null($this->_table)) {
        if (!empty($data)) {
            $this->loaded = !empty($this->data);
        }
    } else {
        die('Please, specify table for ' . __CLASS__);
    }
}
}

文档说要描述表格,我们应该使用:

// module/Album/src/Album/Controller/AlbumController.php:
    public function getAlbumTable()
    {
        if (!$this->albumTable) {
            $sm = $this->getServiceLocator();
            $this->albumTable = $sm->get('Album\Model\AlbumTable');
        }
        return $this->albumTable;
    }

http://framework.zend.com/manual/2.0/en/user-guide/database-and-models.html

如何在没有控制器的情况下在管理模型中设置模型表?

4

1 回答 1

3

您可以在通过服务管理器实例化它时注入它。

模块.php

/**
 * Get the service Config
 * 
 * @return array 
 */
public function getServiceConfig()
{
    return array(
        'factories' => array(
             'ZendCustom\Model\AdminSubclass' =>  function($sm) {
                // obviously you will need to extend your Admin class
                // as it's abstract and cant be instantiated directly
                $model= new \ZendCustom\Model\AdminSublcass();
                $model->setAlbumTable($sm->get('Album\Model\AlbumTable'));
                return $model;
            },
        )
    )
}

管理员.php

abstract class Admin {

    protected $_albumTable;

    /**
     * @param  \Album\Model\AlbumTable
     */
    public function setAlbumTable($ablum)
    {
        this->_albumTable = $ablum;
    }
}

现在,如果您想要您的 Admin 类(或者它的子类......),那么您使用 Service Manage 来获取实例,它会注入您想要的表对象......

在控制器内部,您可以这样做:

$admin = $this->getServiceLocator()->get('ZendCustom\Model\AdminSubclass');
于 2013-06-27T08:15:19.967 回答