我正在使用Zend_Db框架,而且我遇到了麻烦。我正在尝试将自定义处理添加到行级别的列命名,但由于某种原因它无法调用我的函数。
我已经解决了这个问题,只是试着弄清楚是否甚至创建了基础的“Row”类。据我所知,事实并非如此。
这就是我所拥有的:
// this class functions correctly; I get "table" written to my output
class DHR_Table extends Zend_Db_Table_Abstract
{
protected $_rowClass = 'DHR_Row';
function __construct(){
echo "table";
parent::__construct();
}
}
// this class never gets called, at least not that is evident from the constructor echo
class DHR_Row extends Zend_Db_Table_Row_Abstract
{
protected $inflector = null;
function __construct(){
echo "row";
parent::__construct();
}
}
// this is the actual implementation class that uses these two:
class Application_Model_DbTable_Applicants extends DHR_Table
{
protected $_name = 'applicants';
}
我的输出包括一些数据(从这篇文章中排除,但是“申请人”类的一部分)和“表”,但没有“行”。任何想法为什么会这样? Zend框架的1.11.11版。
[编辑] 这是用法:
class ApplicantsController extends DHR_RestController
{
public function indexAction()
{
$applicants = new Application_Model_DbTable_Applicants();
$result = $applicants->fetchAll();
$this->success($result);
}
protected function success($data, $code = 200)
{
if(is_a($data, 'Zend_Db_Table_Rowset')){
// we could do some pagination work here
$data = $data->toArray();
}
$this->setResponseCode($code)->appendBody(Zend_Json::encode(array(
'success'=>true,
'data' => $data
)));
}
}
我希望在返回序列化结果时,至少会对调用的行类有一些方法...
[更新] 如果我使用“fetchRow”,一切都按预期工作; fetchAll根本不会转换为基础对象类型。
答案 0 :(得分:1)
我只是在查看 row / abstract 类的代码
尝试为$ _tableClass设置一个值。
$_tableClass = 'DHR_Table';
我担心它不会起作用,因为它看起来像 Zend / Db / Table / Row / Abstract.php 无论如何都要寻找一个表定义,所以如果没有进一步扩展,你似乎可能无法实现抽象。
//excerpt from __construct Zend/Db/Table/Row/Abstract.php
public function __construct(array $config = array())
{
if (isset($config['table']) && $config['table'] instanceof Zend_Db_Table_Abstract) {
$this->_table = $config['table'];
$this->_tableClass = get_class($this->_table);
} elseif ($this->_tableClass !== null) {
$this->_table = $this->_getTableFromString($this->_tableClass);
}
// cont...
// Retrieve primary keys from table schema
if (($table = $this->_getTable())) {
$info = $table->info();
$this->_primary = (array) $info['primary'];
}
$this->init();