我在Yii中有一个简单的设置,它有一个模型,视图和一个控制器来管理数据库表。 (用Gii创建)
当用户按下删除按钮时,我想用我自己的一些规则验证此请求,如果有错误显示给用户。
我应该在模型中放置验证方法,从控制器删除方法中调用此验证。但后来我不确定如何在网页上显示弹出窗口。
答案 0 :(得分:2)
我不能专门针对Yii发言,但一般情况下使用PHP 5.3,一个好的做法是从模型中抛出错误(请注意,人类可读的错误),然后在控制器中调用模型时捕获它们。然后,控制器可以将错误列表传递给视图,这些视图将负责向用户显示错误。
<?php
class Model {
public function doImportantStuff() {
//Do stuff
if(true) {
throw new Exception('Important stuff could not be completed due to this important error.');
}
}
}
class Controller {
public function index() {
$data = array();
$crucial = new Model();
try {
$crucial->doImportantStuff();
} catch(Exception $e) {
$data['errors'][] = $e;
}
}
}
//And in the view
<?php if($data['errors']): ?>
<?php foreach($data['errors'] as $error): ?>
<p><?= $error->getMessage(); ?></p>
<?php endforeach; ?>
<?php endif; ?>
答案 1 :(得分:1)
您可能希望在规则方法中将验证规则放在模型中,Gii应该为您创建。您可以使用预定义的验证规则或创建自己的验证规则,请参阅here。您可能希望为此删除功能定义“方案”属性,然后您可以将自定义规则限制为该删除操作。
操作将在您的控制器中定义, - 如果您使用Gii创建CRUD,您应该有参考样本代码。
在您看来,您可以使用CActiveForm::error()在页面上显示错误,也可以调用getErrors()来检索错误以创建自定义错误状态(使用js或css等)。
另一种选择是使用js定义一个onsubmit函数,该函数执行ajax调用以在提交之前验证delete函数。 (对控制器功能进行ajax调用,你仍然希望在删除之前在模型中进行验证。)