php - 当 Yii 中的模型验证失败时如何加载以前填写的字段?

标签 php validation yii

当用户点击创建并且模型验证失败时,我的站点重定向到显示完全相同表单的同一页面。我一直在研究如何加载以前输入的值,以免让用户再次输入。使用 Firebug ,我可以观察帖子内容,但这些帖子似乎不包含此类信息。

在互联网上查找时,我看到有人建议使用 Ajax 提交表单并让它返回 JSON 数据以指定验证是否成功。然而,我对 Yii 和 PHP 完全陌生,所以我需要一些指导才能开始使用它。

还有其他(更简单)的方法吗?如果没有,我怎么能有一个 JSON 返回指定验证是否成功?谢谢!

最佳答案

在我看来,您需要做的是查看 $_POST 变量以查看选择了哪个依赖下拉列表,并在表单验证失败时预渲染它,以便 Yii 的默认验证错误起作用。使用 this link举个例子:

首先,将 actionDynamiccities() 方法的一部分重构为 Controller 中的单独公共(public)(非操作)方法:

public function getCitiesList($country_id) {
    $data=Location::model()->findAll('parent_id=:parent_id', 
              array(':parent_id'=>(int) $country_id));
    return CHtml::listData($data,'id','name');
}

然后像这样修复重构的 AJAX 操作:

public function actionDynamiccities()
{
  $data = $this->getCitiesList($_POST['country_id']);
  foreach($data as $value=>$name)
  {
    echo CHtml::tag('option',
               array('value'=>$value),CHtml::encode($name),true);
  }
}

然后在您的 _form.php View 文件中,在第二个下拉列表将由第一个 AJAX 插入的 #city_id div 中,添加一个像这样的小 PHP 片段:

<div id="city_id">
<?php if(isset($_POST['city_id'])): ?>
  <?php foreach($this->getCitiesList($_POST['country_id']) as $value=>$name): ?>
    <?php echo CHtml::tag('option', array('value'=>$value),CHtml::encode($name),true); ?>
  <?php endforeach; ?>
<?php endif; ?>
</div>

这样,如果您已经提交了表单并且 $_POST['country_id'] 已设置,则相关下拉列表已经呈现并且它应该显示适当的验证错误。

如果用户选择不同的国家/地区,城市下拉列表应该像往常一样被替换。

我没有测试这段代码,但原则上应该可以。祝你好运!

关于php - 当 Yii 中的模型验证失败时如何加载以前填写的字段?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6169413/

相关文章:

view - 在 Yii 中渲染多个 Action (带 View )

mysql - 从我的 Web 应用程序创建一个具有唯一且随机名称的表

php - $_POST 作为 $key => $value 使用复选框

javascript RegExp 不过滤数字

wpf - 测试错误和 “other”值

FireFox 中的 Javascript 错误不在 IE 和 Chrome 中

forms - Yii - 如何使用场景仅验证可见的表单字段?

php - 使用 PHP 在 JSON 条目之间插入记录

php - 访问多维数组中任意深的键

php - 多个数据库查询的 session 变量最佳实践