Skip to content

Commit a483cad

Browse files
committed
form erros passed as attr
1 parent 6a8642b commit a483cad

File tree

4 files changed

+65
-16
lines changed

4 files changed

+65
-16
lines changed
Lines changed: 41 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,41 @@
1+
<?php
2+
3+
namespace SimpleThings\FormExtraBundle\Form\Extension;
4+
5+
use Symfony\Component\Form\AbstractTypeExtension;
6+
use Symfony\Component\Form\FormInterface;
7+
use Symfony\Component\Form\FormView;
8+
9+
/**
10+
*
11+
* @author David Badura <[email protected]>
12+
*/
13+
class ErrorAttrTypeExtension extends AbstractTypeExtension
14+
{
15+
16+
/**
17+
* @return string
18+
*/
19+
public function getExtendedType()
20+
{
21+
return 'field';
22+
}
23+
24+
public function buildView(FormView $view, FormInterface $form)
25+
{
26+
$errors = array();
27+
$fieldErrors = $form->getErrors();
28+
foreach ($fieldErrors as $fieldError) {
29+
$errors[] = $fieldError->getMessage();
30+
}
31+
32+
if($errors) {
33+
$attr = $view->get('attr');
34+
if(!isset($attr['data-error'])) {
35+
$attr['data-error'] = implode('\r\n', $errors);
36+
$view->set('attr', $attr);
37+
}
38+
}
39+
}
40+
41+
}

Form/Extension/ValidationTypeExtension.php

100755100644
Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -8,26 +8,26 @@
88
use Symfony\Component\Form\FormBuilder;
99

1010
/**
11-
*
11+
*
1212
* @author David Badura <[email protected]>
1313
*/
1414
class ValidationTypeExtension extends AbstractTypeExtension
1515
{
1616
private $validatedObjects = array();
17-
17+
1818
public function __construct($validatedObjects)
1919
{
2020
$this->validatedObjects = array_flip($validatedObjects);
2121
}
22-
22+
2323
/**
2424
* @return string
2525
*/
2626
public function getExtendedType()
2727
{
2828
return 'form';
2929
}
30-
30+
3131
/**
3232
* @param FormBuilder $builder
3333
* @param array $options
@@ -42,5 +42,5 @@ public function buildForm(FormBuilder $builder, array $options)
4242
}
4343
}
4444
}
45-
45+
4646
}

Resources/config/form_extra.xml

100755100644
Lines changed: 10 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@
1111
<parameter key="simple_things_form_extra.form.extension.field.class">SimpleThings\FormExtraBundle\Form\Extension\FieldTypeExtension</parameter>
1212
<parameter key="simple_things_form_extra.js_validation_constraints_generator.class">SimpleThings\FormExtraBundle\Service\JsValidationConstraintsGenerator</parameter>
1313
<parameter key="simple_things_form_extra.form.extension.validation.class">SimpleThings\FormExtraBundle\Form\Extension\ValidationTypeExtension</parameter>
14+
<parameter key="simple_things_form_extra.form.extension.error_attr.class">SimpleThings\FormExtraBundle\Form\Extension\ErrorAttrTypeExtension</parameter>
1415
<parameter key="simple_things_form_extra.twig.extension.validation.class">SimpleThings\FormExtraBundle\Extension\ValidationExtension</parameter>
1516
<parameter key="simple_things_form_extra.client_validation.objects" type="collection" />
1617
</parameters>
@@ -31,21 +32,25 @@
3132
<service id="simple_things_form_extra.form.extension.field" class="%simple_things_form_extra.form.extension.field.class%">
3233
<tag name="form.type_extension" alias="field" />
3334
</service>
34-
35+
3536
<service id="simple_things_form_extra.form.extension.validation" class="%simple_things_form_extra.form.extension.validation.class%">
3637
<tag name="form.type_extension" alias="form" />
3738
<argument>%simple_things_form_extra.client_validation.objects%</argument>
3839
</service>
3940

41+
<service id="simple_things_form_extra.form.extension.error_attr" class="%simple_things_form_extra.form.extension.error_attr.class%">
42+
<tag name="form.type_extension" alias="field" />
43+
</service>
44+
4045
<service id="simple_things_form_extra.twig.extension.validation" class="%simple_things_form_extra.twig.extension.validation.class%">
4146
<tag name="twig.extension" alias="form" />
4247
<argument type="service" id="simple_things_form_extra.js_validation_constraints_generator" />
4348
<argument>%simple_things_form_extra.client_validation.objects%</argument>
44-
</service>
45-
49+
</service>
50+
4651
<service id="simple_things_form_extra.js_validation_constraints_generator" class="%simple_things_form_extra.js_validation_constraints_generator.class%">
4752
<argument type="service" id="validator" />
48-
</service>
49-
53+
</service>
54+
5055
</services>
5156
</container>

Resources/public/js/jquery.plugin.js

100755100644
Lines changed: 9 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -4,11 +4,11 @@
44
(function($, jQuery) {
55
jQuery.fn.simpleThingsFormExtraValidation = function (options) {
66
options = jQuery.extend({}, jQuery.fn.simpleThingsFormExtraValidation.defaults, options);
7-
7+
88
return $(this).each(function() {
99

1010
var objectName = $(this).data('simplethings-validation-class');
11-
11+
1212
if(typeof options.constraints[objectName] != 'undefined') {
1313
$(this).find('input').each(function() {
1414

@@ -17,6 +17,8 @@
1717
var name = $this.attr('name');
1818
name = name.substr(name.indexOf("[") + 1, name.indexOf("]") - name.indexOf("[") - 1);
1919

20+
options.onCreate($this);
21+
2022
$this.bind(options.event, function() {
2123

2224
if(typeof options.constraints[objectName][name] != 'undefined') {
@@ -27,20 +29,21 @@
2729
}
2830
}
2931

30-
});
32+
});
3133

3234
});
3335
}
34-
36+
3537
});
3638
};
37-
39+
3840
jQuery.fn.simpleThingsFormExtraValidation.defaults = {
3941
validator: null,
4042
constraints: null,
43+
onCreate: function(object) {},
4144
onSuccess: function(object) {},
4245
onError: function(object, violations) {},
4346
event: 'blur'
4447
};
45-
48+
4649
})(jQuery, jQuery);

0 commit comments

Comments
 (0)