1
|
|
|
<?php |
2
|
|
|
/** |
3
|
|
|
* @link http://www.yiiframework.com/ |
4
|
|
|
* @copyright Copyright (c) 2008 Yii Software LLC |
5
|
|
|
* @license http://www.yiiframework.com/license/ |
6
|
|
|
*/ |
7
|
|
|
|
8
|
|
|
namespace yii\jquery; |
9
|
|
|
|
10
|
|
|
use Yii; |
11
|
|
|
use yii\helpers\Json; |
12
|
|
|
|
13
|
|
|
/** |
14
|
|
|
* ActiveFormClientScript is a behavior for [[\yii\widgets\ActiveForm]], which allows composition |
15
|
|
|
* of the client-side and AJAX form validation via underlying JQuery plugin. |
16
|
|
|
* |
17
|
|
|
* Usage example: |
18
|
|
|
* |
19
|
|
|
* ```php |
20
|
|
|
* <?php $form = \yii\widgets\ActiveForm::begin([ |
21
|
|
|
* 'id' => 'example-form', |
22
|
|
|
* 'as clientScript' => \yii\jquery\ActiveFormClientScript::class, |
23
|
|
|
* // ... |
24
|
|
|
* ]); ?> |
25
|
|
|
* ... |
26
|
|
|
* <?php \yii\widgets\ActiveForm::end(); ?> |
27
|
|
|
* ``` |
28
|
|
|
* |
29
|
|
|
* @see \yii\widgets\ActiveForm |
30
|
|
|
* @see \yii\widgets\ActiveFormClientScriptBehavior |
31
|
|
|
* |
32
|
|
|
* @author Paul Klimov <[email protected]> |
33
|
|
|
* @since 2.1.0 |
34
|
|
|
*/ |
35
|
|
|
class ActiveFormClientScript extends \yii\widgets\ActiveFormClientScript |
36
|
|
|
{ |
37
|
|
|
/** |
38
|
|
|
* {@inheritdoc} |
39
|
|
|
*/ |
40
|
5 |
|
protected function defaultClientValidatorMap() |
41
|
|
|
{ |
42
|
|
|
return [ |
43
|
5 |
|
\yii\validators\BooleanValidator::class => \yii\jquery\validators\client\BooleanValidator::class, |
44
|
|
|
\yii\validators\CompareValidator::class => \yii\jquery\validators\client\CompareValidator::class, |
45
|
|
|
\yii\validators\EmailValidator::class => \yii\jquery\validators\client\EmailValidator::class, |
46
|
|
|
\yii\validators\FilterValidator::class => \yii\jquery\validators\client\FilterValidator::class, |
47
|
|
|
\yii\validators\IpValidator::class => \yii\jquery\validators\client\IpValidator::class, |
48
|
|
|
\yii\validators\NumberValidator::class => \yii\jquery\validators\client\NumberValidator::class, |
49
|
|
|
\yii\validators\RangeValidator::class => \yii\jquery\validators\client\RangeValidator::class, |
50
|
|
|
\yii\validators\RegularExpressionValidator::class => \yii\jquery\validators\client\RegularExpressionValidator::class, |
51
|
|
|
\yii\validators\RequiredValidator::class => \yii\jquery\validators\client\RequiredValidator::class, |
52
|
|
|
\yii\validators\StringValidator::class => \yii\jquery\validators\client\StringValidator::class, |
53
|
|
|
\yii\validators\UrlValidator::class => \yii\jquery\validators\client\UrlValidator::class, |
54
|
|
|
\yii\validators\ImageValidator::class => \yii\jquery\validators\client\ImageValidator::class, |
55
|
|
|
\yii\validators\FileValidator::class => \yii\jquery\validators\client\FileValidator::class, |
56
|
|
|
\yii\captcha\CaptchaValidator::class => \yii\jquery\validators\client\CaptchaClientValidator::class, |
57
|
|
|
]; |
58
|
|
|
} |
59
|
|
|
|
60
|
|
|
/** |
61
|
|
|
* {@inheritdoc} |
62
|
|
|
*/ |
63
|
5 |
|
protected function registerClientScript() |
64
|
|
|
{ |
65
|
5 |
|
$id = $this->owner->options['id']; |
66
|
5 |
|
$options = Json::htmlEncode($this->getClientOptions()); |
67
|
5 |
|
$attributes = Json::htmlEncode($this->attributes); |
68
|
5 |
|
$view = $this->owner->getView(); |
69
|
5 |
|
ActiveFormAsset::register($view); |
70
|
5 |
|
$view->registerJs("jQuery('#$id').yiiActiveForm($attributes, $options);"); |
71
|
5 |
|
} |
72
|
|
|
|
73
|
|
|
/** |
74
|
|
|
* {@inheritdoc} |
75
|
|
|
*/ |
76
|
4 |
|
protected function getFieldClientOptions($field) |
77
|
|
|
{ |
78
|
4 |
|
$options = parent::getFieldClientOptions($field); |
79
|
|
|
|
80
|
|
|
// only get the options that are different from the default ones (set in yii.activeForm.js) |
81
|
4 |
|
return array_diff_assoc($options, [ |
82
|
4 |
|
'validateOnChange' => true, |
83
|
|
|
'validateOnBlur' => true, |
84
|
|
|
'validateOnType' => false, |
85
|
|
|
'validationDelay' => 500, |
86
|
|
|
'encodeError' => true, |
87
|
|
|
'error' => '.help-block', |
88
|
|
|
'updateAriaInvalid' => true, |
89
|
|
|
]); |
90
|
|
|
} |
91
|
|
|
|
92
|
|
|
/** |
93
|
|
|
* {@inheritdoc} |
94
|
|
|
*/ |
95
|
5 |
|
protected function getClientOptions() |
96
|
|
|
{ |
97
|
5 |
|
$options = parent::getClientOptions(); |
98
|
|
|
|
99
|
|
|
// only get the options that are different from the default ones (set in yii.activeForm.js) |
100
|
5 |
|
return array_diff_assoc($options, [ |
101
|
5 |
|
'encodeErrorSummary' => true, |
102
|
|
|
'errorSummary' => '.error-summary', |
103
|
|
|
'validateOnSubmit' => true, |
104
|
|
|
'errorCssClass' => 'has-error', |
105
|
|
|
'successCssClass' => 'has-success', |
106
|
|
|
'validatingCssClass' => 'validating', |
107
|
|
|
'ajaxParam' => 'ajax', |
108
|
|
|
'ajaxDataType' => 'json', |
109
|
|
|
'scrollToError' => true, |
110
|
|
|
'scrollToErrorOffset' => 0, |
111
|
|
|
]); |
112
|
|
|
} |
113
|
|
|
} |