Php 无法更改zend中的会话变量。。这种方法错了吗?
以下是我一直遵循的步骤: 首先,我初始化了会话的名称空间Php 无法更改zend中的会话变量。。这种方法错了吗?,php,ajax,zend-framework,Php,Ajax,Zend Framework,以下是我一直遵循的步骤: 首先,我初始化了会话的名称空间 $guest_events = new Zend_Session_Namespace('guest_events'); 然后将一个数组添加到会话中 $guest_events-> events = array(); 然后我向数组中添加了一些事件 这看起来像: Array ( [amount_0] => 1 [event_id_0] => 69 [event_title_0] => Sun
$guest_events = new Zend_Session_Namespace('guest_events');
然后将一个数组添加到会话中
$guest_events-> events = array();
然后我向数组中添加了一些事件
这看起来像:
Array
(
[amount_0] => 1
[event_id_0] => 69
[event_title_0] => Sunday Collection
[amount_1] => 11
[event_id_1] => 78
[event_title_1] => Test event
)
现在,在我的另一个控制器中,当我尝试通过ajax实现编辑量功能时:
$event_id = $this-> getRequest()-> getParam('event_id');
$edit_amount = $this-> getRequest()-> getParam('edit_amount');
$event_title = $this-> getRequest() -> getParam('event_title');
$guest_events = new Zend_Session_Namespace('guest_events');
$event_array = $guest_events-> events;
for ($i = 0; $i < 5; $i ++)
{
if (array_key_exists('event_id_'.$i, $event_array))
{
if ($event_array['event_id_'.$i]==$event_id && $event_array['event_title_'.$i]==$event_title)
{
// unset the amount and replace with new one
unset($guest_events-> events-> amount_0);
$guest_events-> events-> amount_0 = $edit_amount;
}
}
}
$event_id=$this->getRequest()->getParam('event_id');
$edit_amount=$this->getRequest()->getParam('edit_amount');
$event_title=$this->getRequest()->getParam('event_title');
$guest_events=新的Zend_会话_名称空间(“guest_events”);
$event\u array=$guest\u events->events;
对于($i=0;$i<5;$i++)
{
if(数组\键\存在('event\ u id.$i,$event\ u数组))
{
如果($event_数组['event_id.'.$i]==$event_id&&$event_数组['event_title.'.$i]==$event_title)
{
//取消设置金额并替换为新金额
未设置($guest\u events->events->amount\u 0);
$guest\u events->events->amount\u 0=$edit\u amount;
}
}
}
我尝试了所有方法,但会话变量保持不变。。有人能说出原因吗??:(如果元素
events
是Zend\u Session\u命名空间中的一个数组
对象,则应如下设置:
$guest_events-> events['amount_0'] = $edit_amount;
而不是像:
$guest_events-> events-> amount_0 = $edit_amount;
此外,由于您处于一个循环中,可以找到正确的数值,因此我认为它实际上应该是:
$guest_events-> events['amount_' . $i] = $edit_amount;
我发现了问题。它没有进入内部if循环。例如:
if ($event_array['event_id_'.$i]==$event_id && $event_array['event_title_'.$i]==$event_title)
{
// unset the amount and replace with new one
unset($guest_events-> events-> amount_0);
$guest_events-> events-> amount_0 = $edit_amount;
}
仍然无法理解为什么会发生这种情况://您是否真的通过Ajax发送原始事件标题?只有当传输的ID和标题与会话中已有的内容匹配时,您才能输入该块。是的。请求由Ajax发出,在匹配事件ID和事件标题后,金额被替换。因此,必须存在一些小的不匹配在发送的值和会话中存储的值之间切换,因为它在数组中找不到标题和ID的匹配项。下一个调试步骤是每次查看一个比较,并查看正确的一个不匹配的原因。