我想制作自定义validationfunction,如需要内置validation。 我这里有示例代码:
模型:
use yiibaseModel; class TestForm extends Model { public $age; public function rules(){ return [ ['age', 'my_validation'] ]; } public function my_validation(){ //some code here } }
视图:
title = 'test'; ?> field($model, 'age')->label("age") ?> 'btn btn-primary']) ?>
控制器:
use appmodelsformTestForm; use yiiwebController; class TestController extends Controller { public function actionIndex(){ $model = new TestForm(); if($model->load(Yii::$app->request->post())){ return $this->render('test', array( 'model'=>$model, 'message'=>'success' )); } return $this->render('test', array('model'=>$model)); } }
在这个例子中,我有一个年龄字段,这个my_validation
函数应该在提交之前检查年龄是否超过18,如果年龄小于18则抛出错误。这个validation应该由ajax处理,如果你尝试提交空字段。
虽然您可以在场景中使用Conditional Validators
when
和whenClient
,但我建议使用更复杂的方法来定义自定义validation器,因为根据文档
要创建支持客户端validation的validation器,您应该实现
yiivalidatorsValidator::clientValidateAttribute()
方法,该方法返回一段在客户端执行validation的JavaScript代码。 在JavaScript代码中,您可以使用以下预定义变量:
attribute:
要validation的属性的名称。
value:
要validation的值。
messages:
用于保存属性的validation错误消息的数组。
deferred:
可以推送延迟对象的数组(在下一小节中解释)。
因此,您需要做的是创建一个validation器并将其添加到您想要的字段的规则中。
如果您没有提供实际的型号名称并相应地更新字段名称,则需要小心复制以下代码。
1)首先要做的是将ActiveForm
小部件更新为以下内容
$form = ActiveForm::begin([ 'id' => 'my-form', 'enableClientValidation' => true, 'validateOnSubmit' => true, ]);
2)将模型rules()
函数更改为以下内容
public function rules() { return [ [['age'], 'required'], [['age'], appcomponentsAgeValidator::className(), 'skipOnEmpty' => false, 'skipOnError' => false], ]; }
3)从你的模型中删除自定义validation函数my_validation()
我希望你检查它的年龄限制为18+
我们将把那个逻辑移到validation器中。
现在在components
目录中创建一个文件AgeValidator.php
,如果你使用basic-app
在项目根目录下添加文件夹components
,如果它不存在则创建一个新文件,并复制下面的代码。
但
我已经假设了上面提供的Model的名称,所以如果它不是实际名称,你需要在clientValidateAttribute
函数中的javascript
语句中更新字段名称,你在validation器中看到,因为ActiveForm
字段的id
属性以#modelname-fieldname
(所有小的情况)的格式生成,所以根据上面给出的模型, #testform-age
会相应地更新它,否则validation将不起作用。 如果您计划将其保存在其他位置,请在下面的validation器和模型rules()
更新命名空间。
message = 'You need to be above the required age 18+'; } public function validateAttribute($model, $attribute) { if ($model->$attribute < 18) { $model->addError($attribute, $this->message); } } public function clientValidateAttribute($model, $attribute, $view) { $message = json_encode($this->message, JSON_UNESCAPED_SLASHES | JSON_UNESCAPED_UNICODE); return <<
以上就是jQuery教程分享在Yii2中使用带有ActiveForm的自定义validation器相关内容,想了解更多jQuery开发(异常处理)及jQuery教程关注计算机技术网(www.ctvol.com)!)。
本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。
ctvol管理联系方式QQ:251552304
本文章地址:https://www.ctvol.com/jquerytutorial/558579.html