我的组件有一个名为MyproductControllerGeneralsetting
的控制器,它扩展了JControllerForm
。在MyproductControllerGeneralsetting
内部我从父类覆盖save
方法以修改$_POST
数据,然后覆盖方法调用父类'save
方法来实现节省。
以下是MyproductControllerGeneralsetting
中的覆盖方法:
/**
* We overwrite the saved form data and trim them to avoid spaces
*/
public function save($key = null, $urlVar = null){
if($_POST['jform']){
foreach($_POST['jform'] as $key=>&$value){
$value = trim($value);
}
}
// Finally, save the processed form data (calls JControllerForm-save())
parent::save('id', $urlVar);
}
问题在于,即使我在这个覆盖方法中修剪了每个POST数据字段,如果我提交了一些值,例如'value'(注意最后的空格),它们也不会被修剪。
我已经检查了save
类的JControllerForm
方法,它似乎是从POST获取数据:
$data = $this->input->post->get('jform', array(), 'array');
也许这就是原因?这会得到缓存数据吗?
答案 0 :(得分:4)
不要试图直接从$_POST
获取值,而是尝试以与父类相同的方式获取和设置数据 - 使用指向JInput类的(共享)实例的内部指针。
以下是经过修改的,有效的,已覆盖的save
方法:
/**
* We overwrite the saved form data and trim them to avoid spaces
*/
public function save($key = null, $urlVar = null){
if($_POST['jform']){
// Get the original POST data
$original = JRequest::getVar('jform', array(), 'post', 'array');
// Trim each of the fields
foreach($original as $key=>$value){
$original[$key] = trim($value);
}
// Save it back to the $_POST global variable
JRequest::setVar('jform', $postData, 'post');
}
// Finally, save the processed form data
return parent::save('id', $urlVar);
}
答案 1 :(得分:4)
无论如何,控制器是错误的地方,或者是否有特定的理由想要在控制器中执行此操作?
更好地查看模型中的prepareTable
函数。在那里,您已经拥有了要保存的属性的表对象,并且可以在保存之前对它们进行清理。
其他信息:
如果您展开JControllerForm
,则可以指定
/**
* @since 1.6
*/
protected $view_item = 'item';
/**
* @since 1.6
*/
protected $view_list = 'items';
默认情况下,$view_item
将等于上下文。 $view_list
尝试猜测$view_item
的复数版本。通常是在末尾添加s
。