Advanced usage: example with Doctrine

That's not really an advanced topic, but the sample will be a bit hard to read (as it takes many files), so let's say it targets more experienced Symfony users.

In this demo, we're displaying a MyArray of MyElements, both persisted into the database. The MyArray entity only have an id and a name, and MyElement has id, MyArray's id and a value. This is quite the same as we seen in all demos, but persisted.

Array name:
Add an element...

Existing arrays:
Name Open Delete
_ Open Delete
___ ☘ Cela fonctionne â Open Delete
___ ☘ Cela fonctionne Ã34н34н Open Delete
____ Open Delete
_________AAAAAAAAAAAAA_______ Open Delete
_________coucou------------------ Open Delete
_______aaaazz Open Delete
___%20%C3%83%C2%A2%C3%82%C2%98%C3%82%C2%98%20Cela%20fonctionne%20%C3%83 Open Delete
___%20%C3%A2%C2%98%C2%98%20Cela%20fonctionne%20%C3%A2 Open Delete
___array___ Open Delete
___m Open Delete
__EDLP_7-0_ Open Delete
--- Open Delete
---#i1dcd1cbb0d8eeb1fd3a32dc2aa9c8013 Open Delete
---#i27992875ec4286a24e569b1e015b0473 Open Delete
---#i8c18088ea4d8dd4d6e5e986bceed35da Open Delete
---#ie025efbbb0738ed01a63b326c174233e Open Delete
!!!!sdsdsd Open Delete
. Open Delete
' Open Delete
'rtrt Open Delete
(orphée) Open Delete
(SELECT (CASE WHEN (4626=9556) THEN 'kjh' ELSE (SELECT 9556 UNION SELECT 9237) END)) Open Delete
(SELECT (CASE WHEN (5797=5797) THEN 'kjh' ELSE (SELECT 4517 UNION SELECT 5846) END)) Open Delete
(SELECT (CASE WHEN (6190=5092) THEN 'kjh' ELSE (SELECT 5092 UNION SELECT 3869) END)) Open Delete
@12 Open Delete
&&&&&&&&&&& Open Delete
#1 Open Delete
#72uuuu Open Delete
#72uuuuokokok Open Delete
#91 Open Delete
#AlgoSucks Open Delete
%231 Open Delete
%2372 Open Delete
%2372uuuu Open Delete
%2372uuuuokokok Open Delete
%2391 Open Delete
%25237233333#i1097c8b84b58a65ed6ec7b4f0da3ab67 Open Delete
%25237233333#i1dcd1cbb0d8eeb1fd3a32dc2aa9c8013 Open Delete
%25237233333#i21ef661e2506d5d0e513dce166c17d49 Open Delete
%25237233333#i5784b3886628c4362594ffa43547edb4 Open Delete
%25237233333#ic3ee8978c60737ab5d058b5a3f6a1b09 Open Delete
%252372uuuu Open Delete
%252372uuuu#i1dcd1cbb0d8eeb1fd3a32dc2aa9c8013 Open Delete
%252372uuuu#i5784b3886628c4362594ffa43547edb4 Open Delete
%252372uuuu#ic3ee8978c60737ab5d058b5a3f6a1b09 Open Delete
%252391 Open Delete
%2525237233333%23i27992875ec4286a24e569b1e015b0473 Open Delete
%25252372uuuu%23i8c18088ea4d8dd4d6e5e986bceed35da Open Delete
%25253F%23i1097c8b84b58a65ed6ec7b4f0da3ab67 Open Delete
%25253F%23i1dcd1cbb0d8eeb1fd3a32dc2aa9c8013 Open Delete
%253F#i21ef661e2506d5d0e513dce166c17d49 Open Delete
%253F#i27992875ec4286a24e569b1e015b0473 Open Delete
%253F#i5784b3886628c4362594ffa43547edb4 Open Delete
%253F#ic3ee8978c60737ab5d058b5a3f6a1b09 Open Delete
%25C3%2583%25C2%25B1lkjlkj Open Delete
%25C3%25B1sfkjaldsa Open Delete
%28orph%C3%83%C2%83%C3%82%C2%A9e%29 Open Delete
%28SELECT%20%28CASE%20WHEN%20%283158=3158%29%20THEN%20%27kjh%27%20ELSE%20%28SELECT%201437%20UNION%20SELECT%202166%29%20END%29%29 Open Delete
%28SELECT%20%28CASE%20WHEN%20%284626=9556%29%20THEN%20%27kjh%27%20ELSE%20%28SELECT%209556%20UNION%20SELECT%209237%29%20END%29%29 Open Delete
%3C Open Delete
%3Csdsads Open Delete
%3F Open Delete
%C3%83%C2%83%C3%82%C2%83%C3%83%C2%82%C3%82%C2%B1lkjlkj Open Delete
%C3%83%C2%B1sf Open Delete
%C3%B1lkjlkj Open Delete
%C3%B1sfkjaldsa Open Delete
%E2%98%98%20Cela%20fonctionne%20%E2%98%98 Open Delete
< Open Delete
<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<LETTRE GREC>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> Open Delete
<script>alert('test')</script> Open Delete
<script>alert('test')</script>%n%n%n%n%n%n Open Delete
<script>alert('test')</script>%n%n%n%n%n%n<script>alert('test')</script>%n%n%n%n%n%n<script>alert('test')</script>%n%n%n%n%n%n<script>alert('test')</script>%n%n%n%n%n%n<script>alert('test')</script>%n%n%n%n%n%n<script>alert('test')</script>%n%n%n%n%n%n<sc Open Delete
<sdsads Open Delete
~~~ Open Delete
00000 Open Delete
01233 Open Delete
11 Open Delete
11#i1097c8b84b58a65ed6ec7b4f0da3ab67 Open Delete
11#i1dcd1cbb0d8eeb1fd3a32dc2aa9c8013 Open Delete
11#i5784b3886628c4362594ffa43547edb4 Open Delete
11#ibcac9f4c58199eeaa7ba5c7750b8434b Open Delete
11#ie025efbbb0738ed01a63b326c174233e Open Delete
1111#i5784b3886628c4362594ffa43547edb4 Open Delete
1111#ibcac9f4c58199eeaa7ba5c7750b8434b Open Delete
1111#ie025efbbb0738ed01a63b326c174233e Open Delete
1111%23i27992875ec4286a24e569b1e015b0473 Open Delete
11111 Open Delete
11111111111111 Open Delete
1111111111111111111111111111111111#i1dcd1cbb0d8eeb1fd3a32dc2aa9c8013 Open Delete
1111111111111111111111111111111111#i27992875ec4286a24e569b1e015b0473 Open Delete
1111111111111111111111111111111111#i8c18088ea4d8dd4d6e5e986bceed35da Open Delete
1111111111111111111111111111111111#ibcac9f4c58199eeaa7ba5c7750b8434b Open Delete
1111111111111111111111111111111111#ic3ee8978c60737ab5d058b5a3f6a1b09 Open Delete
1111111111111111111111111111111111%23i8c18088ea4d8dd4d6e5e986bceed35da Open Delete
11111111aaa Open Delete
1111Yapi Open Delete
1121 Open Delete
12 Open Delete
121113aaaaa Open Delete
122 Open Delete
12345 Open Delete
1241 Open Delete
15 Open Delete
1aa Open Delete
2 Open Delete
2%27 Open Delete
2222%2520example Open Delete
222222 Open Delete
2232323 Open Delete
32 Open Delete
32jnni Open Delete
33 Open Delete
456 Open Delete
63 Open Delete
78 Open Delete
8 Open Delete
88 Open Delete
888 Open Delete
8888 Open Delete
8889 Open Delete
8chan.org Open Delete
99 Open Delete
993223r23 Open Delete
999 Open Delete
a Open Delete
☘ Cela fonctionne ☘ Open Delete
ñsf Open Delete
A1 Open Delete
a2 Open Delete
ñsfkjaldsa Open Delete
aaa Open Delete
aaaa Open Delete
ñlkjlkj Open Delete
aaaaa Open Delete
aaaaaaaaaaaaaa Open Delete
aaaaaaaaaaaaaa22 Open Delete
AAAAAAAAAAAAAAAAAAAAA Open Delete
тест Open Delete
aaamine Open Delete
aaamine22222 Open Delete
aaamine22222#i1dcd1cbb0d8eeb1fd3a32dc2aa9c8013 Open Delete
aaamine22222#i21ef661e2506d5d0e513dce166c17d49 Open Delete
aaamine22222#ic3ee8978c60737ab5d058b5a3f6a1b09 Open Delete
aaamine22222#ie025efbbb0738ed01a63b326c174233e Open Delete
aaamine22222%23i1097c8b84b58a65ed6ec7b4f0da3ab67 Open Delete
aaamine22222%23i1dcd1cbb0d8eeb1fd3a32dc2aa9c8013 Open Delete
aasdasd Open Delete
Abc1 Open Delete
ad Open Delete
adfadf Open Delete
adfadf'A=0 Open Delete
adfadf%27A=0 Open Delete
Alpha Open Delete
alsi Open Delete
Array Open Delete
Array2 Open Delete
articulo Open Delete
as Open Delete
asD Open Delete
asd asd asd Open Delete
asdaexample Open Delete
asdas Open Delete
asdasd#i5784b3886628c4362594ffa43547edb4 Open Delete
asdasd#i8c18088ea4d8dd4d6e5e986bceed35da Open Delete
asdasd#ibcac9f4c58199eeaa7ba5c7750b8434b Open Delete
asdasd#ie025efbbb0738ed01a63b326c174233e Open Delete
asdasd%23i21ef661e2506d5d0e513dce166c17d49 Open Delete
asdasd%23ic3ee8978c60737ab5d058b5a3f6a1b09 Open Delete
asdasdadasd Open Delete
asdasdadasd#i21ef661e2506d5d0e513dce166c17d49 Open Delete
asdasdadasd#i5784b3886628c4362594ffa43547edb4 Open Delete
asdasdadasd#ie025efbbb0738ed01a63b326c174233e Open Delete
asdasdadasd%23i1dcd1cbb0d8eeb1fd3a32dc2aa9c8013 Open Delete
asdasdasd Open Delete
asdf Open Delete
asdfasdfasd8888 Open Delete
assa Open Delete
AU Open Delete
azazaz Open Delete
balala Open Delete
bam Open Delete
bbb Open Delete
bbbbbbbbbbbbbbbb Open Delete
bc Open Delete
bdfdfdfdf Open Delete
bite Open Delete
bjfhj Open Delete
bjfhj#i1097c8b84b58a65ed6ec7b4f0da3ab67 Open Delete
bjfhj#i27992875ec4286a24e569b1e015b0473 Open Delete
bjfhj#i5784b3886628c4362594ffa43547edb4 Open Delete
bjfhj#i8c18088ea4d8dd4d6e5e986bceed35da Open Delete
bjfhj#ic3ee8978c60737ab5d058b5a3f6a1b09 Open Delete
bjfhj%23i21ef661e2506d5d0e513dce166c17d49 Open Delete
bjfhj%23i27992875ec4286a24e569b1e015b0473 Open Delete
bla Open Delete
blah#i1097c8b84b58a65ed6ec7b4f0da3ab67 Open Delete
blah#i1dcd1cbb0d8eeb1fd3a32dc2aa9c8013 Open Delete
blah#i21ef661e2506d5d0e513dce166c17d49 Open Delete
blah#i27992875ec4286a24e569b1e015b0473 Open Delete
blah#i5784b3886628c4362594ffa43547edb4 Open Delete
blah#ic3ee8978c60737ab5d058b5a3f6a1b09 Open Delete
blah%23i8c18088ea4d8dd4d6e5e986bceed35da Open Delete
blah%23ibcac9f4c58199eeaa7ba5c7750b8434b Open Delete
Bra Open Delete
bxvbvx Open Delete
caca Open Delete
Caracas222666 Open Delete
cccio Open Delete
cdcdc Open Delete
cela Open Delete
Cela fonctionne Open Delete
Cela fonctionne pas Open Delete
checks Open Delete
Christos Open Delete
Cmucik Open Delete
cnes Open Delete
Cuves Open Delete
cvSDFSD Open Delete
cx Open Delete
cx<wc Open Delete
cxcxx Open Delete
D#i1097c8b84b58a65ed6ec7b4f0da3ab67 Open Delete
D#i1dcd1cbb0d8eeb1fd3a32dc2aa9c8013 Open Delete
D#i5784b3886628c4362594ffa43547edb4 Open Delete
D#i8c18088ea4d8dd4d6e5e986bceed35da Open Delete
D#ibcac9f4c58199eeaa7ba5c7750b8434b Open Delete
D#ie025efbbb0738ed01a63b326c174233e Open Delete
D%23i5784b3886628c4362594ffa43547edb4 Open Delete
dadd Open Delete
dasdsa Open Delete
dasf Open Delete
dd Open Delete
ddazdaz Open Delete
delete_empty Open Delete
demo Open Delete
dfa#i1097c8b84b58a65ed6ec7b4f0da3ab67 Open Delete
dfa#i5784b3886628c4362594ffa43547edb4 Open Delete
dfa#i8c18088ea4d8dd4d6e5e986bceed35da Open Delete
dfa#ie025efbbb0738ed01a63b326c174233e Open Delete
dfa%23i27992875ec4286a24e569b1e015b0473 Open Delete
dfa%23i5784b3886628c4362594ffa43547edb4 Open Delete
dfa%23ibcac9f4c58199eeaa7ba5c7750b8434b Open Delete
dfa%23ic3ee8978c60737ab5d058b5a3f6a1b09 Open Delete
dfdfdf Open Delete
dfdt Open Delete
dfgdfg Open Delete
dfsdf Open Delete
dfvds Open Delete
dgdgdg Open Delete
dgh Open Delete
drgd Open Delete
dsdfgsdfgdf Open Delete
dsds Open Delete
dsfsdfs Open Delete
dsvfdsfg%255D Open Delete
dsvfdsfg%5D Open Delete
e Open Delete
eaze Open Delete
ee Open Delete
eeeeee Open Delete
ejemplo 2 Open Delete
ejemplo 2017-11-23 Open Delete
ejemplo%202017 Open Delete
er Open Delete
erwgfuıgj8hlı Open Delete
erwgfuıgj Open Delete
ewe Open Delete
exampldfdfe Open Delete
example Open Delete
example exam Open Delete
example Radu Open Delete
example%20exam Open Delete
example+exam Open Delete
example1 Open Delete
example123#i1097c8b84b58a65ed6ec7b4f0da3ab67 Open Delete
example123#i21ef661e2506d5d0e513dce166c17d49 Open Delete
example123#ie025efbbb0738ed01a63b326c174233e Open Delete
example123%23ie025efbbb0738ed01a63b326c174233e Open Delete
example2 Open Delete
example2222222 Open Delete
example22222222222222 Open Delete
example33333 Open Delete
example4 Open Delete
exampleasd Open Delete
exampleasfsafa Open Delete
exampleasfsafasf#i1097c8b84b58a65ed6ec7b4f0da3ab67 Open Delete
exampleasfsafasf#i27992875ec4286a24e569b1e015b0473 Open Delete
exampleasfsafasf#i5784b3886628c4362594ffa43547edb4 Open Delete
exampledds Open Delete
exampledsdsdda Open Delete
exampledsdsddasds,sad,a,d,as,d,asd,asd Open Delete
examplee Open Delete
exampleeaze Open Delete
exampleede Open Delete
exampleeeeeeeeeeeee Open Delete
examplehfghfhfgfg Open Delete
examplejjj Open Delete
examplemmm Open Delete
examplemmmm Open Delete
exampleqzd Open Delete
exampleRW Open Delete
exampleRW2 Open Delete
examplesa Open Delete
examplesadfasfasdf Open Delete
examplesafs Open Delete
examplesafs;af;sfsf Open Delete
examplesdddd Open Delete
examplesdsd Open Delete
exampletes Open Delete
exampletest_11 Open Delete
exampletestsf sdf sd sd Open Delete
exampleu Open Delete
exampleuy Open Delete
examplew Open Delete
exampple Open Delete
Existing arrays: Open Delete
exkiample Open Delete
familly Open Delete
fasdfasf Open Delete
fat Open Delete
fc Open Delete
Fda Open Delete
fdasfdaF Open Delete
fdf Open Delete
fdf#i1097c8b84b58a65ed6ec7b4f0da3ab67 Open Delete
fdf#i21ef661e2506d5d0e513dce166c17d49 Open Delete
fdf#i27992875ec4286a24e569b1e015b0473 Open Delete
fdf#i5784b3886628c4362594ffa43547edb4 Open Delete
fdf#ic3ee8978c60737ab5d058b5a3f6a1b09 Open Delete
fdf%23i27992875ec4286a24e569b1e015b0473 Open Delete
fdgfdgfdgfdgfd Open Delete
fdsfds Open Delete
ff d Open Delete
ff%20d Open Delete
fff Open Delete
ffsss Open Delete
fgfdgfdgdg Open Delete
fghjk, Open Delete
fghjkl Open Delete
foo Open Delete
fr Open Delete
frfrf Open Delete
fro Open Delete
Fruits Open Delete
fsda Open Delete
fsdfd Open Delete
fuck%20you Open Delete
gbfgbf Open Delete
gdfg#i1dcd1cbb0d8eeb1fd3a32dc2aa9c8013 Open Delete
gdfg#i5784b3886628c4362594ffa43547edb4 Open Delete
gdfg#ibcac9f4c58199eeaa7ba5c7750b8434b Open Delete
gege Open Delete
gg'A=0 Open Delete
Ggg Open Delete
GGI Open Delete
ghione Open Delete
ghjk#i1097c8b84b58a65ed6ec7b4f0da3ab67 Open Delete
ghjk#i1dcd1cbb0d8eeb1fd3a32dc2aa9c8013 Open Delete
ghjk#i21ef661e2506d5d0e513dce166c17d49 Open Delete
ghjk#i27992875ec4286a24e569b1e015b0473 Open Delete
ghjk#ibcac9f4c58199eeaa7ba5c7750b8434b Open Delete
Ghy Open Delete
gjkl Open Delete
Group%20C Open Delete
Group%2520B Open Delete
Group%252BC Open Delete
Group%2BC Open Delete
Group%2BC#i1dcd1cbb0d8eeb1fd3a32dc2aa9c8013 Open Delete
Group%2BC#i21ef661e2506d5d0e513dce166c17d49 Open Delete
Group%2BC#i27992875ec4286a24e569b1e015b0473 Open Delete
Group%2BC#i8c18088ea4d8dd4d6e5e986bceed35da Open Delete
Group%2BC#ibcac9f4c58199eeaa7ba5c7750b8434b Open Delete
Group+C Open Delete
gufc fucvuy Open Delete
hahah Open Delete
hello Open Delete
Hello World Open Delete
Hello%20World Open Delete
Hello%20World%20! Open Delete
Hello%2520World%2520! Open Delete
heof Open Delete
HEYY%20:D Open Delete
HEYY%2520:D Open Delete
HEYY%2520:D#i1097c8b84b58a65ed6ec7b4f0da3ab67 Open Delete
HEYY%2520:D#i1dcd1cbb0d8eeb1fd3a32dc2aa9c8013 Open Delete
HEYY%2520:D#i21ef661e2506d5d0e513dce166c17d49 Open Delete
HEYY%2520:D#i27992875ec4286a24e569b1e015b0473 Open Delete
HEYY%2520:D#i5784b3886628c4362594ffa43547edb4 Open Delete
HEYY%2520:D#i8c18088ea4d8dd4d6e5e986bceed35da Open Delete
HEYY%252520:D%23ibcac9f4c58199eeaa7ba5c7750b8434b Open Delete
HEYY%252520:D%23ie025efbbb0738ed01a63b326c174233e Open Delete
hgfh Open Delete
hghgh Open Delete
hgjgjh Open Delete
hgkjh Open Delete
hhh Open Delete
hhmm Open Delete
hi Open Delete
hoho Open Delete
htrhrh Open Delete
http Open Delete
hu Open Delete
hyhy Open Delete
i Open Delete
ilesh Open Delete
iooi Open Delete
itemList2 Open Delete
jbnn Open Delete
jhgfgh Open Delete
jhj Open Delete
jhkl Open Delete
jj Open Delete
jtujjk Open Delete
julio Open Delete
kaas Open Delete
khj Open Delete
khj#i1097c8b84b58a65ed6ec7b4f0da3ab67 Open Delete
khj#i8c18088ea4d8dd4d6e5e986bceed35da Open Delete
khj#ic3ee8978c60737ab5d058b5a3f6a1b09 Open Delete
khj#ie025efbbb0738ed01a63b326c174233e Open Delete
khj%23i1097c8b84b58a65ed6ec7b4f0da3ab67 Open Delete
kiki Open Delete
kjh Open Delete
kjh AND 2060=2060 Open Delete
kjh AND 2171=2112-- yWqk Open Delete
kjh AND 4281=2310-- NRaM Open Delete
kjh AND 6275=3623-- Gjwd Open Delete
kjh AND 7390 IN (SELECT (CHAR(113)+CHAR(106)+CHAR(106)+CHAR(118)+CHAR(113)+(SELECT (CASE WHEN (7390=7390) THEN CHAR(49) ELSE CHAR(48) END))+CHAR(113)+CHAR(113)+CHAR(122)+CHA Open Delete
kjh AND 7390 IN (SELECT (CHAR(113)+CHAR(106)+CHAR(106)+CHAR(118)+CHAR(113)+(SELECT (CASE WHEN (7390=7390) THEN CHAR(49) ELSE CHAR(48) END))+CHAR(113)+CHAR(113)+CHAR(122)+CHAR(120)+CHAR(113))) Open Delete
kjh AND 7390 IN (SELECT (CHAR(113)+CHAR(106)+CHAR(106)+CHAR(118)+CHAR(113)+(SELECT (CASE WHEN (7390=7390) THEN CHAR(49) ELSE CHAR(48) END))+CHAR(113)+CHAR(113)+CHAR(122)+CHAR(120)+CHAR(113)))-- iTwS Open Delete
kjh AND 7426=7426 Open Delete
kjh AND 7954=(SELECT UPPER(XMLType(CHR(60)||CHR(58)||CHR(113)||CHR(122)||CHR(107)||CHR(120)||CHR(113)||(SELECT (CASE WHEN (7954=7954) THEN 1 ELSE 0 END) FROM DUAL)||CHR(113)||CHR(106)||CHR(107)||CHR(122)||CHR(113)||CHR(62))) FROM DUAL) Open Delete
kjh AND 8611=(SELECT UPPER(XMLType(CHR(60)||CHR(58)||CHR(113)||CHR(106)||CHR(106)||CHR(118)||CHR(113)||(SELECT (CASE WHEN (8611=8611) THEN 1 ELSE 0 END) FROM DUAL)||CHR(113)||CHR(113)||CHR(122)||CHR(120)||CHR(113)||CHR(62))) FROM DUAL)-- iQEG Open Delete
kjh AND 8864=CAST((CHR(113)||CHR(122)||CHR(107)||CHR(120)||CHR(113))||(SELECT (CASE WHEN (8864=8864) THEN 1 ELSE 0 END))::text||(CHR(113)||CHR(106)||CHR(107)||CHR(122)||CHR(113)) AS NUMERIC) Open Delete
kjh AND 9650=6116 Open Delete
kjh AND EXTRACTVALUE(5914,CONCAT(0x5c,0x716a6a7671,(SELECT (ELT(5914=5914,1))),0x71717a7871))-- xcAD Open Delete
kjh AND EXTRACTVALUE(7241,CONCAT(0x5c,0x717a6b7871,(SELECT (ELT(7241=7241,1))),0x716a6b7a71)) Open Delete
kjh ORDER BY 1-- PNBN Open Delete
kjh ORDER BY 1-- pvJb Open Delete
kjh,),..('") Open Delete
kjh,),..('"). Open Delete
kjh' AND 1967=4628 AND 'WfvI'='WfvI Open Delete
kjh' AND 2561=2906 AND 'dQSK'='dQSK Open Delete
kjh' AND 4678=8698 AND 'uMbv'='uMbv Open Delete
kjh' AND 6285=CAST((CHR(113)||CHR(106)||CHR(106)||CHR(118)||CHR(113))||(SELECT (CASE WHEN (6285=6285) THEN 1 ELSE 0 END))::text||(CHR(113)||CHR(113)||CHR(122)||CHR(120)||CHR(113)) AS NUMERIC) AND 'ticB'='ticB Open Delete
kjh' AND 7390 IN (SELECT (CHAR(113)+CHAR(106)+CHAR(106)+CHAR(118)+CHAR(113)+(SELECT (CASE WHEN (7390=7390) THEN CHAR(49) ELSE CHAR(48) END))+CHAR(113)+CHAR(113)+CHAR(122)+CHAR(120)+CHAR(113))) AND 'pbYL'='pbYL Open Delete
kjh' AND 7426=7426 AND 'Fjlg'='Fjlg Open Delete
kjh' AND 7954=(SELECT UPPER(XMLType(CHR(60)||CHR(58)||CHR(113)||CHR(122)||CHR(107)||CHR(120)||CHR(113)||(SELECT (CASE WHEN (7954=7954) THEN 1 ELSE 0 END) FRO Open Delete
kjh' AND 7954=(SELECT UPPER(XMLType(CHR(60)||CHR(58)||CHR(113)||CHR(122)||CHR(107)||CHR(120)||CHR(113)||(SELECT (CASE WHEN (7954=7954) THEN 1 ELSE 0 END) FROM DUAL)||CHR(113)||CHR(106)||CHR(107)||CHR(122)||CHR(113)||CHR(62))) FROM DUAL) AND 'HwZm'='HwZm Open Delete
kjh' AND 8611=(SELECT UPPER(XMLType(CHR(60)||CHR(58)||CHR(113)||CHR(106)||CHR(106)||CHR(118)||CHR(113)||(SELECT (CASE WHEN (8611=8611) THEN 1 ELSE 0 END) FRO Open Delete
kjh' AND 8611=(SELECT UPPER(XMLType(CHR(60)||CHR(58)||CHR(113)||CHR(106)||CHR(106)||CHR(118)||CHR(113)||(SELECT (CASE WHEN (8611=8611) THEN 1 ELSE 0 END) FROM DUAL)||CHR(113)||CHR(113)||CHR(122)||CHR(120)||CHR(113)||CHR(62))) FROM DUAL) AND 'QXBI'='QXBI Open Delete
kjh' AND 8864=CAST((CHR(113)||CHR(122)||CHR(107)||CHR(120)||CHR(113))||(SELECT (CASE WHEN (8864=8864) THEN 1 ELSE 0 END))::text||(CHR(113)||CHR(106)||CHR(107)||CHR(122)||CHR(113)) AS NUMERIC) AND 'HQRy'='HQRy Open Delete
kjh' AND EXTRACTVALUE(5914,CONCAT(0x5c,0x716a6a7671,(SELECT (ELT(5914=5914,1))),0x71717a7871)) AND 'GCxm'='GCxm Open Delete
kjh' AND EXTRACTVALUE(7241,CONCAT(0x5c,0x717a6b7871,(SELECT (ELT(7241=7241,1))),0x716a6b7a71)) AND 'NwvR'='NwvR Open Delete
kjh') AND 2750=5826 AND ('NRcI'='NRcI Open Delete
kjh') AND 3055=4968 AND ('igun'='igun Open Delete
kjh') AND 6019=4131 AND ('fWIB'='fWIB Open Delete
kjh') AND 6285=CAST((CHR(113)||CHR(106)||CHR(106)||CHR(118)||CHR(113))||(SELECT (CASE WHEN (6285=6285) THEN 1 ELSE 0 END))::text||(CHR(113)||CHR(113)||CHR(122)||CHR(120)||CHR(113)) AS NUMERIC) AND ('bnAs'='bnAs Open Delete
kjh') AND 7954=(SELECT UPPER(XMLType(CHR(60)||CHR(58)||CHR(113)||CHR(122)||CHR(107)||CHR(120)||CHR(113)||(SELECT (CASE WHEN (7954=7954) THEN 1 ELSE 0 END) FROM DUAL)||CHR(113)||CHR(106)||CHR(107)||CHR(122)||CHR(113)||CHR(62))) FROM DUAL) AND ('cHjZ'='cHjZ Open Delete
kjh') AND 8864=CAST((CHR(113)||CHR(122)||CHR(107)||CHR(120)||CHR(113))||(SELECT (CASE WHEN (8864=8864) THEN 1 ELSE 0 END))::text||(CHR(113)||CHR(106)||CHR(107)||CHR(122)||CHR(113)) AS NUMERIC) AND ('YITY'='YITY Open Delete
kjh') AND 9667 IN (SELECT (CHAR(113)+CHAR(122)+CHAR(107)+CHAR(120)+CHAR(113)+(SELECT (CASE WHEN (9667=9667) THEN CHAR(49) ELSE CHAR(48) END))+CHAR(113)+CHAR(106)+CHAR(107)+CHAR(122)+CHAR(113))) AND ('ixOS'='ixOS Open Delete
kjh') AND EXTRACTVALUE(5914,CONCAT(0x5c,0x716a6a7671,(SELECT (ELT(5914=5914,1))),0x71717a7871)) AND ('GoTE'='GoTE Open Delete
kjh') ORDER BY 1-- osYG Open Delete
kjh'vKJjiT<'">dxPGFb Open Delete
kjh"'(,),().( Open Delete
kjh) AND 1607=1768 AND (8263=8263 Open Delete
kjh) AND 2060=2060 AND (3370=3370 Open Delete
kjh) AND 3637=2334 AND (3292=3292 Open Delete
kjh) AND 6285=CAST((CHR(113)||CHR(106)||CHR(106)||CHR(118)||CHR(113))||(SELECT (CASE WHEN (6285=6285) THEN 1 ELSE 0 END))::text||(CHR(113)||CHR(113)||CHR(122)||CHR(120)||CHR(113)) AS NUMERIC) AND (7094=7094 Open Delete
kjh) AND 7426=7426 AND (3850=3850 Open Delete
kjh) AND 8611=(SELECT UPPER(XMLType(CHR(60)||CHR(58)||CHR(113)||CHR(106)||CHR(106)||CHR(118)||CHR(113)||(SELECT (CASE WHEN (8611=8611) THEN 1 ELSE 0 END) FROM DUAL)||CHR(113)||CHR(113)||CHR(122)||CHR(120)||CHR(113)||CHR(62))) FROM DUAL) AND (7499=7499 Open Delete
kjh) AND 8864=CAST((CHR(113)||CHR(122)||CHR(107)||CHR(120)||CHR(113))||(SELECT (CASE WHEN (8864=8864) THEN 1 ELSE 0 END))::text||(CHR(113)||CHR(106)||CHR(107)||CHR(122)||CHR(113)) AS NUMERIC) AND (5114=5114 Open Delete
kjh) AND 9667 IN (SELECT (CHAR(113)+CHAR(122)+CHAR(107)+CHAR(120)+CHAR(113)+(SELECT (CASE WHEN (9667=9667) THEN CHAR(49) ELSE CHAR(48) END))+CHAR(113)+CHAR(106)+CHAR(107)+CHAR(122)+CHAR(113))) AND (2205=2205 Open Delete
kjh) ORDER BY 1-- McOI Open Delete
kjh) ORDER BY 1-- Vwqu Open Delete
kjh%20AND%202675=9406 Open Delete
kjh%20AND%20EXTRACTVALUE%287241,CONCAT%280x5c,0x717a6b7871,%28SELECT%20%28ELT%287241=7241,1%29%29%29,0x716a6b7a71%29%29 Open Delete
kjh%27%20AND%208611=%28SELECT%20UPPER%28XMLType%28CHR%2860%29%7C%7CCHR%2858%29%7C%7CCHR%28113%29%7C%7CCHR%28106%29%7C%7CCHR%28106%29%7C%7CCHR%28118%29%7C%7CCHR%28113%29%7C%7C%28SELECT%20%28CASE%20WHEN%20%288611=8611%29%20THEN%201%20ELSE%200%20END%29%20FRO Open Delete
kjh%27%29%20AND%203055=4968%20AND%20%28%27igun%27=%27igun Open Delete
kjh%27%29%20AND%207390%20IN%20%28SELECT%20%28CHAR%28113%29+CHAR%28106%29+CHAR%28106%29+CHAR%28118%29+CHAR%28113%29+%28SELECT%20%28CASE%20WHEN%20%287390=7390%29%20THEN%20CHAR%2849%29%20ELSE%20CHAR%2848%29%20END%29%29+CHAR%28113%29+CHAR%28113%29+CHAR%28122% Open Delete
kjh%27%29%20AND%20EXTRACTVALUE%287241,CONCAT%280x5c,0x717a6b7871,%28SELECT%20%28ELT%287241=7241,1%29%29%29,0x716a6b7a71%29%29%20AND%20%28%27oZSA%27=%27oZSA Open Delete
kjh%29%20AND%209930=6330%20AND%20%289057=9057 Open Delete
kjkk Open Delete
kk Open Delete
kkik Open Delete
kkk#i1097c8b84b58a65ed6ec7b4f0da3ab67 Open Delete
kkk#i1dcd1cbb0d8eeb1fd3a32dc2aa9c8013 Open Delete
kkk#i21ef661e2506d5d0e513dce166c17d49 Open Delete
kkk#i27992875ec4286a24e569b1e015b0473 Delete
kkk#i8c18088ea4d8dd4d6e5e986bceed35da Open Delete
kkk#ic3ee8978c60737ab5d058b5a3f6a1b09 Open Delete
kkk#ie025efbbb0738ed01a63b326c174233e Open Delete
kkk%23i27992875ec4286a24e569b1e015b0473 Open Delete
kln Open Delete
kmkm Open Delete
kpok´p Open Delete
kpok´p Open Delete
l Open Delete
lel Open Delete
lkj Open Delete
llllllllllllllll Open Delete
lolo Open Delete
Lorenz du Open Delete
loslos Open Delete
Marcin Open Delete
mardi Open Delete
medicion 2 Open Delete
medicion%202 Open Delete
mkmkmk Open Delete
moi Open Delete
moiGHOY - Resources/views/Advanced/doctrine-them Open Delete
moj Open Delete
mon putain de tableau Open Delete
mon tableau Open Delete
mon%20exemple Open Delete
mp Open Delete
mt Open Delete
my_array Open Delete
myarr Open Delete
n Open Delete
name Open Delete
New_test_2017- Open Delete
new%20test Open Delete
New%2520Array Open Delete
new%2520test Open Delete
nmn#i1dcd1cbb0d8eeb1fd3a32dc2aa9c8013 Open Delete
nmn#i27992875ec4286a24e569b1e015b0473 Open Delete
nmn#ibcac9f4c58199eeaa7ba5c7750b8434b Open Delete
nmn#ic3ee8978c60737ab5d058b5a3f6a1b09 Open Delete
nmn#ie025efbbb0738ed01a63b326c174233e Open Delete
nmn%23i1097c8b84b58a65ed6ec7b4f0da3ab67 Open Delete
nmn%23ibcac9f4c58199eeaa7ba5c7750b8434b Open Delete
nnnnn Open Delete
Numeros de prueba Open Delete
o Open Delete
o%25C4%25B1 Open Delete
o%C3%83%C2%83%C3%82%C2%84%C3%83%C2%82%C3%82%C2%B1 Open Delete
oı Open Delete
oezjfez Open Delete
Open Delete
ojkj Open Delete
okilol Open Delete
ordersCollection Open Delete
oui Open Delete
Ouiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiii Open Delete
ouiou Open Delete
Pepa Open Delete
pepiii Open Delete
perebetes Open Delete
perses Open Delete
perses#i1097c8b84b58a65ed6ec7b4f0da3ab67 Open Delete
perses#i5784b3886628c4362594ffa43547edb4 Open Delete
perses#i8c18088ea4d8dd4d6e5e986bceed35da Open Delete
perses#ibcac9f4c58199eeaa7ba5c7750b8434b Open Delete
perses%23ie025efbbb0738ed01a63b326c174233e Open Delete
polo Open Delete
pp Open Delete
pppppii#i1dcd1cbb0d8eeb1fd3a32dc2aa9c8013 Open Delete
pppppii#i21ef661e2506d5d0e513dce166c17d49 Open Delete
pppppii#i27992875ec4286a24e569b1e015b0473 Open Delete
pppppii#ie025efbbb0738ed01a63b326c174233e Open Delete
pppppii%23ie025efbbb0738ed01a63b326c174233e Open Delete
prabu Open Delete
Premier element de test Open Delete
project%201 Open Delete
project+1 Open Delete
punto%202 Open Delete
qe Open Delete
qqq Open Delete
Qqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwweeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeerrrrrrr Open Delete
qsd Open Delete
qsdfqsdf Open Delete
quantite --1 Open Delete
qwe Open Delete
qwehgnhngh Open Delete
qweqw Open Delete
rar Open Delete
rdfgdf Open Delete
Recipe Open Delete
rerererere Open Delete
rerwrer Open Delete
resr Open Delete
rfermkferkmfe Open Delete
rr Open Delete
rrgf Open Delete
rrr Open Delete
rrrr#i21ef661e2506d5d0e513dce166c17d49 Open Delete
rrrr#i5784b3886628c4362594ffa43547edb4 Open Delete
rrrr#ic3ee8978c60737ab5d058b5a3f6a1b09 Open Delete
rrrr%23i1dcd1cbb0d8eeb1fd3a32dc2aa9c8013 Open Delete
rrrr%23i27992875ec4286a24e569b1e015b0473 Open Delete
rrrr%23i5784b3886628c4362594ffa43547edb4 Open Delete
rtr Open Delete
s Open Delete
sad.asdasd.sdsad Open Delete
sadsd Open Delete
salut les Open Delete
salut les gens Open Delete
salut%20les Open Delete
salut%20les%20gens Open Delete
sam Open Delete
samArray Open Delete
scts Open Delete
sd Open Delete
sdasd Open Delete
sdasda Open Delete
sdasdafs Open Delete
sdc Open Delete
sdczsdzsd Open Delete
sdfsdfsd Open Delete
sdg Open Delete
sdsd Open Delete
sed Open Delete
seeme Open Delete
seeme#i21ef661e2506d5d0e513dce166c17d49 Open Delete
seeme#i5784b3886628c4362594ffa43547edb4 Open Delete
seeme#ibcac9f4c58199eeaa7ba5c7750b8434b Open Delete
seeme#ie025efbbb0738ed01a63b326c174233e Open Delete
seeme%23i8c18088ea4d8dd4d6e5e986bceed35da Open Delete
select Open Delete
sf Open Delete
sfd Open Delete
sfsa Open Delete
sgdfs Open Delete
some new array Open Delete
some%20new%20array Open Delete
someNewArray Open Delete
someNewArray#i1097c8b84b58a65ed6ec7b4f0da3ab67 Open Delete
someNewArray#i5784b3886628c4362594ffa43547edb4 Open Delete
someNewArray#i8c18088ea4d8dd4d6e5e986bceed35da Open Delete
someNewArray#ic3ee8978c60737ab5d058b5a3f6a1b09 Open Delete
someNewArray#ie025efbbb0738ed01a63b326c174233e Open Delete
someNewArray%23i1097c8b84b58a65ed6ec7b4f0da3ab67 Open Delete
sqd Open Delete
sqsq Open Delete
ss Open Delete
sss Open Delete
ssss Open Delete
sssss Open Delete
ssssssssssssss Open Delete
STASI Open Delete
suck my cock fgts Open Delete
suck%20my%20cock%20fgts Open Delete
t Open Delete
Ta mere la grosse choin Open Delete
Ta mere la grosse tchoin Open Delete
Ta%20mere%20la Open Delete
Ta%20mere%20la%20grosse%20choin Open Delete
Ta%20mere%20la%20grosse%20tchoin Open Delete
Ta%2520mere%2520la%2520grosse%2520choin#i27992875ec4286a24e569b1e015b0473 Open Delete
Ta%252520mere%252520la%252520grosse%252520choin%23i21ef661e2506d5d0e513dce166c17d49 Open Delete
Ta%252520mere%252520la%252520grosse%252520choin%23i5784b3886628c4362594ffa43547edb4 Open Delete
TATA Open Delete
Telous Open Delete
tesst Open Delete
Test Open Delete
TEST 2 Open Delete
test nours Open Delete
test--1 Open Delete
test22 Open Delete
test34 Open Delete
TEST912 Open Delete
Tester Open Delete
testing Open Delete
tesy Open Delete
Teszt Open Delete
tet Open Delete
texte Open Delete
Tfr Open Delete
Thais Open Delete
the test Open Delete
the+test Open Delete
This Open Delete
this is an Open Delete
this%20is%20an Open Delete
this%20is%20an%20array Open Delete
tojo Open Delete
toti Open Delete
totototototo Open Delete
try01 Open Delete
tryy5 Open Delete
tttttz Open Delete
tutu Open Delete
tyrtyrtr Open Delete
tyty Open Delete
tzzttz Open Delete
uiu Open Delete
ukh Open Delete
uytuuyt Open Delete
Vai que da Open Delete
Vai%2520que%2520da Open Delete
vdsvd Open Delete
Volta Dilm Open Delete
Volta Dilma Fo Open Delete
Volta%20Dilma%20Fora% Open Delete
Volta%20Dilma%20Fora%20Temer Open Delete
Volta%2520Dilma%2520Fo Open Delete
Volta%2520Dilma%2520Fora%2520Temer Open Delete
Volta%2520Dilma%2520Fora%2520Temer#i1dcd1cbb0d8eeb1fd3a32dc2aa9c8013 Open Delete
Volta%2520Dilma%2520Fora%2520Temer#i2 Open Delete
Volta%2520Dilma%2520Fora%2520Temer#i21ef661e2506d5d0e513dce166c17d49 Open Delete
Volta%2520Dilma%2520Fora%2520Temer#i27992875ec4286a24e569b1e015b0473 Open Delete
Volta%2520Dilma%2520Fora%2520Temer#i5784b3886628c4362594ffa43547edb4 Open Delete
Volta%2520Dilma%2520Fora%2520Temer#ibcac9f4c58199eeaa7ba5c7750b8434b Open Delete
Volta%2520Dilma%2520Fora%2520Temer#ic3ee8978c60737ab5d058b5a3f6a1b09 Open Delete
Volta%2520Dilma%2520Fora%2520Temer#ie025efbbb0738ed01a63b326c174233e Open Delete
Volta+Dilma+Fo Open Delete
VRE Open Delete
vv Open Delete
vvvvvvvvvvvvvvv Open Delete
why doctrine on delete not work Open Delete
why%20doctrine%20on%20delete%20not%20work Open Delete
Woop wooop Open Delete
Woop%20wooop Open Delete
wqewqeqwewewq Open Delete
ww Open Delete
www Open Delete
wxc%3Cwxc Open Delete
Xbox Series X > PS5 Open Delete
xcxcxcx Open Delete
xd Open Delete
xv Open Delete
xvvsdf Open Delete
xxx Open Delete
xy Open Delete
yfcx Open Delete
yiktikrtr Open Delete
yut Open Delete
yy Open Delete
yytutyutyu Open Delete
z Open Delete
zDSfsdf Open Delete
zdzd Open Delete
zzz Open Delete
zzzz Open Delete
zzzzzz Open Delete
ролр Open Delete
тест Open Delete
☘ Cela fonctionne ☘ Open Delete
File: Base/BaseController.php
<?php

