在 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); ?>
现在在自定义视图中,我可以使用这个数据库适配器对象并在任何表上创建选择查询。
希望这会对某人有所帮助,我四处寻找在自定义视图助手中使用数据库访问,但提供的配置方法对我不起作用。
谢谢