Я пишу приложение PHP, которое не основано на zf2 mvc.
Я хочу использовать только модуль Zend_Db zf2. как я могу настроить свое приложение, чтобы знать, как найти соответствующий файл PHP Zend_Db там, где это необходимо?
У меня есть модуль zf2 Zend_db, загруженный с phyrus и установленный в папке vendor/zf2/php
.
Я попытался добавить модуль в путь включения с помощью следующей команды:
set_include_path("../vendor/zf2/php".PATH_SEPARATOR.get_include_path());
Я создал файлы классов модели, относящиеся к каждой таблице (используя zend-db-model-generator) внутри каталога Model/
.
мое основное приложение содержит следующее:
use DrinkManagement\Model\DrinkTable;
use Zend\Db\Adapter\Adapter;
set_include_path("../vendor/zf2/php".PATH_SEPARATOR.get_include_path());
require_once('Model/DrinkTable.php');
/**
@var DrinkManagement\Model\Drink
*/
$drinkTable=null;
$drinkTable = new DrinkTable();
$res=$drinkTable->getDrink(1);
echo var_export($res,1);
мой класс DrinkTable:
namespace DrinkManagement\Model;
use Zend\Db\TableGateway\AbstractTableGateway,
class DrinkTable extends AbstractTableGateway
{
protected $table ='drink';
protected $tableName ='drink';
public function __construct(Adapter $adapter)
{
$this->adapter = $adapter;
$this->resultSetPrototype = new ResultSet(new Drink);
$this->initialize();
}
public function fetchAll()
{
$resultSet = $this->select();
return $resultSet;
}
public function newSelect() {
return new Select;
}
public function getSelect(&$select,$columnsArray=array())
{
$select = new Select;
return $select->from('drink')->columns($columnsArray);
}
public function createIfNotExist($checkColumnsArray,$optionalColumns=array(),&$isRowCreated=null) {
$rowset=$this->select($checkColumnsArray);
$row = $rowset->current();
$id=null;
if ($row == null) {
$allColumns=array_merge($checkColumnsArray,$optionalColumns);
$affectedRows = $this->insert($allColumns);
if ($affectedRows != 1) {
throw new \Exception("error: could not add line to db");
}
$id=$this->lastInsertValue;
$isRowCreated=true;
} else {
$id=$row->drink_id;
$isRowCreated=false;
}
return $id;
}
//http://stackoverflow.com/questions/6156942/how-do-i-insert-an-empty-row-but-have-the-autonumber-update-correctly
public function createEmptyRow() {
$row=array(
'drink_id' => null
);
$affectedRows=$this->insert($row);
if ($affectedRows != 1) {
throw new \Exception("error: could not add empty row to db");
}
$id=$this->lastInsertValue;
return $id;
}
public function getDrink($id)
{
$id = (int) $id;
$rowset = $this->select(array('drink_id' => $id));
$row = $rowset->current();
if (!$row) {
throw new \Exception("Could not find row $id");
}
return $row;
}
public function saveDrink(Drink $drink)
{
$data = array(
'drink_type_id' => $drink->drink_type_id,
'drink_brand_id' => $drink->drink_brand_id,
'creation_timestamp' => $drink->creation_timestamp,
);
$id = (int)$drink->id;
if ($id == 0) {
$this->insert($data);
} else {
if ($this->getDrink($id)) {
$this->update($data, array('drink_id' => $id));
} else {
throw new \Exception('Form id does not exit');
}
}
}
public function addDrink($drink_type_id, $drink_brand_id = null, $creation_timestamp = null)
{
$data = array( 'drink_type_id' => $drink_type_id,
'drink_brand_id' => $drink_brand_id,
'creation_timestamp' => $creation_timestamp,
);
$affectedRows=$this->insert($data);
if ($affectedRows != 1) {
return null;
}
return $this->lastInsertValue;
}
public function updateDrink($drink_id, $drink_type_id, $drink_brand_id, $creation_timestamp)
{
$data = array(
'drink_type_id' => $drink->drink_type_id,
'drink_brand_id' => $drink->drink_brand_id,
'creation_timestamp' => $drink->creation_timestamp,
);
$this->update($data, array(drink_id => $id));
}
public function deleteDrink($id)
{
$this->delete(array('drink_id' => $id));
}
}
когда я пытаюсь запустить основное приложение php, я получаю следующее сообщение об ошибке:
PHP Fatal error: Class 'Zend\Db\TableGateway\AbstractTableGateway' not found in /Users/ufk/Documents/workspace/tux-drink/TuxDb/mysql/Model/DrinkTable.php on line 10
есть идеи, как решить проблему, не добавляя везде require_once?
может быть, есть еще один компонент zf2, который я могу использовать для автозагрузки соответствующих классов?