namespace Fuz\AppBundle\Base;

use Fuz\AppBundle\Entity\Value;
use Fuz\AppBundle\Form\ValueType;
use Fuz\QuickStartBundle\Base\BaseController as QuickStartBase;
use Symfony\Component\Form\Extension\Core\Type;
use Symfony\Component\HttpFoundation\Request;

class BaseController extends QuickStartBase
{
    protected function createContextSample(Request $request, $name = 'form', $values = ['a', 'b', 'c'])
    {
        $data = ['values' => $values];

        $form = $this
           ->get('form.factory')
           ->createNamedBuilder($name, Type\FormType::class, $data)
           ->add('values', Type\CollectionType::class, [
               'entry_type'    => Type\TextType::class,
               'label'         => 'Add, move, remove values and press Submit.',
               'entry_options' => [
                   'label' => 'Value',
               ],
               'allow_add'    => true,
               'allow_delete' => true,
               'prototype'    => true,
               'attr'         => [
                   'class' => "{$name}-collection",
               ],
           ])
           ->add('submit', Type\SubmitType::class)
           ->getForm()
        ;

        $form->handleRequest($request);
        if ($form->isValid()) {
            $data = $form->getData();
        }

        return [
            $name         => $form->createView(),
            "{$name}Data" => $data,
        ];
    }

