在 Zend Framework 中工作时,我们经常需要自定义帮助器,这使我们的工作变得容易,在 zf1 中,从帮助器访问数据库模型很容易,但我遇到了如何访问自定义视图帮助器中任何表的数据库模型的问题,但是当我需要它时,我通过在视图中创建新的数据库适配器对象以不专业的方式解决了这个问题,这从来都不是好方法,但最近我通过非常有趣的方式了解了在视图助手中访问数据库适配器和我必须对任何表执行任何查询,它可能不是 Zend F2 方式,而是解决问题的非常简单和简短的方法。
这是我的模型示例...
<?php
namespace Application\Model;
use Zend\Db\TableGateway\TableGateway;
class SlideImageSubTable {
protected $tableGateway;
public $adapter;
public function __construct(TableGateway $tableGateway) {
$this->tableGateway = $tableGateway;
$this->adapter = $this->tableGateway->getAdapter();
}
public function fetchAll() {
$resultSet = $this->tableGateway->select();
return $resultSet;
}
public function getSlideImageSub($id) {
$id = (int) $id;
$rowset = $this->tableGateway->select(array('id' => $id));
$row = $rowset->current();
if (!$row) {
throw new \Exception("Could not find row $id");
}
return $row;
}
public function getImageMenu($id) {
$id = (int) $id;
$rowset = $this->tableGateway->select(array('slide_image_id' => $id));
$rows = array_values(iterator_to_array($rowset));
if (!$rows) {
throw new \Exception("Could not find row $id");
}
return $rows;
}
public function saveSlideImageSub(SlideImageSub $slideImageSub) {
$data = array(
'slide_image_id' => $slideImageSub->slide_image_id,
'title' => $slideImageSub->title,
'description' => $slideImageSub->description
);
$id = (int) $slideImageSub->id;
if ($id == 0) {
$this->tableGateway->insert($data);
} else {
if ($this->getSlideImageSub($id)) {
$this->tableGateway->update($data, array('id' => $id));
} else {
throw new \Exception('Form id does not exist');
}
}
}
public function deleteSlideImageSub($id) {
$this->tableGateway->delete(array('id' => $id));
}
}
看看'public $adapter'公共变量。在构造函数中,我将通过调用 $this->tableGateway->getAdapter(); 来初始化它。方法,getAdapter() 通过网关对象可用。
然后在我的控制器操作视图中,我必须将它分配给任何变量并将该变量传递给查看页面。像这样..
public function equitiesAction() {
$image_id = $this->params('id');
$result = $this->getTable('SlideImageSub')->getImageMenu($image_id);
$adapter = $this->table->adapter;
$view = new ViewModel(array(
'result' => $result,
'adapter' => $adapter,
));
return $view;
}
在视图中,我将“适配器”对象传递给这样的自定义视图..
<?php echo $this->GetMenuProducts( $this->adapter); ?>
现在在自定义视图中,我可以使用此数据库适配器对象并在任何表上创建选择查询。
希望这会对某人有所帮助,我四处寻找在自定义视图助手中使用数据库访问,但提供的配置方法对我不起作用。
谢谢