Deployed 901748f to 5.4 with MkDocs 1.1.2 and mike 0.5.5
[GitHub/WoltLab/woltlab.github.io.git] / latest / php / api / form_builder / dependencies / index.html
1
2 <!doctype html>
3 <html lang="en" class="no-js">
4 <head>
5
6 <meta charset="utf-8">
7 <meta name="viewport" content="width=device-width,initial-scale=1">
8
9
10
11
12 <link rel="icon" href="../../../../assets/default.favicon.ico">
13 <meta name="generator" content="mkdocs-1.1.2, mkdocs-material-7.1.0">
14
15
16
17 <title>Dependencies - WoltLab Suite Documentation</title>
18
19
20
21 <link rel="stylesheet" href="../../../../assets/stylesheets/main.33e2939f.min.css">
22
23
24 <link rel="stylesheet" href="../../../../assets/stylesheets/palette.ef6f36e2.min.css">
25
26
27
28 <meta name="theme-color" content="#009485">
29
30
31
32
33
34
35
36
37
38 <link rel="stylesheet" href="../../../../stylesheets/extra.css">
39
40
41
42
43
44 </head>
45
46
47
48
49
50
51
52 <body dir="ltr" data-md-color-scheme="" data-md-color-primary="teal" data-md-color-accent="">
53
54
55 <script>function __prefix(e){return new URL("../../../..",location).pathname+"."+e}function __get(e,t=localStorage){return JSON.parse(t.getItem(__prefix(e)))}</script>
56
57 <input class="md-toggle" data-md-toggle="drawer" type="checkbox" id="__drawer" autocomplete="off">
58 <input class="md-toggle" data-md-toggle="search" type="checkbox" id="__search" autocomplete="off">
59 <label class="md-overlay" for="__drawer"></label>
60 <div data-md-component="skip">
61
62
63 <a href="#form-node-dependencies" class="md-skip">
64 Skip to content
65 </a>
66
67 </div>
68 <div data-md-component="announce">
69
70 <aside class="md-announce">
71 <div class="md-announce__inner md-grid md-typeset">
72
73 <a href="https://www.woltlab.com">Back to <strong>woltlab.com</strong></a>
74
75 </div>
76 </aside>
77
78 </div>
79
80 <header class="md-header" data-md-component="header">
81 <nav class="md-header__inner md-grid" aria-label="Header">
82 <a href="../../../.." title="WoltLab Suite Documentation" class="md-header__button md-logo" aria-label="WoltLab Suite Documentation" data-md-component="logo">
83
84 <img src="../../../../assets/logo.png" alt="logo">
85
86 </a>
87 <label class="md-header__button md-icon" for="__drawer">
88 <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M3 6h18v2H3V6m0 5h18v2H3v-2m0 5h18v2H3v-2z"/></svg>
89 </label>
90 <div class="md-header__title" data-md-component="header-title">
91 <div class="md-header__ellipsis">
92 <div class="md-header__topic">
93 <span class="md-ellipsis">
94 WoltLab Suite Documentation
95 </span>
96 </div>
97 <div class="md-header__topic" data-md-component="header-topic">
98 <span class="md-ellipsis">
99
100 Dependencies
101
102 </span>
103 </div>
104 </div>
105 </div>
106
107
108
109 <label class="md-header__button md-icon" for="__search">
110 <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M9.5 3A6.5 6.5 0 0 1 16 9.5c0 1.61-.59 3.09-1.56 4.23l.27.27h.79l5 5-1.5 1.5-5-5v-.79l-.27-.27A6.516 6.516 0 0 1 9.5 16 6.5 6.5 0 0 1 3 9.5 6.5 6.5 0 0 1 9.5 3m0 2C7 5 5 7 5 9.5S7 14 9.5 14 14 12 14 9.5 12 5 9.5 5z"/></svg>
111 </label>
112
113 <div class="md-search" data-md-component="search" role="dialog">
114 <label class="md-search__overlay" for="__search"></label>
115 <div class="md-search__inner" role="search">
116 <form class="md-search__form" name="search">
117 <input type="text" class="md-search__input" name="query" aria-label="Search" placeholder="Search" autocapitalize="off" autocorrect="off" autocomplete="off" spellcheck="false" data-md-component="search-query" data-md-state="active" required>
118 <label class="md-search__icon md-icon" for="__search">
119 <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M9.5 3A6.5 6.5 0 0 1 16 9.5c0 1.61-.59 3.09-1.56 4.23l.27.27h.79l5 5-1.5 1.5-5-5v-.79l-.27-.27A6.516 6.516 0 0 1 9.5 16 6.5 6.5 0 0 1 3 9.5 6.5 6.5 0 0 1 9.5 3m0 2C7 5 5 7 5 9.5S7 14 9.5 14 14 12 14 9.5 12 5 9.5 5z"/></svg>
120 <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M20 11v2H8l5.5 5.5-1.42 1.42L4.16 12l7.92-7.92L13.5 5.5 8 11h12z"/></svg>
121 </label>
122 <button type="reset" class="md-search__icon md-icon" aria-label="Clear" tabindex="-1">
123 <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M19 6.41 17.59 5 12 10.59 6.41 5 5 6.41 10.59 12 5 17.59 6.41 19 12 13.41 17.59 19 19 17.59 13.41 12 19 6.41z"/></svg>
124 </button>
125 </form>
126 <div class="md-search__output">
127 <div class="md-search__scrollwrap" data-md-scrollfix>
128 <div class="md-search-result" data-md-component="search-result">
129 <div class="md-search-result__meta">
130 Initializing search
131 </div>
132 <ol class="md-search-result__list"></ol>
133 </div>
134 </div>
135 </div>
136 </div>
137 </div>
138
139
140 <div class="md-header__source">
141
142 <a href="https://github.com/WoltLab/docs.woltlab.com/" title="Go to repository" class="md-source" data-md-component="source">
143 <div class="md-source__icon md-icon">
144
145 <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><path d="M439.55 236.05 244 40.45a28.87 28.87 0 0 0-40.81 0l-40.66 40.63 51.52 51.52c27.06-9.14 52.68 16.77 43.39 43.68l49.66 49.66c34.23-11.8 61.18 31 35.47 56.69-26.49 26.49-70.21-2.87-56-37.34L240.22 199v121.85c25.3 12.54 22.26 41.85 9.08 55a34.34 34.34 0 0 1-48.55 0c-17.57-17.6-11.07-46.91 11.25-56v-123c-20.8-8.51-24.6-30.74-18.64-45L142.57 101 8.45 235.14a28.86 28.86 0 0 0 0 40.81l195.61 195.6a28.86 28.86 0 0 0 40.8 0l194.69-194.69a28.86 28.86 0 0 0 0-40.81z"/></svg>
146 </div>
147 <div class="md-source__repository">
148 GitHub
149 </div>
150 </a>
151 </div>
152
153 </nav>
154 </header>
155
156 <div class="md-container" data-md-component="container">
157
158
159
160
161 <main class="md-main" data-md-component="main">
162 <div class="md-main__inner md-grid">
163
164
165
166 <div class="md-sidebar md-sidebar--primary" data-md-component="sidebar" data-md-type="navigation" >
167 <div class="md-sidebar__scrollwrap">
168 <div class="md-sidebar__inner">
169
170
171
172 <nav class="md-nav md-nav--primary" aria-label="Navigation" data-md-level="0">
173 <label class="md-nav__title" for="__drawer">
174 <a href="../../../.." title="WoltLab Suite Documentation" class="md-nav__button md-logo" aria-label="WoltLab Suite Documentation" data-md-component="logo">
175
176 <img src="../../../../assets/logo.png" alt="logo">
177
178 </a>
179 WoltLab Suite Documentation
180 </label>
181
182 <div class="md-nav__source">
183
184 <a href="https://github.com/WoltLab/docs.woltlab.com/" title="Go to repository" class="md-source" data-md-component="source">
185 <div class="md-source__icon md-icon">
186
187 <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><path d="M439.55 236.05 244 40.45a28.87 28.87 0 0 0-40.81 0l-40.66 40.63 51.52 51.52c27.06-9.14 52.68 16.77 43.39 43.68l49.66 49.66c34.23-11.8 61.18 31 35.47 56.69-26.49 26.49-70.21-2.87-56-37.34L240.22 199v121.85c25.3 12.54 22.26 41.85 9.08 55a34.34 34.34 0 0 1-48.55 0c-17.57-17.6-11.07-46.91 11.25-56v-123c-20.8-8.51-24.6-30.74-18.64-45L142.57 101 8.45 235.14a28.86 28.86 0 0 0 0 40.81l195.61 195.6a28.86 28.86 0 0 0 40.8 0l194.69-194.69a28.86 28.86 0 0 0 0-40.81z"/></svg>
188 </div>
189 <div class="md-source__repository">
190 GitHub
191 </div>
192 </a>
193 </div>
194
195 <ul class="md-nav__list" data-md-scrollfix>
196
197
198
199
200
201
202
203
204 <li class="md-nav__item">
205 <a href="../../../../getting-started/" class="md-nav__link">
206 Getting Started
207 </a>
208 </li>
209
210
211
212
213
214
215
216
217
218
219
220
221
222 <li class="md-nav__item md-nav__item--active md-nav__item--nested">
223
224
225 <input class="md-nav__toggle md-toggle" data-md-toggle="__nav_2" type="checkbox" id="__nav_2" checked>
226
227 <label class="md-nav__link" for="__nav_2">
228 PHP API
229 <span class="md-nav__icon md-icon"></span>
230 </label>
231 <nav class="md-nav" aria-label="PHP API" data-md-level="1">
232 <label class="md-nav__title" for="__nav_2">
233 <span class="md-nav__icon md-icon"></span>
234 PHP API
235 </label>
236 <ul class="md-nav__list" data-md-scrollfix>
237
238
239
240
241
242 <li class="md-nav__item">
243 <a href="../../../pages/" class="md-nav__link">
244 Pages
245 </a>
246 </li>
247
248
249
250
251
252
253
254 <li class="md-nav__item">
255 <a href="../../../database-objects/" class="md-nav__link">
256 Database Objects
257 </a>
258 </li>
259
260
261
262
263
264
265
266 <li class="md-nav__item">
267 <a href="../../../database-access/" class="md-nav__link">
268 Database Access
269 </a>
270 </li>
271
272
273
274
275
276
277
278 <li class="md-nav__item">
279 <a href="../../../exceptions/" class="md-nav__link">
280 Exceptions
281 </a>
282 </li>
283
284
285
286
287
288
289
290
291
292
293 <li class="md-nav__item md-nav__item--active md-nav__item--nested">
294
295
296 <input class="md-nav__toggle md-toggle" data-md-toggle="__nav_2_5" type="checkbox" id="__nav_2_5" checked>
297
298 <label class="md-nav__link" for="__nav_2_5">
299 API
300 <span class="md-nav__icon md-icon"></span>
301 </label>
302 <nav class="md-nav" aria-label="API" data-md-level="2">
303 <label class="md-nav__title" for="__nav_2_5">
304 <span class="md-nav__icon md-icon"></span>
305 API
306 </label>
307 <ul class="md-nav__list" data-md-scrollfix>
308
309
310
311
312
313 <li class="md-nav__item">
314 <a href="../../caches/" class="md-nav__link">
315 Caches
316 </a>
317 </li>
318
319
320
321
322
323
324
325 <li class="md-nav__item">
326 <a href="../../comments/" class="md-nav__link">
327 Comments
328 </a>
329 </li>
330
331
332
333
334
335
336
337 <li class="md-nav__item">
338 <a href="../../cronjobs/" class="md-nav__link">
339 Cronjobs
340 </a>
341 </li>
342
343
344
345
346
347
348
349 <li class="md-nav__item">
350 <a href="../../events/" class="md-nav__link">
351 Events
352 </a>
353 </li>
354
355
356
357
358
359
360
361
362
363
364 <li class="md-nav__item md-nav__item--active md-nav__item--nested">
365
366
367 <input class="md-nav__toggle md-toggle" data-md-toggle="__nav_2_5_5" type="checkbox" id="__nav_2_5_5" checked>
368
369 <label class="md-nav__link" for="__nav_2_5_5">
370 Form Builder
371 <span class="md-nav__icon md-icon"></span>
372 </label>
373 <nav class="md-nav" aria-label="Form Builder" data-md-level="3">
374 <label class="md-nav__title" for="__nav_2_5_5">
375 <span class="md-nav__icon md-icon"></span>
376 Form Builder
377 </label>
378 <ul class="md-nav__list" data-md-scrollfix>
379
380
381
382
383
384 <li class="md-nav__item">
385 <a href="../overview/" class="md-nav__link">
386 Overview
387 </a>
388 </li>
389
390
391
392
393
394
395
396 <li class="md-nav__item">
397 <a href="../structure/" class="md-nav__link">
398 Structure
399 </a>
400 </li>
401
402
403
404
405
406
407
408 <li class="md-nav__item">
409 <a href="../form_fields/" class="md-nav__link">
410 Fields
411 </a>
412 </li>
413
414
415
416
417
418
419
420 <li class="md-nav__item">
421 <a href="../validation_data/" class="md-nav__link">
422 Validation and Data
423 </a>
424 </li>
425
426
427
428
429
430
431
432
433
434 <li class="md-nav__item md-nav__item--active">
435
436 <input class="md-nav__toggle md-toggle" data-md-toggle="toc" type="checkbox" id="__toc">
437
438
439
440
441 <label class="md-nav__link md-nav__link--active" for="__toc">
442 Dependencies
443 <span class="md-nav__icon md-icon"></span>
444 </label>
445
446 <a href="./" class="md-nav__link md-nav__link--active">
447 Dependencies
448 </a>
449
450
451 <nav class="md-nav md-nav--secondary" aria-label="Table of contents">
452
453
454
455
456
457 <label class="md-nav__title" for="__toc">
458 <span class="md-nav__icon md-icon"></span>
459 Table of contents
460 </label>
461 <ul class="md-nav__list" data-md-component="toc" data-md-scrollfix>
462
463 <li class="md-nav__item">
464 <a href="#iformfielddependency" class="md-nav__link">
465 IFormFieldDependency
466 </a>
467
468 </li>
469
470 <li class="md-nav__item">
471 <a href="#default-dependencies" class="md-nav__link">
472 Default Dependencies
473 </a>
474
475 </li>
476
477 <li class="md-nav__item">
478 <a href="#javascript-implementation" class="md-nav__link">
479 JavaScript Implementation
480 </a>
481
482 </li>
483
484 <li class="md-nav__item">
485 <a href="#examples" class="md-nav__link">
486 Examples
487 </a>
488
489 </li>
490
491 </ul>
492
493 </nav>
494
495 </li>
496
497
498
499 </ul>
500 </nav>
501 </li>
502
503
504
505
506
507
508
509 <li class="md-nav__item">
510 <a href="../../package_installation_plugins/" class="md-nav__link">
511 Package Installation Plugins
512 </a>
513 </li>
514
515
516
517
518
519
520
521 <li class="md-nav__item">
522 <a href="../../user_activity_points/" class="md-nav__link">
523 User Activity Points
524 </a>
525 </li>
526
527
528
529
530
531
532
533 <li class="md-nav__item">
534 <a href="../../user_notifications/" class="md-nav__link">
535 User Notifications
536 </a>
537 </li>
538
539
540
541
542
543
544
545 <li class="md-nav__item">
546 <a href="../../sitemaps/" class="md-nav__link">
547 Sitemaps
548 </a>
549 </li>
550
551
552
553 </ul>
554 </nav>
555 </li>
556
557
558
559
560
561
562
563 <li class="md-nav__item">
564 <a href="../../../code-style/" class="md-nav__link">
565 Code Style
566 </a>
567 </li>
568
569
570
571
572
573
574
575 <li class="md-nav__item">
576 <a href="../../../apps/" class="md-nav__link">
577 Apps
578 </a>
579 </li>
580
581
582
583
584
585
586
587 <li class="md-nav__item">
588 <a href="../../../gdpr/" class="md-nav__link">
589 GDPR
590 </a>
591 </li>
592
593
594
595 </ul>
596 </nav>
597 </li>
598
599
600
601
602
603
604
605
606
607
608
609 <li class="md-nav__item md-nav__item--nested">
610
611
612 <input class="md-nav__toggle md-toggle" data-md-toggle="__nav_3" type="checkbox" id="__nav_3" >
613
614 <label class="md-nav__link" for="__nav_3">
615 Languages, Templates & CSS
616 <span class="md-nav__icon md-icon"></span>
617 </label>
618 <nav class="md-nav" aria-label="Languages, Templates & CSS" data-md-level="1">
619 <label class="md-nav__title" for="__nav_3">
620 <span class="md-nav__icon md-icon"></span>
621 Languages, Templates & CSS
622 </label>
623 <ul class="md-nav__list" data-md-scrollfix>
624
625
626
627
628
629 <li class="md-nav__item">
630 <a href="../../../../view/languages/" class="md-nav__link">
631 Languages
632 </a>
633 </li>
634
635
636
637
638
639
640
641 <li class="md-nav__item">
642 <a href="../../../../view/templates/" class="md-nav__link">
643 Templates
644 </a>
645 </li>
646
647
648
649
650
651
652
653 <li class="md-nav__item">
654 <a href="../../../../view/css/" class="md-nav__link">
655 CSS
656 </a>
657 </li>
658
659
660
661 </ul>
662 </nav>
663 </li>
664
665
666
667
668
669
670
671
672
673
674
675 <li class="md-nav__item md-nav__item--nested">
676
677
678 <input class="md-nav__toggle md-toggle" data-md-toggle="__nav_4" type="checkbox" id="__nav_4" >
679
680 <label class="md-nav__link" for="__nav_4">
681 TypeScript and JavaScript API
682 <span class="md-nav__icon md-icon"></span>
683 </label>
684 <nav class="md-nav" aria-label="TypeScript and JavaScript API" data-md-level="1">
685 <label class="md-nav__title" for="__nav_4">
686 <span class="md-nav__icon md-icon"></span>
687 TypeScript and JavaScript API
688 </label>
689 <ul class="md-nav__list" data-md-scrollfix>
690
691
692
693
694
695 <li class="md-nav__item">
696 <a href="../../../../javascript/general-usage/" class="md-nav__link">
697 General Usage
698 </a>
699 </li>
700
701
702
703
704
705
706
707 <li class="md-nav__item">
708 <a href="../../../../javascript/typescript/" class="md-nav__link">
709 TypeScript
710 </a>
711 </li>
712
713
714
715
716
717
718
719
720 <li class="md-nav__item md-nav__item--nested">
721
722
723 <input class="md-nav__toggle md-toggle" data-md-toggle="__nav_4_3" type="checkbox" id="__nav_4_3" >
724
725 <label class="md-nav__link" for="__nav_4_3">
726 New API
727 <span class="md-nav__icon md-icon"></span>
728 </label>
729 <nav class="md-nav" aria-label="New API" data-md-level="2">
730 <label class="md-nav__title" for="__nav_4_3">
731 <span class="md-nav__icon md-icon"></span>
732 New API
733 </label>
734 <ul class="md-nav__list" data-md-scrollfix>
735
736
737
738
739
740 <li class="md-nav__item">
741 <a href="../../../../javascript/new-api_writing-a-module/" class="md-nav__link">
742 Writing a module
743 </a>
744 </li>
745
746
747
748
749
750
751
752 <li class="md-nav__item">
753 <a href="../../../../javascript/new-api_data-structures/" class="md-nav__link">
754 Data Structures
755 </a>
756 </li>
757
758
759
760
761
762
763
764 <li class="md-nav__item">
765 <a href="../../../../javascript/new-api_core/" class="md-nav__link">
766 Core Functions
767 </a>
768 </li>
769
770
771
772
773
774
775
776 <li class="md-nav__item">
777 <a href="../../../../javascript/new-api_dom/" class="md-nav__link">
778 DOM
779 </a>
780 </li>
781
782
783
784
785
786
787
788 <li class="md-nav__item">
789 <a href="../../../../javascript/new-api_events/" class="md-nav__link">
790 Event Handling
791 </a>
792 </li>
793
794
795
796
797
798
799
800 <li class="md-nav__item">
801 <a href="../../../../javascript/new-api_ajax/" class="md-nav__link">
802 Ajax
803 </a>
804 </li>
805
806
807
808
809
810
811
812 <li class="md-nav__item">
813 <a href="../../../../javascript/new-api_dialogs/" class="md-nav__link">
814 Dialogs
815 </a>
816 </li>
817
818
819
820
821
822
823
824 <li class="md-nav__item">
825 <a href="../../../../javascript/new-api_browser/" class="md-nav__link">
826 Browser and Screen Sizes
827 </a>
828 </li>
829
830
831
832
833
834
835
836 <li class="md-nav__item">
837 <a href="../../../../javascript/new-api_ui/" class="md-nav__link">
838 User Interface
839 </a>
840 </li>
841
842
843
844 </ul>
845 </nav>
846 </li>
847
848
849
850
851
852
853
854 <li class="md-nav__item">
855 <a href="../../../../javascript/legacy-api/" class="md-nav__link">
856 Legacy API
857 </a>
858 </li>
859
860
861
862
863
864
865
866 <li class="md-nav__item">
867 <a href="../../../../javascript/helper-functions/" class="md-nav__link">
868 Helper Functions
869 </a>
870 </li>
871
872
873
874
875
876
877
878 <li class="md-nav__item">
879 <a href="../../../../javascript/code-snippets/" class="md-nav__link">
880 Code Snippets
881 </a>
882 </li>
883
884
885
886 </ul>
887 </nav>
888 </li>
889
890
891
892
893
894
895
896
897
898
899
900 <li class="md-nav__item md-nav__item--nested">
901
902
903 <input class="md-nav__toggle md-toggle" data-md-toggle="__nav_5" type="checkbox" id="__nav_5" >
904
905 <label class="md-nav__link" for="__nav_5">
906 Package Components
907 <span class="md-nav__icon md-icon"></span>
908 </label>
909 <nav class="md-nav" aria-label="Package Components" data-md-level="1">
910 <label class="md-nav__title" for="__nav_5">
911 <span class="md-nav__icon md-icon"></span>
912 Package Components
913 </label>
914 <ul class="md-nav__list" data-md-scrollfix>
915
916
917
918
919
920 <li class="md-nav__item">
921 <a href="../../../../package/package-xml/" class="md-nav__link">
922 package.xml
923 </a>
924 </li>
925
926
927
928
929
930
931
932
933 <li class="md-nav__item md-nav__item--nested">
934
935
936 <input class="md-nav__toggle md-toggle" data-md-toggle="__nav_5_2" type="checkbox" id="__nav_5_2" >
937
938 <label class="md-nav__link" for="__nav_5_2">
939 PIPs
940 <span class="md-nav__icon md-icon"></span>
941 </label>
942 <nav class="md-nav" aria-label="PIPs" data-md-level="2">
943 <label class="md-nav__title" for="__nav_5_2">
944 <span class="md-nav__icon md-icon"></span>
945 PIPs
946 </label>
947 <ul class="md-nav__list" data-md-scrollfix>
948
949
950
951
952
953 <li class="md-nav__item">
954 <a href="../../../../package/pip/" class="md-nav__link">
955 Overview
956 </a>
957 </li>
958
959
960
961
962
963
964
965 <li class="md-nav__item">
966 <a href="../../../../package/pip/acl-option/" class="md-nav__link">
967 aclOption
968 </a>
969 </li>
970
971
972
973
974
975
976
977 <li class="md-nav__item">
978 <a href="../../../../package/pip/acp-menu/" class="md-nav__link">
979 acpMenu
980 </a>
981 </li>
982
983
984
985
986
987
988
989 <li class="md-nav__item">
990 <a href="../../../../package/pip/acp-search-provider/" class="md-nav__link">
991 acpSearchProvider
992 </a>
993 </li>
994
995
996
997
998
999
1000
1001 <li class="md-nav__item">
1002 <a href="../../../../package/pip/acp-template/" class="md-nav__link">
1003 acpTemplate
1004 </a>
1005 </li>
1006
1007
1008
1009
1010
1011
1012
1013 <li class="md-nav__item">
1014 <a href="../../../../package/pip/bbcode/" class="md-nav__link">
1015 bbcode
1016 </a>
1017 </li>
1018
1019
1020
1021
1022
1023
1024
1025 <li class="md-nav__item">
1026 <a href="../../../../package/pip/box/" class="md-nav__link">
1027 box
1028 </a>
1029 </li>
1030
1031
1032
1033
1034
1035
1036
1037 <li class="md-nav__item">
1038 <a href="../../../../package/pip/clipboard-action/" class="md-nav__link">
1039 clipboardAction
1040 </a>
1041 </li>
1042
1043
1044
1045
1046
1047
1048
1049 <li class="md-nav__item">
1050 <a href="../../../../package/pip/core-object/" class="md-nav__link">
1051 coreObject
1052 </a>
1053 </li>
1054
1055
1056
1057
1058
1059
1060
1061 <li class="md-nav__item">
1062 <a href="../../../../package/pip/cronjob/" class="md-nav__link">
1063 cronjob
1064 </a>
1065 </li>
1066
1067
1068
1069
1070
1071
1072
1073 <li class="md-nav__item">
1074 <a href="../../../../package/pip/event-listener/" class="md-nav__link">
1075 eventListener
1076 </a>
1077 </li>
1078
1079
1080
1081
1082
1083
1084
1085 <li class="md-nav__item">
1086 <a href="../../../../package/pip/file/" class="md-nav__link">
1087 file
1088 </a>
1089 </li>
1090
1091
1092
1093
1094
1095
1096
1097 <li class="md-nav__item">
1098 <a href="../../../../package/pip/language/" class="md-nav__link">
1099 language
1100 </a>
1101 </li>
1102
1103
1104
1105
1106
1107
1108
1109 <li class="md-nav__item">
1110 <a href="../../../../package/pip/media-provider/" class="md-nav__link">
1111 mediaProvider
1112 </a>
1113 </li>
1114
1115
1116
1117
1118
1119
1120
1121 <li class="md-nav__item">
1122 <a href="../../../../package/pip/menu/" class="md-nav__link">
1123 menu
1124 </a>
1125 </li>
1126
1127
1128
1129
1130
1131
1132
1133 <li class="md-nav__item">
1134 <a href="../../../../package/pip/menu-item/" class="md-nav__link">
1135 menuItem
1136 </a>
1137 </li>
1138
1139
1140
1141
1142
1143
1144
1145 <li class="md-nav__item">
1146 <a href="../../../../package/pip/object-type/" class="md-nav__link">
1147 objectType
1148 </a>
1149 </li>
1150
1151
1152
1153
1154
1155
1156
1157 <li class="md-nav__item">
1158 <a href="../../../../package/pip/object-type-definition/" class="md-nav__link">
1159 objectTypeDefinition
1160 </a>
1161 </li>
1162
1163
1164
1165
1166
1167
1168
1169 <li class="md-nav__item">
1170 <a href="../../../../package/pip/option/" class="md-nav__link">
1171 option
1172 </a>
1173 </li>
1174
1175
1176
1177
1178
1179
1180
1181 <li class="md-nav__item">
1182 <a href="../../../../package/pip/page/" class="md-nav__link">
1183 page
1184 </a>
1185 </li>
1186
1187
1188
1189
1190
1191
1192
1193 <li class="md-nav__item">
1194 <a href="../../../../package/pip/pip/" class="md-nav__link">
1195 pip
1196 </a>
1197 </li>
1198
1199
1200
1201
1202
1203
1204
1205 <li class="md-nav__item">
1206 <a href="../../../../package/pip/script/" class="md-nav__link">
1207 script
1208 </a>
1209 </li>
1210
1211
1212
1213
1214
1215
1216
1217 <li class="md-nav__item">
1218 <a href="../../../../package/pip/smiley/" class="md-nav__link">
1219 smiley
1220 </a>
1221 </li>
1222
1223
1224
1225
1226
1227
1228
1229 <li class="md-nav__item">
1230 <a href="../../../../package/pip/sql/" class="md-nav__link">
1231 sql
1232 </a>
1233 </li>
1234
1235
1236
1237
1238
1239
1240
1241 <li class="md-nav__item">
1242 <a href="../../../../package/pip/style/" class="md-nav__link">
1243 style
1244 </a>
1245 </li>
1246
1247
1248
1249
1250
1251
1252
1253 <li class="md-nav__item">
1254 <a href="../../../../package/pip/template/" class="md-nav__link">
1255 template
1256 </a>
1257 </li>
1258
1259
1260
1261
1262
1263
1264
1265 <li class="md-nav__item">
1266 <a href="../../../../package/pip/template-listener/" class="md-nav__link">
1267 templateListener
1268 </a>
1269 </li>
1270
1271
1272
1273
1274
1275
1276
1277 <li class="md-nav__item">
1278 <a href="../../../../package/pip/user-group-option/" class="md-nav__link">
1279 userGroupOption
1280 </a>
1281 </li>
1282
1283
1284
1285
1286
1287
1288
1289 <li class="md-nav__item">
1290 <a href="../../../../package/pip/user-menu/" class="md-nav__link">
1291 userMenu
1292 </a>
1293 </li>
1294
1295
1296
1297
1298
1299
1300
1301 <li class="md-nav__item">
1302 <a href="../../../../package/pip/user-notification-event/" class="md-nav__link">
1303 userNotificationEvent
1304 </a>
1305 </li>
1306
1307
1308
1309
1310
1311
1312
1313 <li class="md-nav__item">
1314 <a href="../../../../package/pip/user-option/" class="md-nav__link">
1315 userOption
1316 </a>
1317 </li>
1318
1319
1320
1321
1322
1323
1324
1325 <li class="md-nav__item">
1326 <a href="../../../../package/pip/user-profile-menu/" class="md-nav__link">
1327 userProfileMenu
1328 </a>
1329 </li>
1330
1331
1332
1333 </ul>
1334 </nav>
1335 </li>
1336
1337
1338
1339
1340
1341
1342
1343 <li class="md-nav__item">
1344 <a href="../../../../package/database-php-api/" class="md-nav__link">
1345 Database PHP API
1346 </a>
1347 </li>
1348
1349
1350
1351 </ul>
1352 </nav>
1353 </li>
1354
1355
1356
1357
1358
1359
1360
1361
1362
1363
1364
1365 <li class="md-nav__item md-nav__item--nested">
1366
1367
1368 <input class="md-nav__toggle md-toggle" data-md-toggle="__nav_6" type="checkbox" id="__nav_6" >
1369
1370 <label class="md-nav__link" for="__nav_6">
1371 Migration
1372 <span class="md-nav__icon md-icon"></span>
1373 </label>
1374 <nav class="md-nav" aria-label="Migration" data-md-level="1">
1375 <label class="md-nav__title" for="__nav_6">
1376 <span class="md-nav__icon md-icon"></span>
1377 Migration
1378 </label>
1379 <ul class="md-nav__list" data-md-scrollfix>
1380
1381
1382
1383
1384
1385
1386 <li class="md-nav__item md-nav__item--nested">
1387
1388
1389 <input class="md-nav__toggle md-toggle" data-md-toggle="__nav_6_1" type="checkbox" id="__nav_6_1" >
1390
1391 <label class="md-nav__link" for="__nav_6_1">
1392 Migrating from WSC 5.3
1393 <span class="md-nav__icon md-icon"></span>
1394 </label>
1395 <nav class="md-nav" aria-label="Migrating from WSC 5.3" data-md-level="2">
1396 <label class="md-nav__title" for="__nav_6_1">
1397 <span class="md-nav__icon md-icon"></span>
1398 Migrating from WSC 5.3
1399 </label>
1400 <ul class="md-nav__list" data-md-scrollfix>
1401
1402
1403
1404
1405
1406 <li class="md-nav__item">
1407 <a href="../../../../migration/wsc53/php/" class="md-nav__link">
1408 PHP API
1409 </a>
1410 </li>
1411
1412
1413
1414
1415
1416
1417
1418 <li class="md-nav__item">
1419 <a href="../../../../migration/wsc53/session/" class="md-nav__link">
1420 Session Handling and Authentication
1421 </a>
1422 </li>
1423
1424
1425
1426
1427
1428
1429
1430 <li class="md-nav__item">
1431 <a href="../../../../migration/wsc53/javascript/" class="md-nav__link">
1432 TypeScript and JavaScript
1433 </a>
1434 </li>
1435
1436
1437
1438
1439
1440
1441
1442 <li class="md-nav__item">
1443 <a href="../../../../migration/wsc53/templates/" class="md-nav__link">
1444 Templates
1445 </a>
1446 </li>
1447
1448
1449
1450
1451
1452
1453
1454 <li class="md-nav__item">
1455 <a href="../../../../migration/wsc53/libraries/" class="md-nav__link">
1456 Third Party Libraries
1457 </a>
1458 </li>
1459
1460
1461
1462 </ul>
1463 </nav>
1464 </li>
1465
1466
1467
1468
1469
1470
1471
1472
1473 <li class="md-nav__item md-nav__item--nested">
1474
1475
1476 <input class="md-nav__toggle md-toggle" data-md-toggle="__nav_6_2" type="checkbox" id="__nav_6_2" >
1477
1478 <label class="md-nav__link" for="__nav_6_2">
1479 Migrating from WSC 5.2
1480 <span class="md-nav__icon md-icon"></span>
1481 </label>
1482 <nav class="md-nav" aria-label="Migrating from WSC 5.2" data-md-level="2">
1483 <label class="md-nav__title" for="__nav_6_2">
1484 <span class="md-nav__icon md-icon"></span>
1485 Migrating from WSC 5.2
1486 </label>
1487 <ul class="md-nav__list" data-md-scrollfix>
1488
1489
1490
1491
1492
1493 <li class="md-nav__item">
1494 <a href="../../../../migration/wsc52/php/" class="md-nav__link">
1495 PHP API
1496 </a>
1497 </li>
1498
1499
1500
1501
1502
1503
1504
1505 <li class="md-nav__item">
1506 <a href="../../../../migration/wsc52/templates/" class="md-nav__link">
1507 Templates and Languages
1508 </a>
1509 </li>
1510
1511
1512
1513
1514
1515
1516
1517 <li class="md-nav__item">
1518 <a href="../../../../migration/wsc52/libraries/" class="md-nav__link">
1519 Third Party Libraries
1520 </a>
1521 </li>
1522
1523
1524
1525 </ul>
1526 </nav>
1527 </li>
1528
1529
1530
1531
1532
1533
1534
1535
1536 <li class="md-nav__item md-nav__item--nested">
1537
1538
1539 <input class="md-nav__toggle md-toggle" data-md-toggle="__nav_6_3" type="checkbox" id="__nav_6_3" >
1540
1541 <label class="md-nav__link" for="__nav_6_3">
1542 Migrating from WSC 3.1
1543 <span class="md-nav__icon md-icon"></span>
1544 </label>
1545 <nav class="md-nav" aria-label="Migrating from WSC 3.1" data-md-level="2">
1546 <label class="md-nav__title" for="__nav_6_3">
1547 <span class="md-nav__icon md-icon"></span>
1548 Migrating from WSC 3.1
1549 </label>
1550 <ul class="md-nav__list" data-md-scrollfix>
1551
1552
1553
1554
1555
1556 <li class="md-nav__item">
1557 <a href="../../../../migration/wsc31/php/" class="md-nav__link">
1558 PHP API
1559 </a>
1560 </li>
1561
1562
1563
1564 </ul>
1565 </nav>
1566 </li>
1567
1568
1569
1570
1571
1572
1573
1574
1575 <li class="md-nav__item md-nav__item--nested">
1576
1577
1578 <input class="md-nav__toggle md-toggle" data-md-toggle="__nav_6_4" type="checkbox" id="__nav_6_4" >
1579
1580 <label class="md-nav__link" for="__nav_6_4">
1581 Migrating from WSC 3.0
1582 <span class="md-nav__icon md-icon"></span>
1583 </label>
1584 <nav class="md-nav" aria-label="Migrating from WSC 3.0" data-md-level="2">
1585 <label class="md-nav__title" for="__nav_6_4">
1586 <span class="md-nav__icon md-icon"></span>
1587 Migrating from WSC 3.0
1588 </label>
1589 <ul class="md-nav__list" data-md-scrollfix>
1590
1591
1592
1593
1594
1595 <li class="md-nav__item">
1596 <a href="../../../../migration/wsc30/php/" class="md-nav__link">
1597 PHP API
1598 </a>
1599 </li>
1600
1601
1602
1603
1604
1605
1606
1607 <li class="md-nav__item">
1608 <a href="../../../../migration/wsc30/javascript/" class="md-nav__link">
1609 JavaScript API
1610 </a>
1611 </li>
1612
1613
1614
1615
1616
1617
1618
1619 <li class="md-nav__item">
1620 <a href="../../../../migration/wsc30/templates/" class="md-nav__link">
1621 Templates
1622 </a>
1623 </li>
1624
1625
1626
1627
1628
1629
1630
1631 <li class="md-nav__item">
1632 <a href="../../../../migration/wsc30/css/" class="md-nav__link">
1633 CSS
1634 </a>
1635 </li>
1636
1637
1638
1639
1640
1641
1642
1643 <li class="md-nav__item">
1644 <a href="../../../../migration/wsc30/package/" class="md-nav__link">
1645 Package Components
1646 </a>
1647 </li>
1648
1649
1650
1651 </ul>
1652 </nav>
1653 </li>
1654
1655
1656
1657
1658
1659
1660
1661
1662 <li class="md-nav__item md-nav__item--nested">
1663
1664
1665 <input class="md-nav__toggle md-toggle" data-md-toggle="__nav_6_5" type="checkbox" id="__nav_6_5" >
1666
1667 <label class="md-nav__link" for="__nav_6_5">
1668 Migrating from WCF 2.1
1669 <span class="md-nav__icon md-icon"></span>
1670 </label>
1671 <nav class="md-nav" aria-label="Migrating from WCF 2.1" data-md-level="2">
1672 <label class="md-nav__title" for="__nav_6_5">
1673 <span class="md-nav__icon md-icon"></span>
1674 Migrating from WCF 2.1
1675 </label>
1676 <ul class="md-nav__list" data-md-scrollfix>
1677
1678
1679
1680
1681
1682 <li class="md-nav__item">
1683 <a href="../../../../migration/wcf21/php/" class="md-nav__link">
1684 PHP API
1685 </a>
1686 </li>
1687
1688
1689
1690
1691
1692
1693
1694 <li class="md-nav__item">
1695 <a href="../../../../migration/wcf21/templates/" class="md-nav__link">
1696 Templates
1697 </a>
1698 </li>
1699
1700
1701
1702
1703
1704
1705
1706 <li class="md-nav__item">
1707 <a href="../../../../migration/wcf21/css/" class="md-nav__link">
1708 CSS
1709 </a>
1710 </li>
1711
1712
1713
1714
1715
1716
1717
1718 <li class="md-nav__item">
1719 <a href="../../../../migration/wcf21/package/" class="md-nav__link">
1720 Package Components
1721 </a>
1722 </li>
1723
1724
1725
1726 </ul>
1727 </nav>
1728 </li>
1729
1730
1731
1732 </ul>
1733 </nav>
1734 </li>
1735
1736
1737
1738
1739
1740
1741
1742
1743
1744
1745
1746 <li class="md-nav__item md-nav__item--nested">
1747
1748
1749 <input class="md-nav__toggle md-toggle" data-md-toggle="__nav_7" type="checkbox" id="__nav_7" >
1750
1751 <label class="md-nav__link" for="__nav_7">
1752 Tutorials
1753 <span class="md-nav__icon md-icon"></span>
1754 </label>
1755 <nav class="md-nav" aria-label="Tutorials" data-md-level="1">
1756 <label class="md-nav__title" for="__nav_7">
1757 <span class="md-nav__icon md-icon"></span>
1758 Tutorials
1759 </label>
1760 <ul class="md-nav__list" data-md-scrollfix>
1761
1762
1763
1764
1765
1766
1767 <li class="md-nav__item md-nav__item--nested">
1768
1769
1770 <input class="md-nav__toggle md-toggle" data-md-toggle="__nav_7_1" type="checkbox" id="__nav_7_1" >
1771
1772 <label class="md-nav__link" for="__nav_7_1">
1773 Tutorial Series
1774 <span class="md-nav__icon md-icon"></span>
1775 </label>
1776 <nav class="md-nav" aria-label="Tutorial Series" data-md-level="2">
1777 <label class="md-nav__title" for="__nav_7_1">
1778 <span class="md-nav__icon md-icon"></span>
1779 Tutorial Series
1780 </label>
1781 <ul class="md-nav__list" data-md-scrollfix>
1782
1783
1784
1785
1786
1787 <li class="md-nav__item">
1788 <a href="../../../../tutorial/series/overview/" class="md-nav__link">
1789 Overview
1790 </a>
1791 </li>
1792
1793
1794
1795
1796
1797
1798
1799 <li class="md-nav__item">
1800 <a href="../../../../tutorial/series/part_1/" class="md-nav__link">
1801 Part 1
1802 </a>
1803 </li>
1804
1805
1806
1807
1808
1809
1810
1811 <li class="md-nav__item">
1812 <a href="../../../../tutorial/series/part_2/" class="md-nav__link">
1813 Part 2
1814 </a>
1815 </li>
1816
1817
1818
1819
1820
1821
1822
1823 <li class="md-nav__item">
1824 <a href="../../../../tutorial/series/part_3/" class="md-nav__link">
1825 Part 3
1826 </a>
1827 </li>
1828
1829
1830
1831 </ul>
1832 </nav>
1833 </li>
1834
1835
1836
1837 </ul>
1838 </nav>
1839 </li>
1840
1841
1842
1843 </ul>
1844 </nav>
1845 </div>
1846 </div>
1847 </div>
1848
1849
1850
1851 <div class="md-sidebar md-sidebar--secondary" data-md-component="sidebar" data-md-type="toc" >
1852 <div class="md-sidebar__scrollwrap">
1853 <div class="md-sidebar__inner">
1854
1855 <nav class="md-nav md-nav--secondary" aria-label="Table of contents">
1856
1857
1858
1859
1860
1861 <label class="md-nav__title" for="__toc">
1862 <span class="md-nav__icon md-icon"></span>
1863 Table of contents
1864 </label>
1865 <ul class="md-nav__list" data-md-component="toc" data-md-scrollfix>
1866
1867 <li class="md-nav__item">
1868 <a href="#iformfielddependency" class="md-nav__link">
1869 IFormFieldDependency
1870 </a>
1871
1872 </li>
1873
1874 <li class="md-nav__item">
1875 <a href="#default-dependencies" class="md-nav__link">
1876 Default Dependencies
1877 </a>
1878
1879 </li>
1880
1881 <li class="md-nav__item">
1882 <a href="#javascript-implementation" class="md-nav__link">
1883 JavaScript Implementation
1884 </a>
1885
1886 </li>
1887
1888 <li class="md-nav__item">
1889 <a href="#examples" class="md-nav__link">
1890 Examples
1891 </a>
1892
1893 </li>
1894
1895 </ul>
1896
1897 </nav>
1898 </div>
1899 </div>
1900 </div>
1901
1902
1903 <div class="md-content" data-md-component="content">
1904 <article class="md-content__inner md-typeset">
1905
1906
1907 <a href="https://github.com/WoltLab/docs.woltlab.com/edit/5.4/docs/php/api/form_builder/dependencies.md" title="Edit this page" class="md-content__button md-icon">
1908 <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M20.71 7.04c.39-.39.39-1.04 0-1.41l-2.34-2.34c-.37-.39-1.02-.39-1.41 0l-1.84 1.83 3.75 3.75M3 17.25V21h3.75L17.81 9.93l-3.75-3.75L3 17.25z"/></svg>
1909 </a>
1910
1911
1912 <h1 id="form-node-dependencies">Form Node Dependencies<a class="headerlink" href="#form-node-dependencies" title="Permanent link">#</a></h1>
1913 <p>Form node dependencies allow to make parts of a form dynamically available or unavailable depending on the values of form fields.
1914 Dependencies are always added to the object whose visibility is determined by certain form fields.
1915 They are <strong>not</strong> added to the form field’s whose values determine the visibility!
1916 An example is a text form field that should only be available if a certain option from a single selection form field is selected.
1917 Form builder’s dependency system supports such scenarios and also automatically making form containers unavailable once all of its children are unavailable.</p>
1918 <p>If a form node has multiple dependencies and one of them is not met, the form node is unavailable.
1919 A form node not being available due to dependencies has to the following consequences:</p>
1920 <ul>
1921 <li>The form field value is not validated. It is, however, read from the request data as all request data needs to be read first so that the dependencies can determine whether they are met or not.</li>
1922 <li>No data is collected for the form field and returned by <code>IFormDocument::getData()</code>.</li>
1923 <li>In the actual form, the form field will be hidden via JavaScript.</li>
1924 </ul>
1925 <h2 id="iformfielddependency"><code>IFormFieldDependency</code><a class="headerlink" href="#iformfielddependency" title="Permanent link">#</a></h2>
1926 <p>The basis of the dependencies is the <code>IFormFieldDependency</code> interface that has to be implemented by every dependency class.
1927 The interface requires the following methods:</p>
1928 <ul>
1929 <li><code>checkDependency()</code> checks if the dependency is met, thus if the dependant form field should be considered available.</li>
1930 <li><code>dependentNode(IFormNode $node)</code> and <code>getDependentNode()</code> can be used to set and get the node whose availability depends on the referenced form field.
1931 <code>TFormNode::addDependency()</code> automatically calls <code>dependentNode(IFormNode $node)</code> with itself as the dependent node, thus the dependent node is automatically set by the API.</li>
1932 <li><code>field(IFormField $field)</code> and <code>getField()</code> can be used to set and get the form field that influences the availability of the dependent node.</li>
1933 <li><code>fieldId($fieldId)</code> and <code>getFieldId()</code> can be used to set and get the id of the form field that influences the availability of the dependent node.</li>
1934 <li><code>getHtml()</code> returns JavaScript code required to ensure the dependency in the form output.</li>
1935 <li><code>getId()</code> returns the id of the dependency used to identify multiple dependencies of the same form node.</li>
1936 <li><code>static create($id)</code> is the factory method that has to be used to create new dependencies with the given id.</li>
1937 </ul>
1938 <p><code>AbstractFormFieldDependency</code> provides default implementations for all methods except for <code>checkDependency()</code>.</p>
1939 <p>Using <code>fieldId($fieldId)</code> instead of <code>field(IFormField $field)</code> makes sense when adding the dependency directly when setting up the form:</p>
1940 <div class="highlight"><pre><span></span><code><span class="nv">$container</span><span class="o">-&gt;</span><span class="na">appendChildren</span><span class="p">([</span>
1941 <span class="nx">FooField</span><span class="o">::</span><span class="na">create</span><span class="p">(</span><span class="s1">&#39;a&#39;</span><span class="p">),</span>
1942
1943 <span class="nx">BarField</span><span class="o">::</span><span class="na">create</span><span class="p">(</span><span class="s1">&#39;b&#39;</span><span class="p">)</span>
1944 <span class="o">-&gt;</span><span class="na">addDependency</span><span class="p">(</span>
1945 <span class="nx">BazDependency</span><span class="o">::</span><span class="na">create</span><span class="p">(</span><span class="s1">&#39;a&#39;</span><span class="p">)</span>
1946 <span class="o">-&gt;</span><span class="na">fieldId</span><span class="p">(</span><span class="s1">&#39;a&#39;</span><span class="p">)</span>
1947 <span class="p">)</span>
1948 <span class="p">]);</span>
1949 </code></pre></div>
1950 <p>Here, without an additional assignment, the first field with id <code>a</code> cannot be accessed thus <code>fieldId($fieldId)</code> should be used as the id of the relevant field is known.
1951 When the form is built, all dependencies that only know the id of the relevant field and do not have a reference for the actual object are populated with the actual form field objects.</p>
1952 <h2 id="default-dependencies">Default Dependencies<a class="headerlink" href="#default-dependencies" title="Permanent link">#</a></h2>
1953 <p>WoltLab Suite Core delivers the following two default dependency classes by default:</p>
1954 <ul>
1955 <li><code>NonEmptyFormFieldDependency</code> can be used to ensure that a node is only shown if the value of the referenced form field is not empty (being empty is determined using PHP’s <code>empty</code> function).</li>
1956 <li><code>ValueFormFieldDependency</code> can be used to ensure that a node is only shown if the value of the referenced form field is from a specified list of of values (see methods <code>values($values)</code> and <code>getValues()</code>).
1957 Additionally, via <code>negate($negate = true)</code> and <code>isNegated()</code>, the locic can also be inverted by requiring the value of the referenced form field not to be from a specified list of values.</li>
1958 </ul>
1959 <h2 id="javascript-implementation">JavaScript Implementation<a class="headerlink" href="#javascript-implementation" title="Permanent link">#</a></h2>
1960 <p>To ensure that dependent node are correctly shown and hidden when changing the value of referenced form fields, every PHP dependency class has a corresponding JavaScript module that checks the dependency in the browser.
1961 Every JavaScript dependency has to extend <code>WoltLabSuite/Core/Form/Builder/Field/Dependency/Abstract</code> and implement the <code>checkDependency()</code> function, the JavaScript version of <code>IFormFieldDependency::checkDependency()</code>.</p>
1962 <p>All of the JavaScript dependency objects automatically register themselves during initialization with the <code>WoltLabSuite/Core/Form/Builder/Field/Dependency/Manager</code> which takes care of checking the dependencies at the correct points in time.</p>
1963 <p>Additionally, the dependency manager also ensures that form containers in which all children are hidden due to dependencies are also hidden and, once any child becomes available again, makes the container also available again.
1964 Every form container has to create a matching form container dependency object from a module based on <code>WoltLabSuite/Core/Form/Builder/Field/Dependency/Abstract</code>.</p>
1965 <h2 id="examples">Examples<a class="headerlink" href="#examples" title="Permanent link">#</a></h2>
1966 <p>If <code>$booleanFormField</code> is an instance of <code>BooleanFormField</code> and the text form field <code>$textFormField</code> should only be available if “Yes” has been selected, the following condition has to be set up:</p>
1967 <div class="highlight"><pre><span></span><code><span class="nv">$textFormField</span><span class="o">-&gt;</span><span class="na">addDependency</span><span class="p">(</span>
1968 <span class="nx">NonEmptyFormFieldDependency</span><span class="o">::</span><span class="na">create</span><span class="p">(</span><span class="s1">&#39;booleanFormField&#39;</span><span class="p">)</span>
1969 <span class="o">-&gt;</span><span class="na">field</span><span class="p">(</span><span class="nv">$booleanFormField</span><span class="p">)</span>
1970 <span class="p">);</span>
1971 </code></pre></div>
1972 <p>If <code>$singleSelectionFormField</code> is an instance of <code>SingleSelectionFormField</code> that offers the options <code>1</code>, <code>2</code>, and <code>3</code> and <code>$textFormField</code> should only be available if <code>1</code> or <code>3</code> is selected, the following condition has to be set up:</p>
1973 <div class="highlight"><pre><span></span><code><span class="nv">$textFormField</span><span class="o">-&gt;</span><span class="na">addDependency</span><span class="p">(</span>
1974 <span class="nx">NonEmptyFormFieldDependency</span><span class="o">::</span><span class="na">create</span><span class="p">(</span><span class="s1">&#39;singleSelectionFormField&#39;</span><span class="p">)</span>
1975 <span class="o">-&gt;</span><span class="na">field</span><span class="p">(</span><span class="nv">$singleSelectionFormField</span><span class="p">)</span>
1976 <span class="o">-&gt;</span><span class="na">values</span><span class="p">([</span><span class="mi">1</span><span class="p">,</span> <span class="mi">3</span><span class="p">])</span>
1977 <span class="p">);</span>
1978 </code></pre></div>
1979 <p>If, in contrast, <code>$singleSelectionFormField</code> has many available options and <code>7</code> is the only option for which <code>$textFormField</code> should <strong>not</strong> be available, <code>negate()</code> should be used:</p>
1980 <div class="highlight"><pre><span></span><code><span class="nv">$textFormField</span><span class="o">-&gt;</span><span class="na">addDependency</span><span class="p">(</span>
1981 <span class="nx">NonEmptyFormFieldDependency</span><span class="o">::</span><span class="na">create</span><span class="p">(</span><span class="s1">&#39;singleSelectionFormField&#39;</span><span class="p">)</span>
1982 <span class="o">-&gt;</span><span class="na">field</span><span class="p">(</span><span class="nv">$singleSelectionFormField</span><span class="p">)</span>
1983 <span class="o">-&gt;</span><span class="na">values</span><span class="p">([</span><span class="mi">7</span><span class="p">])</span>
1984 <span class="o">-&gt;</span><span class="na">negate</span><span class="p">()</span>
1985 <span class="p">);</span>
1986 </code></pre></div>
1987
1988
1989
1990
1991 <hr>
1992 <div class="md-source-date">
1993 <small>
1994
1995 Last update: 2021-01-15
1996
1997 </small>
1998 </div>
1999
2000
2001
2002
2003
2004
2005
2006
2007 </article>
2008 </div>
2009 </div>
2010
2011 </main>
2012
2013
2014 <footer class="md-footer">
2015
2016 <nav class="md-footer__inner md-grid" aria-label="Footer">
2017
2018 <a href="../validation_data/" class="md-footer__link md-footer__link--prev" rel="prev">
2019 <div class="md-footer__button md-icon">
2020 <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M20 11v2H8l5.5 5.5-1.42 1.42L4.16 12l7.92-7.92L13.5 5.5 8 11h12z"/></svg>
2021 </div>
2022 <div class="md-footer__title">
2023 <div class="md-ellipsis">
2024 <span class="md-footer__direction">
2025 Previous
2026 </span>
2027 Validation and Data
2028 </div>
2029 </div>
2030 </a>
2031
2032
2033 <a href="../../package_installation_plugins/" class="md-footer__link md-footer__link--next" rel="next">
2034 <div class="md-footer__title">
2035 <div class="md-ellipsis">
2036 <span class="md-footer__direction">
2037 Next
2038 </span>
2039 Package Installation Plugins
2040 </div>
2041 </div>
2042 <div class="md-footer__button md-icon">
2043 <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M4 11v2h12l-5.5 5.5 1.42 1.42L19.84 12l-7.92-7.92L10.5 5.5 16 11H4z"/></svg>
2044 </div>
2045 </a>
2046
2047 </nav>
2048
2049 <div class="md-footer-meta md-typeset">
2050 <div class="md-footer-meta__inner md-grid">
2051 <div class="md-footer-copyright">
2052
2053 <div class="md-footer-copyright__highlight">
2054 Copyright © 2020 WoltLab GmbH
2055 </div>
2056
2057 Made with
2058 <a href="https://squidfunk.github.io/mkdocs-material/" target="_blank" rel="noopener">
2059 Material for MkDocs
2060 </a>
2061
2062 </div>
2063 <div class="md-footer-copyright">
2064 <a href="https://www.woltlab.com/legal-notice/">Legal Notice</a>
2065 <a href="https://www.woltlab.com/privacy-policy/">Privacy Policy</a>
2066 </div>
2067 </div>
2068 </div>
2069 </footer>
2070
2071 </div>
2072 <div class="md-dialog" data-md-component="dialog">
2073 <div class="md-dialog__inner md-typeset"></div>
2074 </div>
2075 <script id="__config" type="application/json">{"base": "../../../..", "features": [], "translations": {"clipboard.copy": "Copy to clipboard", "clipboard.copied": "Copied to clipboard", "search.config.lang": "en", "search.config.pipeline": "trimmer, stopWordFilter", "search.config.separator": "[\\s\\-]+", "search.placeholder": "Search", "search.result.placeholder": "Type to start searching", "search.result.none": "No matching documents", "search.result.one": "1 matching document", "search.result.other": "# matching documents", "search.result.more.one": "1 more on this page", "search.result.more.other": "# more on this page", "search.result.term.missing": "Missing"}, "search": "../../../../assets/javascripts/workers/search.fe42c31b.min.js", "version": {"provider": "mike"}}</script>
2076
2077
2078 <script src="../../../../assets/javascripts/bundle.d892486b.min.js"></script>
2079
2080
2081 </body>
2082 </html>