Col*_*ass 0 typo3 extbase typo3-6.2.x
我在TYPO3 6.2中使用Extbase进行了前端扩展,并且在我的控制器中重定向时,我失去了对我的对象所做的更改.我想知道这是否有意,为什么?
在这里,我看到我已经到了做出改变appointment
的var_dump
.
/**
*
* @param Domain\Model\Appointment $appointment
* @return void
*/
public function bookAction(Domain\Model\Appointment $appointment) {
if ($appointment->getBooked()) {
\TYPO3\CMS\Extbase\Utility\DebuggerUtility::var_dump($appointment);
$this->redirect('update', null, null, array('appointment'=>$appointment));
}
}
Run Code Online (Sandbox Code Playgroud)
然后,我看到原来的对象,我要做出的改变之前appointment
的var_dump
.
似乎改变了约会的通过将其重置回原来的状态......?
/**
* action update
*
* @param Domain\Model\Appointment $appointment
* @return void
*/
public function updateAction(Domain\Model\Appointment $appointment) {
\TYPO3\CMS\Extbase\Utility\DebuggerUtility::var_dump($appointment);
}
Run Code Online (Sandbox Code Playgroud)
Extbase控制器包含两种在当前操作中调用不同操作的方法:redirect()
和forward()
.
差异很小,但后果可能很大.
redirect()通过30x HTTP重定向调用不同的操作,因此基本上它需要完整的页面重新加载,还原(并重新初始化)PHP会话,数据和对象.
内部Extbase只将一个对象传递id
给第二个动作,这意味着,在第二个动作中,您的对象将再次从持久性中获取.如果在之前的行动中没有持续改变,那么它们将会丢失.
forward()只是终止当前的MVC请求并在没有页面重新加载的情况下启动新的请求,这意味着所有会话数据和非持久更改在第二个操作中仍然可用.
在这种情况下,Extbase不会传递id
真实对象,因此更改仍然存在.
您可以执行以下操作之一:
forward()
而不是redirect()
.PersistenceManager
在调用之前保持对db的更改redirect()
.redirect()
,但序列化字符串,然后在第二个操作中将其反序列化). 归档时间: |
|
查看次数: |
295 次 |
最近记录: |