我还在想我何时何地必须注册新类以及如何扩展旧类。 例如,我找到了一个扩展了Zend_Form_Element_Select的好代码,以便我可以在每个表单中使用它并将我的数据库规范传递给它。扩展Zend_Form_Element的功能
因为我认为,这是一个好主意,有一个自己的目录,我在modulelevel添加了一个文件夹src \ Service。
第一个问题:在模块级别上有它聪明吗?将它放在根级别以便我可以在几个模块中使用它会更方便吗?我必须注册吗?
类扩展Zend_Form_Element_Select
我添加了一个使用声明:
use Zend\Form\Element\Select;
这会导致一个致命错误:
Fatal error: Class 'Import\Service\Zend_Form_Element_Select' not found
这将是我的下一个问题:我怎样才能正确地添加这个的Zend_Form_Element 。我认为问题可能是Zend没有查看Zend目录。但我用其他形式的Zend_Form_Element_Select
,所以它在那里。但我的新班级并不知道。我要怎么做,如果我想使用自己的类,当然使用Zend类?
我基本上寻找一种方法如何做到这一点。目标是在其他项目中轻松地重用类。
EDIT1:额外的代码片段
这里是我发现的类在线:
Module\Import\src\Service\CU_Form_Element_DbSelect
<?php
namespace Import\Service;
use Zend\Form\Form;
use Zend\Form\Element\Select;
use Zend\Form\Element;
class CU_Form_Element_DbSelect extends Zend_Form_Element_Select {
private $_dbAdapter;
private $_dbSelect;
private $_identityColumn = 'id';
private $_valueColumn = '';
/**
* Set the database adapter used
* @param Zend_Db_Adapter_Abstract $adapter
*/
public function setDbAdapter(Zend_Db_Adapter_Abstract $adapter) {
$this->_dbAdapter = $adapter;
}
/**
* Set the query used to fetch the data
* @param string|Zend_Db_Select $select
*/
public function setDbSelect($select) {
$this->_dbSelect = $select;
}
/**
* Set the column where the identifiers for the options are fetched
* @param string $name
*/
public function setIdentityColumn($name) {
$this->_identityColumn = $name;
}
/**
* Set the column where the visible values in the options are fetched
* @param string $name
*/
public function setValueColumn($name) {
$this->_valueColumn = $name;
}
public function render(Zend_View_Interface $view = null) {
$this->_performSelect();
return parent::render($view);
}
private function _performSelect() {
if(!$this->_dbAdapter)
$this->_dbAdapter = Zend_Db_Table::getDefaultAdapter();
$stmt = $this->_dbAdapter->query($this->_dbSelect);
$results = $stmt->fetchAll(Zend_Db::FETCH_ASSOC);
$options = array();
foreach($results as $r) {
if(!isset($r[$this->_identityColumn])) {
throw new Zend_Form_Element_Exception(
'Identity column is not present in the result');
}
if(!isset($r[$this->_valueColumn])) {
throw new Zend_Form_Element_Exception(
'Value column is not present in the result');
}
$options[$r[$this->_identityColumn]] = $r[$this->_valueColumn];
}
$this->setMultiOptions($options);
}
}
这里也是我的第一种形式的片段中,我想在使用它:
namespace Import\Form;
use Zend\Form\Form;
use Import\Service\CU_Form_Element_DbSelect;
.....
$this->add(new CU_Form_Element_DbSelect(array(
'name' => 'ProjectID',
'dbAdapter' => $this->db,
'dbSelect' => 'SELECT ProjectID, Projectname FROM t_project',
'valueColumn' => 'ProjectID',
'label' => 'Choose project'
)));
对我来说,找不到错误信息extends Zend_Form_Element_Select
。
当然我已经添加了命名空间,无论如何,我认为最好是发布代码,然后你就可以看到已经完成了什么。作曲家在这里不是话题。 –
是的,请把代码放在这里 –
它已经在那里 –