    protected function createAdvancedContextSample(Request $request, $name = 'advancedForm')
    {
        $a = new Value('a');
        $b = new Value('b');
        $c = new Value('c');

        $data = ['values' => [$a, $b, $c]];

        $form = $this
           ->get('form.factory')
           ->createNamedBuilder($name, Type\FormType::class, $data)
           ->add('values', Type\CollectionType::class, [
               'entry_type'   => ValueType::class,
               'label'        => 'Add, move, remove values and press Submit.',
               'allow_add'    => true,
               'allow_delete' => true,
               'prototype'    => true,
               'required'     => false,
               'attr'         => [
                   'class' => "{$name}-collection",
               ],
           ])
           ->add('submit', Type\SubmitType::class)
           ->getForm()
        ;

        $form->handleRequest($request);
        if ($form->isValid()) {
            $data = $form->getData();
        }

        return [
            $name         => $form->createView(),
            "{$name}Data" => $data,
        ];
    }
}
File: Base/BaseController.php
File: Controller/AdvancedController.php
<?php

namespace Fuz\AppBundle\Controller;

use Fuz\AppBundle\Base\BaseController;
use Fuz\AppBundle\Entity\Address;
use Fuz\AppBundle\Entity\Addresses;
use Fuz\AppBundle\Entity\Fancy;
use Fuz\AppBundle\Entity\FancyCollection;
use Fuz\AppBundle\Entity\Value;
use Fuz\AppBundle\Form\AddressesType;
use Fuz\AppBundle\Form\FancyCollectionType;
use Fuz\AppBundle\Form\MyArrayType;
use Fuz\AppBundle\Form\ValueType;
use Sensio\Bundle\FrameworkExtraBundle\Configuration\Route;
use Sensio\Bundle\FrameworkExtraBundle\Configuration\Template;
use Symfony\Component\Form\Extension\Core\Type;
use Symfony\Component\HttpFoundation\Request;

