0

こんにちは、問題があり、どこが間違っているのかわかりません。Phonebook という名前のモジュールを作成しました。データベースから結果を取得しようとすると、空白のページが表示されます。

ここに私のコード例があります:

コントローラ:

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);
                },
            ),
        );
    }

電話帳テーブル

<?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>

コントローラーからサービス マネージャーを削除すると、ページはデータベースの結果なしで正常にレンダリングされます。

4

1 に答える 1

0

phoneBook テーブルが必要です。したがって、コントローラーには次のものが必要です。

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

$allPhonebook=$phoneBookTable->fetchAll();
于 2014-07-21T20:45:01.797 に答える