これをPHPで行う方法はありますが、ページの更新を行う必要があります。 これは私が同じページにとどまるために使う方法の1つです$this->_redirect($this->getRequest()->getRequestUri());
あなたがリクエストしたのと同じページに戻ってくるでしょうが、それはページのリフレッシュを引き起こします。
_forward()は、同じリクエスト内で別のアクションを実行できるようになるため、あなたの役に立つかもしれません。
あなたがしたいことは、ajaxを使わずに行うことができますが、一定数のページリフレッシュに耐えます。
アクション
public function indexAction() {
//get form and pass to view
$form = new Admin_Form_Station();
$form->setAction('/admin/index');
$form->setName('setStation');
$this->view->station = $this->_session->stationName;
$this->view->stationComment = $this->_session->stationComment;
$this->view->form = $form;
try {
//get form values from request object
if ($this->getRequest()->isPost()) {
if ($form->isValid($this->getRequest()->getPost())) {
$data = (object)$form->getValues();
//set session variable 'station'
$this->_session->station = $data->station;
//assign station name and comment to session
$station = new Application_Model_DbTable_Station();
$currentStation = $station->getStation($this->_session->station);
$this->_session->stationName = $currentStation->station;
$this->_session->stationComment = $currentStation->comment;
//assign array() of stations to session namespace
$stations = $station->fetchAllStation();
$this->_session->stations = $stations;
//assign array() of bidlocations to session namespace
$bidLocation = new Application_Model_DbTable_BidLocation();
$bidLocations = $bidLocation->fetchAllBidLocation($this->_stationId);
$this->_session->bidLocations = $bidLocations;
//display the same page with properties set
$this->_redirect($this->getRequest()->getRequestUri());
}
}
} catch (Zend_Exception $e) {
//assign error to flash messenger...TODO not for production
$this->_helper->flashMessenger->addMessage($e->getMessage());
//refresh the page and display message
$this->_redirect($this->getRequest()->getRequestUri());
}
}
とビューの
<?php if (!$this->station): ?>
<div class="span-5 prepend-2">
<?php echo $this->form ?>
</div>
<div class="span-10 prepend-2 last">
<p style="font-size: 2em">Please select the Station you wish to perform Administration actions on.</p>
</div>
<?php else: ?>
<div class="span-19 last">
<?php echo $this->render('_station.phtml') ?>
</div>
<?php endif; ?>
私が働くようでない解決策を見つけました。
通常のようにビュー内でリンクを使用すると、アクションを呼び出して実行します。処理中のアクションでは、表示中のページにリダイレクトされます。考慮する必要があるのは、一時的なデータが失われるため、保持する必要のある一時的なデータを永続化する(セッションを行う)戦略が重要になることです。私は通常、Zend_Session_Namespaceを日常的に使用してデータを保持します。上のコードサンプルは、必要なデータをどのように保持するかの良い例です。
私自身のアプリケーションでこれをテストしましたが、データが利用可能なままである限り、内容やURLに目立った変更がなくページが更新されます。
[Ajax](http://en.wikipedia.org/wiki/XMLHttpRequest)を使用して、一部のパラメータに基づいて適切なコントローラ/アクションをレンダリングできるAjaxコントローラを実行するか、Ajaxコールでコントローラ/アクションを直接実行し、応答で何かを実行します。 jQueryやPrototypeなどのJavascriptライブラリには、Ajaxリクエストを行うオブジェクトがあります。 – drew010