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
___ ☘ Cela fonctionne à Open Delete
_____ Open Delete
____________________________1%20test Open Delete
_______aaaazz Open Delete
___%20%C3%83%C2%A2%C3%82%C2%98%C3%82%C2%98%20Cela%20fonctionne%20%C3%83%C2%A2%C3%82%C2%98%C3%82%C2%98 Open Delete
__EDLP_7-0_ Open Delete
_%C3%A8 Open Delete
_a_ Open Delete
_Greeting, :D happy 2018 Open Delete
_Greeting,%20:D%20happy%202018 Open Delete
---#i27992875ec4286a24e569b1e015b0473 Open Delete
---%23i21ef661e2506d5d0e513dce166c17d49 Open Delete
---%23i5784b3886628c4362594ffa43547edb4 Open Delete
---%23i8c18088ea4d8dd4d6e5e986bceed35da Open Delete
---%23ibcac9f4c58199eeaa7ba5c7750b8434b Open Delete
---%23ic3ee8978c60737ab5d058b5a3f6a1b09 Open Delete
---%23ie025efbbb0738ed01a63b326c174233e Open Delete
'rtrt Open Delete
() Open Delete
(SELECT (CASE WHEN (4626=9556) THEN 'kjh' ELSE (SELECT 9556 UNION SELECT 9237) END)) Open Delete
@12 Open Delete
&&&&&&&&&&& Open Delete
#456 Open Delete
#69 Open Delete
#72 Open Delete
#72uuuuokokok Open Delete
#91 Open Delete
#timowashere Open Delete
%20gufc%20fucvuy Open Delete
%2391 Open Delete
%23AlgoSucks Open Delete
%23timowashere Open Delete
%25231 Open Delete
%252372 Open Delete
%252372uuuu#i21ef661e2506d5d0e513dce166c17d49 Open Delete
%252372uuuu#i27992875ec4286a24e569b1e015b0473 Open Delete
%252372uuuu#ibcac9f4c58199eeaa7ba5c7750b8434b Open Delete
%252372uuuu#ic3ee8978c60737ab5d058b5a3f6a1b09 Open Delete
%2525237233333%23ibcac9f4c58199eeaa7ba5c7750b8434b Open Delete
%2525237233333%23ie025efbbb0738ed01a63b326c174233e Open Delete
%25252372uuuu%23i1dcd1cbb0d8eeb1fd3a32dc2aa9c8013 Open Delete
%25252372uuuu%23i21ef661e2506d5d0e513dce166c17d49 Open Delete
%25252372uuuu%23i27992875ec4286a24e569b1e015b0473 Open Delete
%25252372uuuu%23i5784b3886628c4362594ffa43547edb4 Open Delete
%25252372uuuu%23i8c18088ea4d8dd4d6e5e986bceed35da Open Delete
%25252372uuuu%23ibcac9f4c58199eeaa7ba5c7750b8434b Open Delete
%25252391 Open Delete
%25253F%23i1dcd1cbb0d8eeb1fd3a32dc2aa9c8013 Open Delete
%25253F%23i8c18088ea4d8dd4d6e5e986bceed35da Open Delete
%25253F%23ic3ee8978c60737ab5d058b5a3f6a1b09 Open Delete
%25253F%23ie025efbbb0738ed01a63b326c174233e Open Delete
%2527 Open Delete
%2528orph%25C3%25A9e%2529 Open Delete
%252E Open Delete
%253Csdsads Open Delete
%253F#i1dcd1cbb0d8eeb1fd3a32dc2aa9c8013 Open Delete
%253F#i21ef661e2506d5d0e513dce166c17d49 Open Delete
%26%26%26%26%26%26%26%26%26%26%26 Open Delete
%27 Open Delete
%28%29 Open Delete
%28orph%C3%83%C2%83%C3%82%C2%A9e%29 Open Delete
%28orph%C3%83%C2%A9e%29 Open Delete
%28orph%C3%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
%28SELECT%20%28CASE%20WHEN%20%289680=8265%29%20THEN%20%27kjh%27%20ELSE%20%28SELECT%208265%20UNION%20SELECT%207356%29%20END%29%29 Open Delete
%3C Open Delete
%3C%3C%3C%3C%3C%3C%3C%3C%3C%3C%3C%3C%3C%3C%3C%3C%3C%3C%3C%3C%3C%3C%3C%3C%3C%3C%3C%3C%3C%3C%3C%3C%3C%3C%3C%3C%3C%3C%3C%3C%3CLETTRE%20GREC%3E%3E%3E%3E%3E%3E%3E%3E%3E%3E%3E%3E%3E%3E%3E%3E%3E%3E%3E%3E%3E%3E%3E%3E%3E%3E%3E%3E%3E%3E%3E%3E%3E%3E%3E%3E%3E%3E%3E%3 Open Delete
%C3%83%C2%91%C3%82%C2%82%C3%83%C2%90%C3%82%C2%B5%C3%83%C2%91%C3%82%C2%81%C3%83%C2%91%C3%82%C2%82 Open Delete
%C3%83%C2%B1lkjlkj Open Delete
%C3%83%C2%B1sfkjaldsa Open Delete
%C3%91%C2%82%C3%90%C2%B5%C3%91%C2%81%C3%91%C2%82 Open Delete
%D1%80%D0%BE%D0%BB%D1%80 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
01233 Open Delete
10 Open Delete
1000-1 Open Delete
11#i1dcd1cbb0d8eeb1fd3a32dc2aa9c8013 Open Delete
11#ie025efbbb0738ed01a63b326c174233e Open Delete
11%23i1097c8b84b58a65ed6ec7b4f0da3ab67 Open Delete
11%23i5784b3886628c4362594ffa43547edb4 Open Delete
11%23ibcac9f4c58199eeaa7ba5c7750b8434b Open Delete
11%23ie025efbbb0738ed01a63b326c174233e Open Delete
1111#i27992875ec4286a24e569b1e015b0473 Open Delete
1111#i5784b3886628c4362594ffa43547edb4 Open Delete
1111#ic3ee8978c60737ab5d058b5a3f6a1b09 Open Delete
1111#ie025efbbb0738ed01a63b326c174233e Open Delete
1111%23i21ef661e2506d5d0e513dce166c17d49 Open Delete
1111%23ie025efbbb0738ed01a63b326c174233e Open Delete
11111111111111 Open Delete
1111111111111111111111111111111111#i27992875ec4286a24e569b1e015b0473 Open Delete
1111111111111111111111111111111111#i8c18088ea4d8dd4d6e5e986bceed35da Open Delete
1111111111111111111111111111111111#ie025efbbb0738ed01a63b326c174233e Open Delete
1111111111111111111111111111111111%23i1dcd1cbb0d8eeb1fd3a32dc2aa9c8013 Open Delete
1111111111111111111111111111111111%23i27992875ec4286a24e569b1e015b0473 Open Delete
1111111111111111111111111111111111%23i8c18088ea4d8dd4d6e5e986bceed35da Open Delete
12 Open Delete
122 Open Delete
123blue Open Delete
1241 Open Delete
15 Open Delete
1aa Open Delete
2' Open Delete
2%27 Open Delete
222 Open Delete
2232323 Open Delete
32jnni Open Delete
456 Open Delete
5 Open Delete
88 Open Delete
890 Open Delete
969 Open Delete
☘ Cela fonctionne ☘ Open Delete
a Lorenz Open Delete
a%20Lorenz Open Delete
a%20woop%20woop Open Delete
☘ Cela fonctionne ☘ Open Delete
A1 Open Delete
ñlkjlkj Open Delete
ñsfkjaldsa Open Delete
ñlkjlkj Open Delete
ñsfkjaldsa Open Delete
aaaaaaaaaaaaaa Open Delete
AAAAAAAAAAAAAAAAAAAAA Open Delete
aaamine22222#i1097c8b84b58a65ed6ec7b4f0da3ab67 Open Delete
aaamine22222#i5784b3886628c4362594ffa43547edb4 Open Delete
aaamine22222#ie025efbbb0738ed01a63b326c174233e Open Delete
aaamine22222%23i1097c8b84b58a65ed6ec7b4f0da3ab67 Open Delete
aaamine22222%23i1dcd1cbb0d8eeb1fd3a32dc2aa9c8013 Open Delete
aaamine22222%23i5784b3886628c4362594ffa43547edb4 Open Delete
aaamine22222%23i8c18088ea4d8dd4d6e5e986bceed35da Open Delete
aaamine22222%23ibcac9f4c58199eeaa7ba5c7750b8434b Open Delete
aaamine22222%23ie025efbbb0738ed01a63b326c174233e Open Delete
adfadf'A=0 Open Delete
adfadf%27A=0 Open Delete
aee Open Delete
alsi Open Delete
any Open Delete
array%20new Open Delete
array1 Open Delete
array2 Open Delete
as Open Delete
asd Open Delete
asdasd Open Delete
asdasd#i21ef661e2506d5d0e513dce166c17d49 Open Delete
asdasd#i5784b3886628c4362594ffa43547edb4 Open Delete
asdasd#ie025efbbb0738ed01a63b326c174233e Open Delete
asdasd%23i8c18088ea4d8dd4d6e5e986bceed35da Open Delete
asdasd%23ie025efbbb0738ed01a63b326c174233e Open Delete
asdasdadasd Open Delete
asdasdadasd%23i1dcd1cbb0d8eeb1fd3a32dc2aa9c8013 Open Delete
asdasdadasd%23i21ef661e2506d5d0e513dce166c17d49 Open Delete
asdasdadasd%23i5784b3886628c4362594ffa43547edb4 Open Delete
asdasdadasd%23ibcac9f4c58199eeaa7ba5c7750b8434b Open Delete
AU Open Delete
bdfdfdfdf Open Delete
bite Open Delete
bjfhj#i8c18088ea4d8dd4d6e5e986bceed35da Open Delete
bjfhj#ibcac9f4c58199eeaa7ba5c7750b8434b Open Delete
bjfhj%23i1dcd1cbb0d8eeb1fd3a32dc2aa9c8013 Open Delete
bjfhj%23i27992875ec4286a24e569b1e015b0473 Open Delete
bjfhj%23i5784b3886628c4362594ffa43547edb4 Open Delete
bjfhj%23i8c18088ea4d8dd4d6e5e986bceed35da Open Delete
bjfhj%23ic3ee8978c60737ab5d058b5a3f6a1b09 Open Delete
bjfhj%23ie025efbbb0738ed01a63b326c174233e Open Delete
blah#i1dcd1cbb0d8eeb1fd3a32dc2aa9c8013 Open Delete
blah#ibcac9f4c58199eeaa7ba5c7750b8434b Open Delete
blah#ie025efbbb0738ed01a63b326c174233e Open Delete
blah%23i1097c8b84b58a65ed6ec7b4f0da3ab67 Open Delete
blah%23i21ef661e2506d5d0e513dce166c17d49 Open Delete
blah%23i27992875ec4286a24e569b1e015b0473 Open Delete
blah%23i5784b3886628c4362594ffa43547edb4 Open Delete
blah%23i8c18088ea4d8dd4d6e5e986bceed35da Open Delete
blah%23ie025efbbb0738ed01a63b326c174233e Open Delete
born Open Delete
bxvbvx Open Delete
Caracas222666 Open Delete
cela Open Delete
Cela fonctionne pas Open Delete
Cela%20fonctionne Open Delete
Cela%20fonctionne%20pas Open Delete
checks Open Delete
Christos Open Delete
cnes Open Delete
crap Open Delete
cx%253Cwc Open Delete
cx%3Cwc Open Delete
d Open Delete
D happy 2018 Open Delete
D#i1dcd1cbb0d8eeb1fd3a32dc2aa9c8013 Open Delete
D#i27992875ec4286a24e569b1e015b0473 Open Delete
D#i5784b3886628c4362594ffa43547edb4 Open Delete
D#i8c18088ea4d8dd4d6e5e986bceed35da Open Delete
D#ie025efbbb0738ed01a63b326c174233e Open Delete
D%20happy%202018 Open Delete
D%23i1097c8b84b58a65ed6ec7b4f0da3ab67 Open Delete
D%23i21ef661e2506d5d0e513dce166c17d49 Open Delete
D%23i5784b3886628c4362594ffa43547edb4 Open Delete
D%23ibcac9f4c58199eeaa7ba5c7750b8434b Open Delete
D%23ie025efbbb0738ed01a63b326c174233e Open Delete
das Open Delete
dasd Open Delete
ddazdaz Open Delete
dddddddddddddddddddddd Open Delete
delete_empty Open Delete
dfa Open Delete
dfa#ibcac9f4c58199eeaa7ba5c7750b8434b Open Delete
dfa%23i1097c8b84b58a65ed6ec7b4f0da3ab67 Open Delete
dfa%23i1dcd1cbb0d8eeb1fd3a32dc2aa9c8013 Open Delete
dfa%23i21ef661e2506d5d0e513dce166c17d49 Open Delete
dfgdfg Open Delete
dfzre Open Delete
dgdgdg Open Delete
dsdfgsdfgdf Open Delete
dsds Open Delete
dsfdsfd Open Delete
ejemplito 2 Open Delete
ejemplito%202 Open Delete
ejemplo 2017-11-23 Open Delete
ejemplo%202 Open Delete
ejemplo%202017-11-23 Open Delete
erwgfu%C3%83%C2%84%C3%82%C2%B1gj8hl%C3%83%C2%84%C3%82%C2%B1 Open Delete
erwgfuıgj Open Delete
ewe Open Delete
exadasdas Open Delete
exam Open Delete
example Open Delete
example%20exam Open Delete
example123 Open Delete
example123#i1097c8b84b58a65ed6ec7b4f0da3ab67 Open Delete
example123#i21ef661e2506d5d0e513dce166c17d49 Open Delete
example123#i27992875ec4286a24e569b1e015b0473 Open Delete
example123#i5784b3886628c4362594ffa43547edb4 Open Delete
example123#ie025efbbb0738ed01a63b326c174233e Open Delete
example123%23i8c18088ea4d8dd4d6e5e986bceed35da Open Delete
example123%23ibcac9f4c58199eeaa7ba5c7750b8434b Open Delete
example2 Open Delete
example2222222 Open Delete
example3243423 Open Delete
exampleasfsafasf#i1097c8b84b58a65ed6ec7b4f0da3ab67 Open Delete
exampleasfsafasf#i21ef661e2506d5d0e513dce166c17d49 Open Delete
exampleasfsafasf%23i27992875ec4286a24e569b1e015b0473 Open Delete
exampleasfsafasf%23ibcac9f4c58199eeaa7ba5c7750b8434b Open Delete
exampleasfsafasf%23ie025efbbb0738ed01a63b326c174233e Open Delete
exampledsdsdd Open Delete
examplee Open Delete
exampleeeeeeeeeeeee Open Delete
examplefsd Open Delete
exampleqzd Open Delete
examplertyrtyrty Open Delete
exampleRW2 Open Delete
examplesafs;af;sfsf Open Delete
examplesafsaf;sfsf Open Delete
examplesafsafsfsf Open Delete
examplesdddd Open Delete
examplesdf Open Delete
exampless Open Delete
exampletes Open Delete
exampletestsf%20sdf%20sd%20sd Open Delete
exampleu Open Delete
exampleuy Open Delete
examplexzasca Open Delete
examqdqsple Open Delete
Existing%20arr Open Delete
Existing%2520arrays: Open Delete
exkiample Open Delete
fdf#i1dcd1cbb0d8eeb1fd3a32dc2aa9c8013 Open Delete
fdf#i27992875ec4286a24e569b1e015b0473 Open Delete
fdf#i8c18088ea4d8dd4d6e5e986bceed35da Open Delete
fdf#ic3ee8978c60737ab5d058b5a3f6a1b09 Open Delete
fdf%23i1097c8b84b58a65ed6ec7b4f0da3ab67 Open Delete
fdf%23i5784b3886628c4362594ffa43547edb4 Open Delete
fdf%23ic3ee8978c60737ab5d058b5a3f6a1b09 Open Delete
fdf%23ie025efbbb0738ed01a63b326c174233e Open Delete
fdgdf Open Delete
fdsdf Open Delete
fe Open Delete
ff%20d Open Delete
fghjkl Open Delete
fgt Open Delete
foo Open Delete
Fora%20Bolsonaro Open Delete
fro Open Delete
Fruits Open Delete
fsda Open Delete
fsdfd Open Delete
fuck%2520you Open Delete
gbfgbf Open Delete
gdfg Open Delete
gdfg#i1097c8b84b58a65ed6ec7b4f0da3ab67 Open Delete
gdfg#i27992875ec4286a24e569b1e015b0473 Open Delete
gdfg#ic3ee8978c60737ab5d058b5a3f6a1b09 Open Delete
gdfg%23i1dcd1cbb0d8eeb1fd3a32dc2aa9c8013 Open Delete
gdfg%23i5784b3886628c4362594ffa43547edb4 Open Delete
geht nicht Open Delete
gfdgdf Open Delete
gg%27A=0 Open Delete
ghjk Open Delete
ghjk#i1097c8b84b58a65ed6ec7b4f0da3ab67 Open Delete
ghjk#ibcac9f4c58199eeaa7ba5c7750b8434b Open Delete
ghjk%23i1097c8b84b58a65ed6ec7b4f0da3ab67 Open Delete
ghjk%23i21ef661e2506d5d0e513dce166c17d49 Open Delete
ghjk%23i27992875ec4286a24e569b1e015b0473 Open Delete
ghjk%23i5784b3886628c4362594ffa43547edb4 Open Delete
ghjk%23ic3ee8978c60737ab5d058b5a3f6a1b09 Open Delete
ghk Open Delete
Ghy Open Delete
Group%20C Open Delete
Group%2520B Open Delete
Group%252BC Open Delete
Group%252BC%23i21ef661e2506d5d0e513dce166c17d49 Open Delete
Group%2BC#i27992875ec4286a24e569b1e015b0473 Open Delete
Group%2BC#i8c18088ea4d8dd4d6e5e986bceed35da Open Delete
Group%2BC#ie025efbbb0738ed01a63b326c174233e Open Delete
gufc%20fucvuy Open Delete
hahah Open Delete
Hallo Open Delete
hellowrld Open Delete
heof Open Delete
HEYY%2520:D#i8c18088ea4d8dd4d6e5e986bceed35da Open Delete
HEYY%2520:D#ie025efbbb0738ed01a63b326c174233e Open Delete
HEYY%252520:D%23i1097c8b84b58a65ed6ec7b4f0da3ab67 Open Delete
HEYY%252520:D%23i21ef661e2506d5d0e513dce166c17d49 Open Delete
HEYY%252520:D%23i27992875ec4286a24e569b1e015b0473 Open Delete
HEYY%252520:D%23i5784b3886628c4362594ffa43547edb4 Open Delete
HEYY%252520:D%23i8c18088ea4d8dd4d6e5e986bceed35da Open Delete
HEYY%252520:D%23ie025efbbb0738ed01a63b326c174233e Open Delete
hg Open Delete
hghgh Open Delete
hgjgjh Open Delete
hgkjh Open Delete
hh Open Delete
hi%20bitches Open Delete
hjvhj Open Delete
ho Open Delete
hoho Open Delete
how to fight insomnia naturallyTa mere la grosse choin Open Delete
how to fight insomnia naturallyTa%20mere%20la%20grosse%20choin Open Delete
how to fight insomnia naturallyTa%2520mere%2520la%2520grosse%2520choin Open Delete
htt Open Delete
hyhy Open Delete
interest Open Delete
ismail Open Delete
iujjj Open Delete
jghjghjgj Open Delete
jj Open Delete
jkjk Open Delete
jtujjk Open Delete
julio Open Delete
kappa Open Delete
khj#i1097c8b84b58a65ed6ec7b4f0da3ab67 Open Delete
khj#i8c18088ea4d8dd4d6e5e986bceed35da Open Delete
khj%23i27992875ec4286a24e569b1e015b0473 Open Delete
khj%23i8c18088ea4d8dd4d6e5e986bceed35da Open Delete
kjh AND 2935=5884-- JseU Open Delete
kjh AND 5825=4111 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( 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-- QqbR 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 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)-- WkLU 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)-- XVww 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))) Open Delete
kjh AND EXTRACTVALUE(5914,CONCAT(0x5c,0x716a6a7671,(SELECT (ELT(5914=5914,1))),0x71717a7871)) Open Delete
kjh ORDER BY 1-- rvnA Open Delete
kjh' AND 2561=2906 AND 'dQSK'='dQSK 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 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 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 'mDsE'='mDsE Open Delete
kjh' ORDER BY 1-- Aifn Open Delete
kjh') AND 2750=5826 AND ('NRcI'='NRcI Open Delete
kjh') AND 3055=4968 AND ('igun'='igun 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 ('dgTV'='dgTV Open Delete
kjh) AND 3185=2112 AND (3791=3791 Open Delete
kjh) AND 3637=2334 AND (3292=3292 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 (2379=2379 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 Open Delete
kjh) AND EXTRACTVALUE(5914,CONCAT(0x5c,0x716a6a7671,(SELECT (ELT(5914=5914,1))),0x71717a7871)) AND (9337=9337 Open Delete
kjh) AND EXTRACTVALUE(7241 Open Delete
kjh) AND EXTRACTVALUE(7241,CONCAT(0x5c,0x717a6b7871,(SELECT (ELT(7241=7241,1))),0x716a6b7a71)) AND (6110=6110 Open Delete
kjh%20AND%202675=9406 Open Delete
kjh%20AND%202935=5884--%20JseU 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%202060=2060%20AND%20%27JKZh%27=%27JKZh Open Delete
kjh%27%20AND%204678=8698%20AND%20%27uMbv%27=%27uMbv Open Delete
kjh%27%20AND%207954=%28SELECT%20UPPER%28XMLType%28CHR%2860%29%7C%7CCHR%2858%29%7C%7CCHR%28113%29%7C%7CCHR%28122%29%7C%7CCHR%28107%29%7C%7CCHR%28120%29%7C%7CCHR%28113%29%7C%7C%28SELECT%20%28CASE%20WHEN%20%287954=7954%29%20THEN%201%20ELSE%200%20END%29%20FRO 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%202750=5826%20AND%20%28%27NRcI%27=%27NRcI 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%209667%20IN%20%28SELECT%20%28CHAR%28113%29+CHAR%28122%29+CHAR%28107%29+CHAR%28120%29+CHAR%28113%29+%28SELECT%20%28CASE%20WHEN%20%289667=9667%29%20THEN%20CHAR%2849%29%20ELSE%20CHAR%2848%29%20END%29%29+CHAR%28113%29+CHAR%28106%29+CHAR%28107% Open Delete
kjh%27FIFazt%3C%27%22%3EkJJxrd Open Delete
kjh%29%20AND%203185=2112%20AND%20%283791=3791 Open Delete
kjh%29%20AND%203637=2334%20AND%20%283292=3292 Open Delete
kjh%29%20AND%209930=6330%20AND%20%289057=9057 Open Delete
kjh%29%20AND%20EXTRACTVALUE%287241,CONCAT%280x5c,0x717a6b7871,%28SELECT%20%28ELT%287241=7241,1%29%29%29,0x716a6b7a71%29%29%20AND%20%286110=6110 Open Delete
kjkk Open Delete
kk Open Delete
kkk#i1dcd1cbb0d8eeb1fd3a32dc2aa9c8013 Open Delete
kkk#i8c18088ea4d8dd4d6e5e986bceed35da Open Delete
kkk%23i1dcd1cbb0d8eeb1fd3a32dc2aa9c8013 Open Delete
kkk%23i21ef661e2506d5d0e513dce166c17d49 Open Delete
kkk%23i27992875ec4286a24e569b1e015b0473 Open Delete
kkk%23i8c18088ea4d8dd4d6e5e986bceed35da Open Delete
kkk%23ic3ee8978c60737ab5d058b5a3f6a1b09 Open Delete
kmkm Open Delete
kool Open Delete
kpok%25C2%25B4p Open Delete
kpok%C3%83%C2%82%C3%82%C2%B4p Open Delete
l Open Delete
lj Open Delete
lkjlkj Open Delete
lkk Open Delete
Lorenz%20du%20stinker Open Delete
m Open Delete
mec Open Delete
medicion 2 Open Delete
medicion%202 Open Delete
Memes Open Delete
mjn Open Delete
mkmkmk Open Delete
moiGHOY - Resources/views/Advanced/doctrine-them Open Delete
mon exemple Open Delete
mon putain de tableau Open Delete
mon tableau Open Delete
mon%2520exemple Open Delete
mon%2520putain%2520de%2520tableau Open Delete
mon%2520tableau Open Delete
mt Open Delete
my_array Open Delete
mytest Open Delete
name Open Delete
nbnv Open Delete
new Open Delete
New_test_2017- Open Delete
new%2520test Open Delete
nmn Open Delete
nmn#i1097c8b84b58a65ed6ec7b4f0da3ab67 Open Delete
nmn#i1dcd1cbb0d8eeb1fd3a32dc2aa9c8013 Open Delete
nmn#i27992875ec4286a24e569b1e015b0473 Open Delete
nmn%23i21ef661e2506d5d0e513dce166c17d49 Open Delete
nmn%23i27992875ec4286a24e569b1e015b0473 Open Delete
nmn%23ie025efbbb0738ed01a63b326c174233e Open Delete
nnn Open Delete
Nouveau Open Delete
Numeros%20de%20prueba Open Delete
o%25C4%25B1 Open Delete
o%C3%83%C2%84%C3%82%C2%B1 Open Delete
o%C4%B1 Open Delete
oij Open Delete
ok Open Delete
okilol Open Delete
olaboga Open Delete
Ouiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiii Open Delete
ouiou Open Delete
pepiii Open Delete
peppo Open Delete
perebetes Open Delete
perses Open Delete
perses%23i5784b3886628c4362594ffa43547edb4 Open Delete
perses%23ic3ee8978c60737ab5d058b5a3f6a1b09 Open Delete
pornhub.com Open Delete
pp Open Delete
pppppii#i21ef661e2506d5d0e513dce166c17d49 Open Delete
pppppii#i5784b3886628c4362594ffa43547edb4 Open Delete
pppppii%23i1dcd1cbb0d8eeb1fd3a32dc2aa9c8013 Open Delete
pppppii%23i21ef661e2506d5d0e513dce166c17d49 Open Delete
pppppii%23i8c18088ea4d8dd4d6e5e986bceed35da Open Delete
pppppp Open Delete
Premier element de test Open Delete
Premier%20element%20de%20test Open Delete
product Open Delete
project%201 Open Delete
project%25201 Open Delete
punto 2 Open Delete
qe Open Delete
qsd Open Delete
quantite --1 Open Delete
qwehgnhngh Open Delete
r Open Delete
rar Open Delete
referees Open Delete
rerererere Open Delete
rerwrer Open Delete
rr Open Delete
rrrr Open Delete
rrrr#i27992875ec4286a24e569b1e015b0473 Open Delete
rrrr#i5784b3886628c4362594ffa43547edb4 Open Delete
rrrr%23i21ef661e2506d5d0e513dce166c17d49 Open Delete
rrrr%23i27992875ec4286a24e569b1e015b0473 Open Delete
rrrr%23ibcac9f4c58199eeaa7ba5c7750b8434b Open Delete
rrrr%23ic3ee8978c60737ab5d058b5a3f6a1b09 Open Delete
rrrr%23ie025efbbb0738ed01a63b326c174233e Open Delete
rtr Open Delete
s Open Delete
sa Open Delete
sad Open Delete
salut%20les Open Delete
sam Open Delete
samArray Open Delete
scts Open Delete
sd Open Delete
sdasdafs Open Delete
sdczsdzsd Open Delete
sdfsdfsd Open Delete
seeme%23i27992875ec4286a24e569b1e015b0473 Open Delete
seeme%23i8c18088ea4d8dd4d6e5e986bceed35da Open Delete
seeme%23ibcac9f4c58199eeaa7ba5c7750b8434b Open Delete
seeme%23ic3ee8978c60737ab5d058b5a3f6a1b09 Open Delete
seeme%23ie025efbbb0738ed01a63b326c174233e Open Delete
select Open Delete
seqtest Open Delete
sf Open Delete
sfd Open Delete
some new array Open Delete
some%20new%20array Open Delete
someNewArray#i21ef661e2506d5d0e513dce166c17d49 Open Delete
someNewArray#ic3ee8978c60737ab5d058b5a3f6a1b09 Open Delete
someNewArray#ie025efbbb0738ed01a63b326c174233e Open Delete
someNewArray%23i1097c8b84b58a65ed6ec7b4f0da3ab67 Open Delete
someNewArray%23i1dcd1cbb0d8eeb1fd3a32dc2aa9c8013 Open Delete
someNewArray%23i27992875ec4286a24e569b1e015b0473 Open Delete
someNewArray%23i5784b3886628c4362594ffa43547edb4 Open Delete
someNewArray%23i8c18088ea4d8dd4d6e5e986bceed35da Open Delete
someNewArray%23ibcac9f4c58199eeaa7ba5c7750b8434b Open Delete
sqsq Open Delete
ss Open Delete
sssss Open Delete
ssssssssssssss Open Delete
suck%20my%20co Open Delete
suck%2520my%2520cock%2520fgts Open Delete
Ta mere la grosse choin Open Delete
Ta mere la grosse tchoin Open Delete
Ta%20mere%20la%20grosse%20choin Open Delete
Ta%20mere%20la%20grosse%20tchoin Open Delete
Ta%2520mere%2520la%2520grosse%2520choin Open Delete
Ta%2520mere%2520la%2520grosse%2520choin#i1097c8b84b58a65ed6ec7b4f0da3ab67 Open Delete
Ta%2520mere%2520la%2520grosse%2520choin#i1dcd1cbb0d8eeb1fd3a32dc2aa9c8013 Open Delete
Ta%2520mere%2520la%2520grosse%2520choin#i27992875ec4286a24e569b1e015b0473 Open Delete
Ta%2520mere%2520la%2520grosse%2520choin#i8c18088ea4d8dd4d6e5e986bceed35da Open Delete
Ta%2520mere%2520la%2520grosse%2520choin#ie025efbbb0738ed01a63b326c174233e Open Delete
Ta%2520mere%2520la%2520grosse%2520tchoin Open Delete
Ta%252520mere%252520la%252520grosse%252520choin%23i1097c8b84b58a65ed6ec7b4f0da3ab67 Open Delete
Ta%252520mere%252520la%252520grosse%252520choin%23i21ef661e2506d5d0e513dce166c17d49 Open Delete
Ta%252520mere%252520la%252520grosse%252520choin%23i27992875ec4286a24e569b1e015b0473 Open Delete
Ta%252520mere%252520la%252520grosse%252520choin%23i5784b3886628c4362594ffa43547edb4 Open Delete
Ta%252520mere%252520la%252520grosse%252520choin%23i8c18088ea4d8dd4d6e5e986bceed35da Open Delete
Ta%252520mere%252520la%252520grosse%252520choin%23ie025efbbb0738ed01a63b326c174233e Open Delete
tableau%20cellule%20unique Open Delete
tableau%2520cellule%2520unique Open Delete
TATA Open Delete
Telous Open Delete
tesss Open Delete
tesst Open Delete
TEST 2 Open Delete
test name Open Delete
test nours Open Delete
test2 Open Delete
test22 Open Delete
test34 Open Delete
TEST912 Open Delete
testarray Open Delete
TESTEN Open Delete
Tester Open Delete
testing Open Delete
texte Open Delete
the test Open Delete
the%2520test Open Delete
This Open Delete
this is an Open Delete
this%2520is%2520an%2520array Open Delete
tojo Open Delete
tre Open Delete
try01 Open Delete
tttttz Open Delete
tyrtyrtrhgfhgfhg Open Delete
tyty Open Delete
tzzttz Open Delete
uhj Open Delete
uiu Open Delete
uytuuyt Open Delete
Vai que da Delete
Vai%20que%20da Open Delete
Vai%252520que%252520da Open Delete
vffv Open Delete
vh Open Delete
Volta Di Open Delete
Volta Dilm Open Delete
Volta Dilma Fo Open Delete
Volta Dilma Fora Temer Open Delete
Volta Dilma Fora% Open Delete
Volta%2 Open Delete
Volta%20Dilm Open Delete
Volta%20Dilma%20Fo Open Delete
Volta%252 Open Delete
Volta%2520Dilma%2520Fora%2520Temer#i1dcd1cbb0d8eeb1fd3a32dc2aa9c8013 Open Delete
Volta%2520Dilma%2520Fora%2520Temer#i21ef661e2506d5d0e513dce16 Open Delete
Volta%2520Dilma%2520Fora%2520Temer#i27992875ec4286a24e569b1e015b0473 Open Delete
Volta%2520Dilma%2520Fora%2520Temer#ibcac9f4c58199eeaa7ba5c7750b8434b Open Delete
Volta%2520Dilma%2520Fora%2520Temer#ie025efbbb0738ed01a63b326c174233e Open Delete
Volta%252520Dilma%252520Fora%252520Temer%23i21ef661e2506d5d0e513dce16 Open Delete
Volta%252520Dilma%252520Fora%252520Temer%23i5784b3886628c4362594ffa43547edb4 Open Delete
Volta%252520Dilma%252520Fora%252520Temer%23ibcac9f4c58199eeaa7ba5c7750b8434b Open Delete
Volta%252520Dilma%252520Fora%252520Temer%23ic3ee8978c60737ab5d058b5a3f6a1b09 Open Delete
Volta%252520Dilma%252520Fora%252520Temer%23ie025efbbb0738ed01a63b326c174233e Open Delete
VRE Open Delete
why doctrine Open Delete
why%20doctrine Open Delete
why%2520doctrine%2520on%2520delete%2520not%2520work%253F Open Delete
Woop wooop Open Delete
Woop%20wooop Open Delete
Woop%2520wooop Open Delete
wsh yannito Open Delete
wsh%20yannito Open Delete
ww Open Delete
www Open Delete
Xbox Series X > PS5 Open Delete
xv Open Delete
xxx Open Delete
yytutyutyu Open Delete
yyyyyyyyyyyyyy Open Delete
zDSfsdf Open Delete
zizizizizi Open Delete
zzzz1 Open Delete
zzzzzz Open Delete
тест 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