2013-08-29 85 views
0

你好,我有一个问题,我不知道我的错误在哪里。我创建了一个名为Phonebook的模块,当我想从数据库中获取结果时,我得到一个空白页面。Zend Framework 2服务管理器

这里是我的代码示例:

控制器:

namespace Phonebook\Controller; 

use Zend\Mvc\Controller\AbstractActionController; 
use Zend\View\Model\ViewModel; 

use Phonebook\Model\Phonebook; 

class PhonebookController extends AbstractActionController 
{ 
    protected $phonebookTable; 

    /** 
    * Get Model Table 
    */ 

    public function getPhonebookTableGateway() 
    { 
     if (!$this->phonebookTable){ 
      $sm = $this->getServiceLocator(); 
      $this->phonebookTable = $sm->get('Phonebook\Model\PhonebookTable'); 
     } 
     return $this->phonebookTable; 
    } 


    /** 
    * Index Action 
    * 
    * @see \Zend\Mvc\Controller\AbstractActionController::indexAction() 
    */ 
    public function indexAction() 
    { 
     return new ViewModel(array(
      'phonebook' => $this->getPhonebookTableGateway()->fetchAll() 
     )); 
    } 

注:我不显示控制器的全部源代码,因为它是如此之大。

Module.php服务管理

namespace Phonebook; 


use Phonebook\Model\Phonebook; 
use Phonebook\Model\PhonebookTable; 

use Zend\Db\ResultSet\ResultSet; 
use Zend\Db\TableGateway\TableGateway; 

    public function getServiceConfig() 
    { 
     return array(
      'factories' => array(
       'Phonebook\Model\PhonebookTable' => function($sm) { 
        $tableGateway = $sm->get('PhonebookTableGateway'); 
        $table = new PhonebookTable($tableGateway); 
        return $table; 
       }, 
       'PhonebookTableGateway' => function ($sm) { 
        $dbAdapter = $sm->get('Zend\Db\Adapter\Adapter'); 
        $resultSetPrototype = new ResultSet(); 
        $resultSetPrototype->setArrayObjectPrototype(new Phonebook()); 
        return new TableGateway('phonebook', $dbAdapter, null, $resultSetPrototype); 
       }, 
      ), 
     ); 
    } 

PhonebookTable

<?php 
namespace Phonebook\Model; 

// Get Zend Table Gateway 

use Zend\Db\TableGateway\TableGateway; 


class PhonebookTable 
{ 
    protected $tableGateway; 

    /** 
    * Constructor 
    * 
    * @return Inject Dependency in TableGateway. 
    */ 
    public function __construct(TableGateway $tableGateway) 
    { 
     $this->tableGateway = $tableGateway; 
    } 

    /** 
    * Fetch all 
    * 
    * Method fetch all article from database 
    * 
    * @return resource 
    */ 
    public function fetchAll() 
    { 
     $resultSet = $this->tableGateway->select(); 
     return $resultSet; 
    } 

} 

电话簿

<?php 
namespace Phonebook\Model; 

class Phonebook 
{ 
    /** 
    * Item ID 
    * @var int 
    */ 
    public $id; 
    /** 
    * First Name 
    * @var str 
    */ 
    public $firstname; 
    /** 
    * Last Name 
    * @var str 
    */ 
    public $lastname; 
    /** 
    * Phone 
    * @var Str 
    */ 
    public $phone; 
    /** 
    * City 
    * @var str 
    */ 
    public $city; 

    /** 
    * Exchange Data 
    * 
    * @return array 
    */ 
    public function exchangeArray($data) 
    { 
     $this->id = (!empty($data['id'])) ? $data['id'] : null; 
     $this->first_name = (!empty($data['first_name'])) ? $data['first_name'] : null; 
     $this->last_name = (!empty($data['last_name'])) ? $data['last_name']: null; 
     $this->phone = (!empty($data['phone'])) ? $data['phone'] : null; 
     $this->city = (!empty($data['city'])) ? $data['city'] : null; 
    } 

} 

查看

<tbody> 
    <?php foreach ($phonebook as $item) :?> 
     <tr> 
      <td> <?php echo $this->escapehtml($item->id);?> 
      <td> <?php echo $this->escapehtml($item->firstname);?> 
      <td> <?php echo $this->escapehtml($item->lastname);?> 
      <td> <?php echo $this->escapehtml($item->phone);?> 
      <td> <?php echo $this->escapehtml($item->city);?> 
     </tr> 
    <?php endforeach;?> 
</tbody> 

当我从控制器删除服务管理器,页面呈现成功没有数据库的结果。

+0

在你看来,$ phonebook-> count()的结果是什么? – crowebird

+0

我没有看到任何东西只是毛坯白页。我有db table'phonebook'中的记录。让我检查一下'计数'没有什么结果。 – Ivan

+0

再次没有什么是render.:/ – Ivan

回答

0

你需要phoneBook表;所以在控制器中你应该有:

$phoneBookTable = $this->getServiceLocator()->get('PhonebookTable'); 

$allPhonebook=$phoneBookTable->fetchAll();