/**
 * @Route("/advanced")
 */
class AdvancedController extends BaseController
{
    /**
     * Advanced usage
     *
     * You can reference your form collection in the view, instead of
     * putting a selector in the form type.
     *
     * @Route("/mvcCompliance", name="mvcCompliance")
     * @Template()
     */
    public function mvcComplianceAction(Request $request)
    {
        $data = ['values' => ['a', 'b', 'c']];

        $form = $this
           ->createFormBuilder($data)
           ->add('values', Type\CollectionType::class, [
               'entry_type'    => Type\TextType::class,
               'label'         => 'Add, move, remove values and press Submit.',
               'entry_options' => [
                   'label' => 'Value',
               ],
               'allow_add'    => true,
               'allow_delete' => true,
               'prototype'    => true,
               'required'     => false,
//                   'attr' => array (
//                           'class' => 'my-selector', <--- Not MVC compliant!
//                   ),
           ])
           ->add('submit', Type\SubmitType::class)
           ->getForm()
        ;

        $form->handleRequest($request);
        if ($form->isValid()) {
            $data = $form->getData();
        }

        return [
            'form' => $form->createView(),
            'data' => $data,
        ];
    }

    /**
     * Advanced usage
     *
     * A custom form theme helps define button's layout and positions as and where you want.
     *
     * @Route("/customFormTheme", name="customFormTheme")
     * @Template()
     */
    public function customFormThemeAction(Request $request)
    {
        $data = ['values' => [new Value('a'), new Value('b'), new Value('c')]];

        $form = $this
           ->createFormBuilder($data)
           ->add('values', Type\CollectionType::class, [
               'entry_type'   => ValueType::class,
               'label'        => 'Add, move, remove values and press Submit.',
               'allow_add'    => true,
               'allow_delete' => true,
               'prototype'    => true,
               'required'     => false,
               'attr'         => [
                   'class' => 'collection',
               ],
           ])
           ->add('submit', Type\SubmitType::class)
           ->getForm()
        ;

        $form->handleRequest($request);
        if ($form->isValid()) {
            $data = $form->getData();
        }

        return [
            'form' => $form->createView(),
            'data' => $data,
        ];
    }

