覆盖JControllerForm save()方法来修剪POST数据没有效果



我有一个组件,它有一个名为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 '(注意末尾的空格),它们也不会被修剪。

我已经检查了JControllerForm类的save方法,它似乎是从这里的POST获取数据:

$data  = $this->input->post->get('jform', array(), 'array');

也许这就是原因?这是在获取缓存数据还是什么?

不要尝试直接从$_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);
}

无论如何,控制器都是错误的地方,或者您想在控制器中执行此操作的具体原因是什么?最好看看模型中的prepareTable函数。在这里,您已经拥有了具有要保存的属性的表对象,并且可以在保存之前对它们进行消毒。

额外的信息:如果扩展JControllerForm,可以指定

/**
 * @since   1.6
 */
protected $view_item = 'item';
/**
 * @since   1.6
 */
protected $view_list = 'items';

默认情况下,$view_item将等于上下文。$view_list试图猜测$view_item的复数形式。通常通过在末尾添加s

最新更新