リファレンスガイドからゲストブックのサンプルを実装しました。Zend Framework:メソッド "getDbTable"が存在せず、__call()にトラップされていません
私はGuestbookControllerにこれを追加しました:
public function editAction()
{
$model = new Application_Model_Guestbook();
$request = $this->getRequest();
if ($request->isPost()) {
Print_r('posted');die();
}
$model = Application_Model_GuestbookMapper::find($this->getRequest()->getParam('id'), $model);
$form = new Application_Form_Guestbook(array('model' => $model));
$this->view->form = $form;
}
そして編集アクションへのリンクを提供するために、ビューのインデックスを変更した:
<?php foreach ($this->entries as $entry): ?>
<?php $url = $this->url(
array(
'controller' => 'guestbook',
'action' => 'edit',
'id'=>$entry->id
),
'default',
true)
?>
<dt><?php echo $this->escape($entry->email) ?></dt>
<dd><a href="<?php echo $url; ?>"><?php echo $this->escape($entry->comment) ?></a></dd>
<?php endforeach ?>
マッパーが標準です - まっすぐにコピーし、リファレンスガイドから貼り付けてください。
ます(http://クイックスタート/ゲストブック/編集/ ID/1)を介してIをクリックすると、私は例外に直面しています:[方法 "getDbTableは" 存在しないと(__call中に閉じ込められていなかった)]
getDbTable()は、同じファイル内にあるfind()関数によって呼び出されます。なぜ、getDbTable()が見つからないのですか?
私が実行しています:PHPバージョン5.3.3-7 + squeeze1を、ZendのエンジンV2.3.0は、Apache/2.2.16(Debianの)
ますので、それを静的に呼び出すと、静的メソッドではありません。 – venimus
public function find($ id、Application_Model_Guestbook $ guestbook) { $ result = $ this-> getDbTable() - > find($ id); if(0 == count($ result)){ return; } $ row = $ result-> current(); ($ row-> id) - > setEmail($ row-> email) - > setComment($ row-> comment) - > setCreated($ row-> created); $ guestbook-> setId } – Grokling
申し訳ありません、そのフォーマットは恐ろしいです!読みやすいバージョンについては、[link](http://framework.zend.com/manual/en/learning.quickstart.create-model.html)のコードを参照してください。 私は他の場所で見つけたfind()の呼び出し例に従っています。私の限られた理解は、私がパラメータとしてApplication_Model_Guestbook参照を渡す限り、オブジェクトはメソッドの影響を受けることを示唆しています。 – Grokling