    /**
     * Advanced usage
     *
     * Same demo as above, but with the add button located at the bottom of
     * the form instead of close to each field.
     *
     * @Route("/customFormThemeAddBottom", name="customFormThemeAddBottom")
     * @Template()
     */
    public function customFormThemeAddBottomAction(Request $request)
    {
        return $this->customFormThemeAction($request);
    }

    /**
     * Advanced usage
     *
     * Collection of collections are useful on the most dynamic forms, and a good
     * way to test if the plugin is working as expected too.
     *
     * @Route("/collectionOfCollections", name="collectionOfCollections")
     * @Template()
     */
    public function collectionOfCollectionsAction(Request $request)
    {
        $data = [
            'collections' => [
                [new Value('a'), new Value('b'), new Value('c')],
                [new Value('d'), new Value('e'), new Value('f')],
                [new Value('g'), new Value('h'), new Value('i')],
            ],
        ];

        $form = $this
           ->get('form.factory')
           ->createNamedBuilder('form', Type\FormType::class, $data)
           ->add('collections', Type\CollectionType::class, [
               'entry_type'    => Type\CollectionType::class,
               'label'         => 'Add, move, remove collections',
               'entry_options' => [
                   'entry_type'    => ValueType::class,
                   'label'         => 'Add, move, remove values',
                   'entry_options' => [
                       'label' => 'Value',
                   ],
                   'allow_add'      => true,
                   'allow_delete'   => true,
                   'prototype'      => true,
                   'prototype_name' => '__children_name__',
                   'attr'           => [
                       'class' => 'child-collection',
                   ],
               ],
               'allow_add'      => true,
               'allow_delete'   => true,
               'prototype'      => true,
               'prototype_name' => '__parent_name__',
               'attr'           => [
                   'class' => 'parent-collection',
               ],
           ])
           ->add('submit', Type\SubmitType::class)
           ->getForm()
        ;

        $form->handleRequest($request);
        if ($form->isValid()) {
            $data = $form->getData();
        }

        return [
            'form' => $form->createView(),
            'data' => $data,
        ];
    }

