Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
Y
yii2
Project
Overview
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
Wiki
Wiki
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Commits
Issue Boards
Open sidebar
Rotua Panjaitan
yii2
Commits
aa8061b0
Commit
aa8061b0
authored
May 03, 2013
by
Qiang Xue
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
form wip
parent
62fc5cf6
Expand all
Hide whitespace changes
Inline
Side-by-side
Showing
4 changed files
with
85 additions
and
38 deletions
+85
-38
yii.activeForm.js
framework/assets/yii.activeForm.js
+0
-0
yii.validation.js
framework/assets/yii.validation.js
+7
-7
ActiveField.php
framework/widgets/ActiveField.php
+68
-25
ActiveForm.php
framework/widgets/ActiveForm.php
+10
-6
No files found.
framework/assets/yii.activeForm.js
View file @
aa8061b0
This diff is collapsed.
Click to expand it.
framework/assets/yii.validation.js
View file @
aa8061b0
...
...
@@ -18,7 +18,7 @@ yii.validation = (function ($) {
return
{
required
:
function
(
value
,
messages
,
options
)
{
var
valid
=
false
;
var
valid
=
false
;
if
(
options
.
requiredValue
===
undefined
)
{
if
(
options
.
strict
&&
value
!==
undefined
||
!
options
.
strict
&&
!
isEmpty
(
value
,
true
))
{
valid
=
true
;
...
...
@@ -27,7 +27,7 @@ yii.validation = (function ($) {
valid
=
true
;
}
if
(
!
valid
)
{
if
(
!
valid
)
{
messages
.
push
(
options
.
message
);
}
},
...
...
@@ -39,7 +39,7 @@ yii.validation = (function ($) {
var
valid
=
!
options
.
strict
&&
(
value
==
options
.
trueValue
||
value
==
options
.
falseValue
)
||
options
.
strict
&&
(
value
===
options
.
trueValue
||
value
===
options
.
falseValue
);
if
(
!
valid
)
{
if
(
!
valid
)
{
messages
.
push
(
options
.
message
);
}
},
...
...
@@ -90,7 +90,7 @@ yii.validation = (function ($) {
var
valid
=
!
options
.
not
&&
$
.
inArray
(
value
,
options
.
range
)
||
options
.
not
&&
!
$
.
inArray
(
value
,
options
.
range
);
if
(
!
valid
)
{
if
(
!
valid
)
{
messages
.
push
(
options
.
message
);
}
},
...
...
@@ -112,7 +112,7 @@ yii.validation = (function ($) {
var
valid
=
value
.
match
(
options
.
pattern
)
&&
(
!
options
.
allowName
||
value
.
match
(
options
.
fullPattern
));
if
(
!
valid
)
{
if
(
!
valid
)
{
messages
.
push
(
options
.
message
);
}
},
...
...
@@ -147,7 +147,7 @@ yii.validation = (function ($) {
for
(
var
i
=
v
.
length
-
1
,
h
=
0
;
i
>=
0
;
--
i
)
{
h
+=
v
.
charCodeAt
(
i
);
}
if
(
h
!=
hash
)
{
if
(
h
!=
hash
)
{
messages
.
push
(
options
.
message
);
}
},
...
...
@@ -190,7 +190,7 @@ yii.validation = (function ($) {
break
;
}
if
(
!
valid
)
{
if
(
!
valid
)
{
messages
.
push
(
options
.
message
);
}
}
...
...
framework/widgets/ActiveField.php
View file @
aa8061b0
...
...
@@ -4,10 +4,10 @@
* @copyright Copyright (c) 2008 Yii Software LLC
* @license http://www.yiiframework.com/license/
*/
namespace
yii\widgets
;
use
yii\base\Component
;
use
yii\db\ActiveRecord
;
use
yii\helpers\Html
;
use
yii\base\Model
;
use
yii\helpers\JsExpression
;
...
...
@@ -79,8 +79,8 @@ class ActiveField extends Component
*/
public
$validateOnType
;
/**
* @var integer number of milliseconds that the validation should be delayed when
a user is typing in an input field.
*
This property is used only when [[validateOnType]] is true
.
* @var integer number of milliseconds that the validation should be delayed when
the input field
*
is changed or the user types in the field
.
* If not set, it will take the value of [[ActiveForm::validationDelay]].
*/
public
$validationDelay
;
...
...
@@ -121,28 +121,13 @@ class ActiveField extends Component
public
function
begin
()
{
$inputID
=
Html
::
getInputId
(
$this
->
model
,
$this
->
attribute
);
$attribute
=
Html
::
getAttributeName
(
$this
->
attribute
);
$validators
=
array
();
foreach
(
$this
->
model
->
getActiveValidators
(
$attribute
)
as
$validator
)
{
/** @var \yii\validators\Validator $validator */
if
((
$js
=
$validator
->
clientValidateAttribute
(
$this
->
model
,
$attribute
))
!=
''
)
{
$validators
[]
=
$js
;
}
}
$jsOptions
=
array
(
'name'
=>
$this
->
attribute
,
'container'
=>
".field-
$inputID
"
,
'input'
=>
"#
$inputID
"
,
'error'
=>
'.help-inline'
,
);
if
(
$validators
!==
array
())
{
$jsOptions
[
'validate'
]
=
new
JsExpression
(
"function(attribute, value, messages) {"
.
implode
(
''
,
$validators
)
.
'}'
);
$options
=
$this
->
getClientOptions
();
if
(
$options
!==
array
())
{
$this
->
form
->
attributes
[
$this
->
attribute
]
=
$options
;
}
$this
->
form
->
attributes
[
$this
->
attribute
]
=
$jsOptions
;
$inputID
=
Html
::
getInputId
(
$this
->
model
,
$this
->
attribute
);
$attribute
=
Html
::
getAttributeName
(
$this
->
attribute
);
$options
=
$this
->
options
;
$class
=
isset
(
$options
[
'class'
])
?
array
(
$options
[
'class'
])
:
array
();
$class
[]
=
"field-
$inputID
"
;
...
...
@@ -152,9 +137,8 @@ class ActiveField extends Component
if
(
$this
->
model
->
hasErrors
(
$attribute
))
{
$class
[]
=
$this
->
form
->
errorCssClass
;
}
$options
[
'class'
]
=
implode
(
' '
,
$class
);
return
Html
::
beginTag
(
$this
->
tag
,
$options
);
}
...
...
@@ -163,6 +147,65 @@ class ActiveField extends Component
return
Html
::
endTag
(
$this
->
tag
);
}
protected
function
getClientOptions
()
{
if
(
$this
->
enableClientValidation
||
$this
->
enableClientValidation
===
null
&&
$this
->
form
->
enableClientValidation
)
{
$attribute
=
Html
::
getAttributeName
(
$this
->
attribute
);
$validators
=
array
();
foreach
(
$this
->
model
->
getActiveValidators
(
$attribute
)
as
$validator
)
{
/** @var \yii\validators\Validator $validator */
$js
=
$validator
->
clientValidateAttribute
(
$this
->
model
,
$attribute
);
if
(
$validator
->
enableClientValidation
&&
$js
!=
''
)
{
$validators
[]
=
$js
;
}
}
if
(
$validators
!==
array
())
{
$options
[
'validate'
]
=
new
JsExpression
(
"function(attribute,value,messages){"
.
implode
(
''
,
$validators
)
.
'}'
);
}
}
if
(
$this
->
enableAjaxValidation
||
$this
->
enableAjaxValidation
===
null
&&
$this
->
form
->
enableAjaxValidation
)
{
$options
[
'enableAjaxValidation'
]
=
1
;
}
if
(
isset
(
$options
[
'validate'
])
||
isset
(
$options
[
'enableAjaxValidation'
]))
{
$inputID
=
Html
::
getInputId
(
$this
->
model
,
$this
->
attribute
);
$options
[
'name'
]
=
$inputID
;
if
(
$this
->
model
instanceof
ActiveRecord
&&
!
$this
->
model
->
getIsNewRecord
())
{
$option
[
'status'
]
=
1
;
}
$names
=
array
(
'enableAjaxValidation'
,
'validateOnChange'
,
'validateOnType'
,
'validationDelay'
,
);
foreach
(
$names
as
$name
)
{
$options
[
$name
]
=
$this
->
$name
===
null
?
$this
->
form
->
$name
:
$this
->
$name
;
}
$options
[
'container'
]
=
isset
(
$this
->
selectors
[
'container'
])
?
$this
->
selectors
[
'container'
]
:
".field-
$inputID
"
;
$options
[
'input'
]
=
isset
(
$this
->
selectors
[
'input'
])
?
$this
->
selectors
[
'input'
]
:
"#
$inputID
"
;
if
(
isset
(
$this
->
errorOptions
[
'class'
]))
{
$options
[
'error'
]
=
'.'
.
implode
(
'.'
,
preg_split
(
'/\s+/'
,
$this
->
errorOptions
[
'class'
],
-
1
,
PREG_SPLIT_NO_EMPTY
));
}
else
{
$options
[
'error'
]
=
isset
(
$this
->
errorOptions
[
'tag'
])
?
$this
->
errorOptions
[
'tag'
]
:
'span'
;
}
foreach
(
array
(
'beforeValidate'
,
'afterValidate'
)
as
$callback
)
{
$value
=
$this
->
$callback
;
if
(
$value
instanceof
JsExpression
)
{
$options
[
$callback
]
=
$value
;
}
elseif
(
is_string
(
$value
))
{
$options
[
$callback
]
=
new
JsExpression
(
$value
);
}
}
return
$options
;
}
else
{
return
array
();
}
}
/**
* Generates a label tag for [[attribute]].
* The label text is the label associated with the attribute, obtained via [[Model::getAttributeLabel()]].
...
...
framework/widgets/ActiveForm.php
View file @
aa8061b0
...
...
@@ -88,7 +88,7 @@ class ActiveForm extends Widget
* @var boolean whether to perform validation when an input field loses focus and its value is found changed.
* If [[ActiveField::validateOnChange]] is set, its value will take precedence for that input field.
*/
public
$validateOnChange
=
fals
e
;
public
$validateOnChange
=
tru
e
;
/**
* @var boolean whether to perform validation while the user is typing in an input field.
* If [[ActiveField::validateOnType]] is set, its value will take precedence for that input field.
...
...
@@ -96,12 +96,16 @@ class ActiveForm extends Widget
*/
public
$validateOnType
=
false
;
/**
* @var integer number of milliseconds that the validation should be delayed when a
user is typing in an input field.
*
This property is used only when [[validateOnType]] is true
.
* @var integer number of milliseconds that the validation should be delayed when a
n input field
*
is changed or the user types in the field
.
* If [[ActiveField::validationDelay]] is set, its value will take precedence for that input field.
*/
public
$validationDelay
=
200
;
/**
* @var string the name of the GET parameter indicating the validation request is an AJAX request.
*/
public
$ajaxVar
=
'ajax'
;
/**
* @var JsExpression|string a [[JsExpression]] object or a JavaScript expression string representing
* the callback that will be invoked BEFORE validating EACH attribute on the client side.
* The signature of the callback should be like the following:
...
...
@@ -192,6 +196,7 @@ class ActiveForm extends Widget
'errorCssClass'
=>
$this
->
errorCssClass
,
'successCssClass'
=>
$this
->
successCssClass
,
'validatingCssClass'
=>
$this
->
validatingCssClass
,
'ajaxVar'
=>
$this
->
ajaxVar
,
);
if
(
$this
->
validationUrl
!==
null
)
{
$options
[
'validationUrl'
]
=
Html
::
url
(
$this
->
validationUrl
);
...
...
@@ -204,11 +209,10 @@ class ActiveForm extends Widget
);
foreach
(
$callbacks
as
$callback
)
{
$value
=
$this
->
$callback
;
if
(
is_string
(
$value
))
{
$value
=
new
JsExpression
(
$value
);
}
if
(
$value
instanceof
JsExpression
)
{
$options
[
$callback
]
=
$value
;
}
elseif
(
is_string
(
$value
))
{
$options
[
$callback
]
=
new
JsExpression
(
$value
);
}
}
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment