当用户点击创建并且模型验证失败时,我的站点重定向到显示完全相同表单的同一页面。我一直在研究如何加载以前输入的值,以免让用户再次输入。使用 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/