    /**
     * Advanced usage
     *
     * Looks like there are weird behaviours with Doctrine:
     * https://github.com/ninsuo/symfony-collection/issues/7
     * Let's test that live!
     *
     * ... hmm, doesn't look bad anyway
     *
     * @Route(
     *      "/usageWithDoctrine/{name}",
     *      name = "usageWithDoctrine",
     *      defaults = {
     *          "name" = "example"
     *      }
     * )
     * @Template()
     */
    public function usageWithDoctrineAction(Request $request, $name)
    {
        $repo = $this->getDoctrine()->getRepository('FuzAppBundle:MyArray');

        $data = $repo->findOneByName($name);
        if (is_null($data)) {
            $data = $repo->create($name);
        }

        $form = $this->createForm(MyArrayType::class, $data);
        $form->handleRequest($request);

        $form->get('save')->isClicked() && $form->isValid() && $repo->save($data);

        return [
            'names' => $repo->getArrayNames(),
            'form'  => $form->createView(),
            'data'  => $data,
        ];
    }

    /**
     * Related to usageWithDoctrine demo
     *
     * @Route(
     *      "/usageWithDoctrineDelete/{name}",
     *      name = "usageWithDoctrineDelete"
     * )
     */
    public function usageWithDoctrineDeleteAction(Request $request, $name)
    {
        $repo = $this->getDoctrine()->getRepository('FuzAppBundle:MyArray');
        if (!is_null($data = $repo->findOneByName($name))) {
            $repo->delete($data);
        }

        return $this->forward('FuzAppBundle:Advanced:usageWithDoctrine', [
            'name' => 'example',
        ]);
    }

