Я создал клиентский модуль в своем приложении ZF2 и пользуюсь ServiceManager, как это предлагается в ZF2 Read The Docs. Мой класс модели выглядит следующим образом:
<?php
namespace Client\Model;
class Client
{
public $id;
public $familyname;
public $businessname;
public function exchangeArray($data)
{
$this->id =(!empty(['id'])) ? $data['id'] : null;
$this->familyname=(!empty(['familyname'])) ? $data['familyname'] : null;
$this->businessname(!empty(['businessname'])) ? $data['businessname'] : null;
}
}
My ClientTable.php
содержит:
namespace Client\Model;
use Zend\Db\TableGateway\TableGateway;
class ClientTable
{
protected $tableGateway;
public function __construct(TableGateway $tableGateway)
{
$this->tableGateway = $tableGateway;
}
public function fetchAll()
{
$resultSet = $this->tableGateway->select();
return $resultSet;
}
public function getClient($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 saveClient(Client $client)
{
$data = array(
'familyname' => $client->familyname,
'businessname' => $client->businessname,
);
$id = (int) $client(id);
if($id==0){
$this->tableGateway->insert($data);
} else {
if($this->getClient($id)){
$this->tableGateway->update($data, array('id' => $id));
} else {
throw new \Exception('Client id does not exist');
}
}
}
}
My ClientController.php
выглядит следующим образом:
namespace Client\Controller;
use Zend\Mvc\Controller\AbstractActionController;
use Zend\View\Helper\ViewModel;
class ClientController extends AbstractActionController
{
protected $clientTable;
public function getClientTable()
{
if(!$this->clientTable){
$sm = $this->getServiceLocator();
$this->clientTable = $sm->get('Client\Model\ClientTable');
}
return $this->clientTable;
}
public function indexAction()
{
return new ViewModel(array(
'client' => $this->clientTable->fetchAll(),
));
}
public function addAction()
{
return array();
}
public function editAction()
{
return array();
}
}
И последнее, но не менее важное: класс представления выглядит следующим образом:
<?php
$title = 'Client List';
$this->headtitle($title);
?>
<h1><?php echo $this->escapeHtml($title); ?></h1>
<p>
<a href="<?php echo $this->url('client', array('action'=>'add'));?>">Add New Client</a>
</p>
<table class="table">
<tr>
<th>Family Name</th>
<th>Business Name</th>
<th> </th>
</tr>
<?php foreach ($client as $client) : ?>
<tr>
<td><?php echo $this->escapehtml($client->familyname);?></td>
<td><?php echo $this->escapehtml($client->busienssname);?></td>
<td>
<a href="<?php echo $this->url('client', array('action'=>'edit',
'id'=>$client->$id));?>">Edit</a>
</td>
</tr>
<?php endforeach; ?>
</table>
Я добавил клиентский модуль в application.config.php
. Может ли кто-нибудь предложить некоторые способы исправить мою проблему, когда индекс индекса клиента не отображается?
Обновление: обратите внимание, что содержимое layout.phtml
- это рендеринг. Однако index.phtml
в моем /module/client/view/client/client
содержит разметку для добавления или редактирования клиента, который не является рендерингом.
Обновление 2: я не упомянул, что я использовал приложение "Скелет" в качестве основы для этого приложения. Не уверены, есть ли в нем изменения конфигурации, которые вызывают мою проблему?
Обновление 3: Я начал это приложение с намерением использовать Doctrine2 ORM. Однако было решено просто использовать ZendDbAdpater. Я удалил Doctrine ORM из конфигурации приложения. Может ли моя проблема вызвана остаточным кодом Doctrine в проекте? Если да, какие файлы и папки необходимо удалить, чтобы полностью удалить Doctrine 2 из приложения?
<?php foreach ($client as $client) : ?>
Вы снова используете одну и ту же переменную.
В сценарии просмотра может быть что-то не так. Вы можете обернуть их в блок try и посмотреть на ошибку.
<?php
try {
$title = 'Client List';
$this->headtitle($title);
?>
<h1><?php echo $this->escapeHtml($title); ?></h1>
<p>
<a href="<?php echo $this->url('client', array('action'=>'add'));?>">Add New Client</a>
</p>
<table class="table">
<tr>
<th>Family Name</th>
<th>Business Name</th>
<th> </th>
</tr>
<?php foreach ($client as $client) : ?>
<tr>
<td><?php echo $this->escapehtml($client->familyname);?></td>
<td><?php echo $this->escapehtml($client->busienssname);?></td>
<td>
<a href="<?php echo $this->url('client', array('action'=>'edit',
'id'=>$client->$id));?>">Edit</a>
</td>
</tr>
<?php endforeach; ?>
</table>
<?php } catch (\Exception $e) {var_dump($e);} ?>