自問する質問は、データをどのくらいの期間保持する必要があるかということです。POSTまたはGET
を使用できる次のアクションにデータを渡すためにデータを保存するだけでよい場合、GETはURLを通過し、POSTは通過しません(通常)。
あなたが提示した例は、データを検証、フィルタリング、処理するのに十分な時間だけデータを永続化する必要があることを示唆しています。したがって、いくつかのデータをパラメーター( POSTまたはGET )として渡すことに非常に満足する可能性があります。これにより、必要な一時的な永続性が提供され、変数を渡さなかった要求が行われるとすぐに期限切れになるデータの追加の利点も提供されます。
簡単な例(フォームがPOSTメソッドでデータを渡すと仮定します):
if ($this->getRequest()->isPost()) {
if ($form->isValid($this->getRequest()->getPost()){
$data = $form->getValues();//filtered values from form
$model = new Appliction_Model_DbTable_MyTable();
$model->save($data);
//but you need to pass the users name from the form to another action
//there are many tools in ZF to do this with, this is just one example
return $this->getHelper('Redirector')->gotoSimple(
'action' => 'newaction',
array('name' => $data['name'])//passed data
);
}
}
データを長期間保持する必要がある場合は、$_SESSIONが便利な場合があります。ZFでは、通常、Zend_Session_Namespace()
セッションデータの操作に使用します。
使い方は簡単Zend_Session_Namespace
です。これが私がよく使う例です。
class IndexController extends Zend_Controller_Action {
protected $_session;
public function init() {
//assign the session to the property and give the namespace a name.
$this->_session = new Zend_Session_Namespace('User');
}
public function indexAction() {
//using the previous example
$form = new Application_Form_MyForm();
if ($this->getRequest()->isPost()) {
if ($form->isValid($this->getRequest()->getPost()){
$data = $form->getValues();//filtered values from form
//this time we'll add the data to the session
$this->_session->userName = $data['user'];//assign a string to the session
//we can also assign all of the form data to one session variable as an array or object
$this->_session->formData = $data;
return $this->getHelper('Redirector')->gotoSimple('action'=>'next');
}
}
$this->view->form = $form;
}
public function nextAction() {
//retrieve session variables and assign them to the view for demonstration
$this->view->userData = $this->_session->formData;//an array of values from previous actions form
$this->view->userName = $this->_session->userName;//a string value
}
}
}
アプリケーションに保持する必要のあるデータは、アクション、コントローラー、またはモジュールに送信できます。そのフォームを再送信すると、それらの特定のセッション変数に保存された情報が上書きされることを覚えておいてください。
ZFには、パラメータを渡すこととセッションにデータを格納することの間にある種類のオプションがもう1つありますZend_Registry
。この使用法は、ブートストラップに構成データを保存するのと非常によく似てZend_Session_Namespace
おり(ただし、保存する必要のあるほとんどすべてのものを保存できます)、多くの内部Zendクラス、特にflashmessengerアクションヘルパーでも使用されます。
//Bootstrap.php
protected function _initRegistry() {
//make application.ini configuration available in registry
$config = new Zend_Config($this->getOptions());
//set data in registry
Zend_Registry::set('config', $config);
}
protected function _initView() {
//Initialize view
$view = new Zend_View();
//get data from registry
$view->doctype(Zend_Registry::get('config')->resources->view->doctype);
//...truncated...
//Return it, so that it can be stored by the bootstrap
return $view;
}
これがお役に立てば幸いです。さらに質問がある場合は、これらのリンクを確認してください。
ZFリクエストオブジェクト
Zend_Session_NamespaceZend_Registry