Joomla 3.x,如果验证失败如何保留用户数据

Joomla 3.x, how to keep user data if validation fail

我在编写新的 Joomla 组件时遇到问题。 我的自定义 joomla 组件中有一些输入表单 (/components\com_custom\views\myview\tmpl\default.php )

<input type="text" class="form-control" name="jform[checkindate]" id="checkindate" value="<?php if (isset($post)) {echo $post; } else { echo 'Checkin date'; }?>">

当然,在顶部我有这个:

$jin = JFactory::getApplication()->input;
$post = $jin->get('checkindate', 'Checkin date', 'STR');

我的观点是在用户 post 验证失败时保留他们的数据,这样他们就不需要重新输入所有表单,他们只需要在再次提交之前修复一些错误数据,但是没有成功。 你能帮我解决这个问题吗? 非常感谢!

我假设您正在使用 Joomla jform 构建表单

在 jform 中,如果要维护表单会话,需要注意某些事项。

  1. 将提交的表单数据存储在会话中 - 在验证后将用户重定向到表单视图之前。您需要将用户数据存储在用户状态中。这通常在控制器文件中完成。这是通过以下方式完成的

    $app = JFactory::getApplication(); $app->setUserState('componentname.formname.data', $data);

请注意,第一个参数是存储在用户状态中的数据的键。第二个参数是用户输入的数据post

  1. 从会话中加载表单数据(如果可用)- 到目前为止,我们已经将数据保存在会话中,现在我们需要检查表单数据是否在会话中可用。这是在模型中编写的加载表单数据方法中完成的。

`

protected function loadFormData()

{
    $data = JFactory::getApplication()->getUserState('componentname.formname.data', array());

    if (empty($data))
    {
        // This is the my component function to load form data
        $data = $this->getData();
    }

    return $data;
}

3。如果表单数据保存成功,请不要忘记将其从会话中清除。

$app->setUserState('componentname.formname.data', null);