    /**
     * A form having a theme and containing several fields
     *
     * @Route(
     *      "/formHavingSeveralFields",
     *      name = "formHavingSeveralFields"
     * )
     * @Template()
     */
    public function formHavingSeveralFieldsAction(Request $request)
    {
        $address = new Address();
        $address->setName('Mickael Steller');
        $address->setCompany('fuz.org');
        $address->setStreet('41 rue de la Paix');
        $address->setPostalcode('75002');
        $address->setCity('Paris');
        $address->setCountry('France');

        $addresses = new Addresses();
        $addresses->getAddresses()->add($address);

        $form = $this->createForm(AddressesType::class, $addresses);
        if ($request->isMethod('POST')) {
            $form->handleRequest($request);
        }

        return [
            'form' => $form->createView(),
            'data' => $addresses,
        ];
    }

    /**
     * Another example of form theme
     *
     * @Route(
     *      "/fancyFormTheme",
     *      name = "fancyFormTheme"
     * )
     * @Template()
     */
    public function fancyFormThemeAction(Request $request)
    {
        $fancyCollection = new FancyCollection();

        for ($i = 0; $i < 3; $i++) {
            $fancy = new Fancy();
            $fancyCollection->getFancyCollection()->add($fancy);
        }

        $form = $this->createForm(FancyCollectionType::class, $fancyCollection);

        $form->handleRequest($request);
        if ($form->isValid()) {
            $data = $form->getData();
        }

        return [
            'form' => $form->createView(),
            'data' => $fancyCollection,
        ];
    }
}
File: Controller/AdvancedController.php
File: Entity/MyArray.php
<?php

namespace Fuz\AppBundle\Entity;

use Doctrine\Common\Collections\ArrayCollection;
use Doctrine\ORM\Mapping as ORM;

/**
 * MyArray
 *
 * @ORM\Table(
 *      name="my_array",
 *      uniqueConstraints={@ORM\UniqueConstraint(name="name_idx", columns={"name"})}
 * )
 * @ORM\Entity(repositoryClass="Fuz\AppBundle\Repository\MyArrayRepository")
 */
class MyArray
{
    /**
     * @var int
     *
     * @ORM\Column(name="id", type="integer")
     * @ORM\Id
     * @ORM\GeneratedValue(strategy="AUTO")
     */
    protected $id;

    /**
     * @var string
     *
     * @ORM\Column(name="name", type="string", length=255)
     */
    protected $name;

    /**
     * @var ArrayCollection
     *
     * @ORM\OneToMany(targetEntity="MyElement", mappedBy="array", cascade={"all"}, orphanRemoval=true)
     */
    protected $elements;

    public function __construct()
    {
        $this->elements = new ArrayCollection();
    }

    public function getId()
    {
        return $this->id;
    }

    public function getName()
    {
        return $this->name;
    }

    public function setName($name)
    {
        $this->name = $name;

        return $this;
    }

    public function getElements()
    {
        return $this->elements;
    }
}
File: Entity/MyArray.php
File: Entity/MyElement.php
<?php

namespace Fuz\AppBundle\Entity;

use Doctrine\ORM\Mapping as ORM;

/**
 * MyElement
 *
 * @ORM\Table(name="my_element"),
 * @ORM\Entity
 */
class MyElement
{
    /**
     * @var int
     *
     * @ORM\Column(name="id", type="integer")
     * @ORM\Id
     * @ORM\GeneratedValue(strategy="AUTO")
     */
    protected $id;

