要问自己的问题是,您需要将数据保留多长时间?
如果您只需要保存数据以将其传递给可以使用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 中还有一个选项,介于传递参数和在会话中存储数据之间,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_Namespace
Zend_Registry