    /**
     * @var MyArray
     *
     * @ORM\ManyToOne(targetEntity="MyArray", inversedBy="elements")
     * @ORM\JoinColumn(name="my_array_id", referencedColumnName="id")
     */
    protected $array;

    /**
     * @var string
     *
     * @ORM\Column(name="value", type="string", length=255)
     */
    protected $value;

    public function setId($id)
    {
        $this->id = $id;

        return $this;
    }

    public function getId()
    {
        return $this->id;
    }

    public function setArray(MyArray $array)
    {
        $this->array = $array;

        return $this;
    }

    public function getArray()
    {
        return $this->array;
    }

    public function setValue($value)
    {
        $this->value = $value;

        return $this;
    }

    public function getValue()
    {
        return $this->value;
    }
}
File: Entity/MyElement.php
File: Form/MyArrayType.php
<?php

namespace Fuz\AppBundle\Form;

use Symfony\Component\Form\AbstractType;
use Symfony\Component\Form\Extension\Core\Type\CollectionType;
use Symfony\Component\Form\Extension\Core\Type\SubmitType;
use Symfony\Component\Form\Extension\Core\Type\TextType;
use Symfony\Component\Form\FormBuilderInterface;
use Symfony\Component\OptionsResolver\OptionsResolver;

class MyArrayType extends AbstractType
{
    public function buildForm(FormBuilderInterface $builder, array $options)
    {
        $builder->add('name', TextType::class, [
                'label' => 'Array name:',
        ]);

        $builder->add('elements', CollectionType::class, [
            'label'        => 'Add an element...',
            'entry_type'   => MyElementType::class,
            'allow_add'    => true,
            'allow_delete' => true,
            'prototype'    => true,
            'required'     => false,
            'by_reference' => true,
            'delete_empty' => true,
            'attr'         => [
                'class' => 'doctrine-sample',
            ],
        ]);

        $builder->add('save', SubmitType::class, [
                'label' => 'Save this array',
        ]);
    }

    public function configureOptions(OptionsResolver $resolver)
    {
        $resolver->setDefaults([
            'data_class' => 'Fuz\AppBundle\Entity\MyArray',
        ]);
    }

    public function getBlockPrefix()
    {
        return 'my_array';
    }
}
File: Form/MyArrayType.php
File: Form/MyElementType.php
<?php

namespace Fuz\AppBundle\Form;

use Symfony\Component\Form\AbstractType;
use Symfony\Component\Form\Extension\Core\Type\TextType;
use Symfony\Component\Form\FormBuilderInterface;
use Symfony\Component\OptionsResolver\OptionsResolver;

class MyElementType extends AbstractType
{
    public function buildForm(FormBuilderInterface $builder, array $options)
    {
        $builder->add('value', TextType::class, [
            'required' => false,
        ]);
    }

    public function configureOptions(OptionsResolver $resolver)
    {
        $resolver->setDefaults([
            'data_class' => 'Fuz\AppBundle\Entity\MyElement',
        ]);
    }

    public function getBlockPrefix()
    {
        return 'my_element';
    }
}
File: Form/MyElementType.php
File: Repository/MyArrayRepository.php
<?php

namespace Fuz\AppBundle\Repository;

use Doctrine\DBAL\Exception\UniqueConstraintViolationException;
use Doctrine\ORM\EntityRepository;
use Fuz\AppBundle\Entity\MyArray;

/**
 * MyArrayRepository.
 */
class MyArrayRepository extends EntityRepository
{
    public function create($name)
    {
        $data = new MyArray();
        $data->setName($name);
        try {
            $this->_em->persist($data);
            $this->_em->flush();
        } catch (UniqueConstraintViolationException $e) {
            return null;
        }

        return $data;
    }

    public function save(MyArray $data)
    {
        foreach ($data->getElements() as $element) {
            $element->setArray($data);
        }
        try {
            $this->_em->persist($data);
            $this->_em->flush();
        } catch (UniqueConstraintViolationException $e) {
            return null;
        }

        return $data;
    }

    public function getArrayNames()
    {
        $arrays = $this
            ->_em
            ->createQuery("
               SELECT arr.name
               FROM Fuz\AppBundle\Entity\MyArray arr
            ")
            ->execute();
        $names = [];
        foreach ($arrays as $array) {
            $names[] = $array['name'];
        }

        return $names;
    }

    public function delete(MyArray $data)
    {
        foreach ($data->getElements() as $element) {
            $this->_em->remove($element);
        }
        $this->_em->remove($data);
        $this->_em->flush();
    }
}
File: Repository/MyArrayRepository.php
File: Resources/views/Advanced/doctrine-theme.html.twig

{% block my_element_label %}{% endblock %}
{% block my_element_errors %}{% endblock %}

{% block my_element_widget %}

    <div class="row">
        <div class="col-md-7">
            {{ form_widget(form.value) }}
        </div>
        <div class="col-md-2">
            <a href="#" class="collection-up btn btn-default">Up</a>
            <a href="#" class="collection-down btn btn-default">Down</a>
        </div>
        <div class="col-md-2">
            <a href="#" class="collection-remove btn btn-default">Remove</a>
            <a href="#" class="collection-add btn btn-default">Add</a>
        </div>
        <div class="col-md-1">
            <a href="#" class="collection-duplicate btn btn-default">Duplicate</a>
        </div>
    </div>

{% endblock %}
File: Resources/views/Advanced/doctrine-theme.html.twig
File: Resources/views/Advanced/usageWithDoctrine.html.twig
{% extends 'FuzAppBundle::layout.html.twig' %}

{% block extra_js %}
    <script src="{{ asset('js/jquery.collection.js') }}"></script>
{% endblock %}

{% block title %}Advanced usage: example with Doctrine{% endblock %}

{% block body %}

    <h2>{{ block('title') }}</h2>

    <p>
        That's not really an <i>advanced</i> topic, but the sample will be a bit hard to read (as it takes many files),
        so let's say it targets more experienced Symfony users.
    </p>

    <p>
        In this demo, we're displaying a MyArray of MyElements, both persisted into the database. The MyArray entity
        only have an id and a name, and MyElement has id, MyArray's id and a value. This is quite the same as we seen
        in all demos, but persisted.
    </p>

    <div class="text-center">
        <input type="button" id="new" class="btn btn-default" value="Create new array"/>
    </div>

    {%
        form_theme form
            'jquery.collection.html.twig'
            'FuzAppBundle:Advanced:doctrine-theme.html.twig'
    %}
    {{ form(form) }}

    <hr/>

    {% if names|length %}
        Existing arrays:
        <table class="table">
            <thead>
                <th>Name</th>
                <th>Open</th>
                <th>Delete</th>
            </thead>
            <tbody>
                {% for name in names %}
                    <tr>
                        <td>{{ name }}</td>
                        <td>
                            {% if data.name != name %}<a href="{{ path('usageWithDoctrine', {'name': name}) }}">Open</a>{% endif %}
                        </td>
                        <td><a href="{{ path('usageWithDoctrineDelete', {'name': name}) }}">Delete</a></td>
                    </tr>
                {% endfor %}
            </tbody>
        </table>
    {% endif %}

    {{
        tabs([
            'Base/BaseController.php',
            'Controller/AdvancedController.php',
            'Resources/views/Advanced/usageWithDoctrine.html.twig',
            'Resources/views/Advanced/doctrine-theme.html.twig',
            'Entity/MyArray.php',
            'Form/MyArrayType.php',
            'Entity/MyElement.php',
            'Form/MyElementType.php',
            'Repository/MyArrayRepository.php',
        ])
    }}

{% endblock %}

{% block script %}

    <script type="text/javascript">

        // only useful for the "new" button...
        $('#new').on('click', function() {
           var name = prompt("Which name would you like to use?");
           if (name) {
               var uri = '{{ path('usageWithDoctrine', {'name': 'a'}) }}';
               document.location = uri.substr(0, uri.length - 1) + encodeURIComponent(name);
           }
        });

        $('.doctrine-sample').collection();

    </script>

{% endblock %}
File: Resources/views/Advanced/usageWithDoctrine.html.twig