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
gufc fucvuy Open Delete
___ ☘ Cela fonctionne â Open Delete
___ ☘ Cela fonctionne ☘ Open Delete
__________________________________________ Open Delete
_________coucou 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%C2%A2%C3%82%C2%98%C3%82%C2%98 Open Delete
___%20%E2%98%98%20Cela%20fonctionne%20%E2%98%98 Open Delete
___array___ Open Delete
__EDLP_7-0_ Open Delete
_%C3%A8 Open Delete
_Greeting,%20:D%20happy%202018 Open Delete
--- Open Delete
---#i21ef661e2506d5d0e513dce166c17d49 Open Delete
---#ibcac9f4c58199eeaa7ba5c7750b8434b Open Delete
---%23i1097c8b84b58a65ed6ec7b4f0da3ab67 Open Delete
---%23i27992875ec4286a24e569b1e015b0473 Open Delete
---%23ic3ee8978c60737ab5d058b5a3f6a1b09 Open Delete
---%23ie025efbbb0738ed01a63b326c174233e Open Delete
!!!!sdsdsd Open Delete
'rtrt Open Delete
() Open Delete
(orphée) Open Delete
(SELECT (CASE WHEN (6190=5092) THEN 'kjh' ELSE (SELECT 5092 UNION SELECT 3869) END)) Open Delete
&&&&&&&&&&& Open Delete
#456 Open Delete
#69 Open Delete
#91 Open Delete
#AlgoSucks Open Delete
%231 Open Delete
%2372uuuu Open Delete
%23AlgoSucks Open Delete
%25237233333#i1dcd1cbb0d8eeb1fd3a32dc2aa9c8013 Open Delete
%25237233333#i21ef661e2506d5d0e513dce166c17d49 Open Delete
%25237233333#ibcac9f4c58199eeaa7ba5c7750b8434b Open Delete
%252372uuuu#i1097c8b84b58a65ed6ec7b4f0da3ab67 Open Delete
%252372uuuu#i1dcd1cbb0d8eeb1fd3a32dc2aa9c8013 Open Delete
%252372uuuu#i21ef661e2506d5d0e513dce166c17d49 Open Delete
%252372uuuu#i5784b3886628c4362594ffa43547edb4 Open Delete
%252372uuuu#ie025efbbb0738ed01a63b326c174233e Open Delete
%2525237233333%23i1dcd1cbb0d8eeb1fd3a32dc2aa9c8013 Open Delete
%2525237233333%23i21ef661e2506d5d0e513dce166c17d49 Open Delete
%2525237233333%23i27992875ec4286a24e569b1e015b0473 Open Delete
%2525237233333%23ic3ee8978c60737ab5d058b5a3f6a1b09 Open Delete
%25252372uuuu Open Delete
%25252372uuuu%23i1097c8b84b58a65ed6ec7b4f0da3ab67 Open Delete
%25252372uuuu%23i21ef661e2506d5d0e513dce166c17d49 Open Delete
%25252372uuuu%23i5784b3886628c4362594ffa43547edb4 Open Delete
%25252372uuuu%23ibcac9f4c58199eeaa7ba5c7750b8434b Open Delete
%25252391 Open Delete
%25253F%23i27992875ec4286a24e569b1e015b0473 Open Delete
%25253F%23i5784b3886628c4362594ffa43547edb4 Open Delete
%25253F%23i8c18088ea4d8dd4d6e5e986bceed35da Open Delete
%25253F%23ibcac9f4c58199eeaa7ba5c7750b8434b Open Delete
%25253F%23ic3ee8978c60737ab5d058b5a3f6a1b09 Open Delete
%2527 Open Delete
%2528orph%25C3%25A9e%2529 Open Delete
%253Csdsads Open Delete
%253F#i8c18088ea4d8dd4d6e5e986bceed35da Open Delete
%253F#ibcac9f4c58199eeaa7ba5c7750b8434b Open Delete
%25C3%25B1sfkjaldsa 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
%C3%83%C2%83%C3%82%C2%83%C3%83%C2%82%C3%82%C2%B1lkjlkj Open Delete
%C3%83%C2%B1sfkjaldsa Open Delete
%D1%82%D0%B5%D1%81%D1%82 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
001122334455 Open Delete
01233 Open Delete
10 Open Delete
1000-1 Open Delete
11#i5784b3886628c4362594ffa43547edb4 Open Delete
11#i8c18088ea4d8dd4d6e5e986bceed35da Open Delete
11#ic3ee8978c60737ab5d058b5a3f6a1b09 Open Delete
11%23i8c18088ea4d8dd4d6e5e986bceed35da Open Delete
1111#i5784b3886628c4362594ffa43547edb4 Open Delete
1111#ibcac9f4c58199eeaa7ba5c7750b8434b Open Delete
1111#ic3ee8978c60737ab5d058b5a3f6a1b09 Open Delete
1111#ie025efbbb0738ed01a63b326c174233e Open Delete
1111%23i1097c8b84b58a65ed6ec7b4f0da3ab67 Open Delete
1111%23i1dcd1cbb0d8eeb1fd3a32dc2aa9c8013 Open Delete
1111%23i8c18088ea4d8dd4d6e5e986bceed35da Open Delete
1111%23ie025efbbb0738ed01a63b326c174233e Open Delete
11111111111111 Open Delete
1111111111111111111111111111111111#i1dcd1cbb0d8eeb1fd3a32dc2aa9c8013 Open Delete
1111111111111111111111111111111111#i27992875ec4286a24e569b1e015b0473 Open Delete
1111111111111111111111111111111111#i5784b3886628c4362594ffa43547edb4 Open Delete
1111111111111111111111111111111111%23i5784b3886628c4362594ffa43547edb4 Open Delete
1111111111111111111111111111111111%23i8c18088ea4d8dd4d6e5e986bceed35da Open Delete
1111111111111111111111111111111111%23ic3ee8978c60737ab5d058b5a3f6a1b09 Open Delete
11111111aaa Open Delete
1121 Open Delete
121113aaaaa Open Delete
122 Open Delete
1231 Open Delete
123123 Open Delete
12345 Open Delete
123blue Open Delete
1241 Open Delete
1525 Open Delete
1aa Open Delete
2 Open Delete
222 Open Delete
2222 example Open Delete
2222%2520example Open Delete
222222 Open Delete
3 Open Delete
32 Open Delete
454 Open Delete
5 Open Delete
63 Open Delete
7 Open Delete
8889 Open Delete
8899 Open Delete
969 Open Delete
a Open Delete
☘ Cela fonctionne ☘ Open Delete
a Lorenz Open Delete
a%20Lorenz Open Delete
a2 Open Delete
aa Open Delete
Aaa Open Delete
aaaaaa Open Delete
aaaaaaaaaaaaa Open Delete
aaaaaaaaaaaaaa Open Delete
aaaaaaaaaaaaaa22 Open Delete
aaaaaaaaaaaaaaaaaaaaaaaaaa Open Delete
тест Open Delete
aaamine22222 Open Delete
aaamine22222%23i1dcd1cbb0d8eeb1fd3a32dc2aa9c8013 Open Delete
aaamine22222%23i5784b3886628c4362594ffa43547edb4 Open Delete
aasdasd Open Delete
ad Open Delete
AlgoSucks Open Delete
Alpha Open Delete
array%20new Open Delete
Array2 Open Delete
as Open Delete
asaasexample Open Delete
asas Open Delete
asD Open Delete
asda Open Delete
asdas Open Delete
asdasd Open Delete
asdasd#ibcac9f4c58199eeaa7ba5c7750b8434b Open Delete
asdasd#ic3ee8978c60737ab5d058b5a3f6a1b09 Open Delete
asdasd#ie025efbbb0738ed01a63b326c174233e Open Delete
asdasd%23i5784b3886628c4362594ffa43547edb4 Open Delete
asdasd%23ibcac9f4c58199eeaa7ba5c7750b8434b Open Delete
asdasd%23ic3ee8978c60737ab5d058b5a3f6a1b09 Open Delete
asdasd%23ie025efbbb0738ed01a63b326c174233e Open Delete
asdasdadasd Open Delete
asdasdadasd#i1dcd1cbb0d8eeb1fd3a32dc2aa9c8013 Open Delete
asdasdadasd#i21ef661e2506d5d0e513dce166c17d49 Open Delete
asdasdadasd#i27992875ec4286a24e569b1e015b0473 Open Delete
asdasdadasd#ibcac9f4c58199eeaa7ba5c7750b8434b Open Delete
asdasdadasd#ie025efbbb0738ed01a63b326c174233e Open Delete
asds Open Delete
az Open Delete
azazaz Open Delete
azerty Open Delete
azerty%27A=0 Open Delete
b Open Delete
balala Open Delete
bam Open Delete
bbb Open Delete
bcvbcvb Open Delete
bdfdfdfdf Open Delete
bjfhj#ibcac9f4c58199eeaa7ba5c7750b8434b Open Delete
bjfhj%23i21ef661e2506d5d0e513dce166c17d49 Open Delete
bjfhj%23i27992875ec4286a24e569b1e015b0473 Open Delete
bjfhj%23ic3ee8978c60737ab5d058b5a3f6a1b09 Open Delete
bjfhj%23ie025efbbb0738ed01a63b326c174233e Open Delete
blah#i1dcd1cbb0d8eeb1fd3a32dc2aa9c8013 Open Delete
blah#i21ef661e2506d5d0e513dce166c17d49 Open Delete
blah#i5784b3886628c4362594ffa43547edb4 Open Delete
blah#i8c18088ea4d8dd4d6e5e986bceed35da Open Delete
blah#ie025efbbb0738ed01a63b326c174233e Open Delete
blah%23i1097c8b84b58a65ed6ec7b4f0da3ab67 Open Delete
blah%23i1dcd1cbb0d8eeb1fd3a32dc2aa9c8013 Open Delete
blah%23ic3ee8978c60737ab5d058b5a3f6a1b09 Open Delete
born Open Delete
bxvbvx Open Delete
Caracas222 Open Delete
Caracas222666 Open Delete
cdcdc Open Delete
Christos Open Delete
cnes Open Delete
colombo Open Delete
cool Open Delete
crap Open Delete
cvSDFSD Open Delete
cx<wc'A=0 Open Delete
D Open Delete
D#i21ef661e2506d5d0e513dce166c17d49 Open Delete
D%20happy%202018 Open Delete
D%23i21ef661e2506d5d0e513dce166c17d49 Open Delete
D%23i5784b3886628c4362594ffa43547edb4 Open Delete
D%23i8c18088ea4d8dd4d6e5e986bceed35da Open Delete
dasd Open Delete
dasdsad Open Delete
dd Open Delete
ddddd Open Delete
dddddddddddddddddddddd Open Delete
delete_empty Open Delete
dfa Open Delete
dfa#i27992875ec4286a24e569b1e015b0473 Open Delete
dfa#i5784b3886628c4362594ffa43547edb4 Open Delete
dfa#ibcac9f4c58199eeaa7ba5c7750b8434b Open Delete
dfa#ic3ee8978c60737ab5d058b5a3f6a1b09 Open Delete
dfa#ie025efbbb0738ed01a63b326c174233e Open Delete
dfa%23i8c18088ea4d8dd4d6e5e986bceed35da Open Delete
dfty Open Delete
dfvds Open Delete
diarill Open Delete
diego Open Delete
drgd Open Delete
dsds Open Delete
e Open Delete
eeeeee Open Delete
ejemplito 2 Open Delete
ejemplo 2017 Open Delete
ejemplo%202017-11-23 Open Delete
eqweqwe Open Delete
er Open Delete
erwgfuıgj8hlı Open Delete
erwgfuıgj8hlı Open Delete
ewe Open Delete
example Open Delete
example Radu Open Delete
example%20exam Open Delete
example%2520exam Open Delete
example+exam Open Delete
example123 Open Delete
example123#ibcac9f4c58199eeaa7ba5c7750b8434b Open Delete
example123%23i21ef661e2506d5d0e513dce166c17d49 Open Delete
example123%23i27992875ec4286a24e569b1e015b0473 Open Delete
example123%23i8c18088ea4d8dd4d6e5e986bceed35da Open Delete
example2 Open Delete
example2222222 Open Delete
example22222222222222 Open Delete
exampleasfsafa Open Delete
exampleasfsafasf Open Delete
exampleasfsafasf#i1dcd1cbb0d8eeb1fd3a32dc2aa9c8013 Open Delete
exampleasfsafasf#i27992875ec4286a24e569b1e015b0473 Open Delete
exampleasfsafasf%23ie025efbbb0738ed01a63b326c174233e Open Delete
exampleaz Open Delete
exampled Open Delete
exampledsdsdd Open Delete
exampledsdsdda Open Delete
examplee Open Delete
exampleede Open Delete
examplemmmm Open Delete
examplenhnhd Open Delete
exampleqzd Open Delete
exampleRW Open Delete
examplesadasdsdsad Open Delete
examplesafs Open Delete
examplesafs;af;sfsf Open Delete
examplesafsafsfsf Open Delete
examplesdddd Open Delete
exampleu Open Delete
examplexzasca Open Delete
examqdqsple Open Delete
Existing arr Open Delete
Existing%20arrays: Open Delete
Existing%2520arrays: Open Delete
exkiample Open Delete
fasdfasf Open Delete
fat Open Delete
fdf Open Delete
fdf#i1097c8b84b58a65ed6ec7b4f0da3ab67 Open Delete
fdf#i21ef661e2506d5d0e513dce166c17d49 Open Delete
fdf#i5784b3886628c4362594ffa43547edb4 Open Delete
fdf%23i1dcd1cbb0d8eeb1fd3a32dc2aa9c8013 Open Delete
fdf%23ibcac9f4c58199eeaa7ba5c7750b8434b Open Delete
fdf%23ic3ee8978c60737ab5d058b5a3f6a1b09 Open Delete
fdg Open Delete
fdgfdgfdgfdgfd Open Delete
fdgfgsdf Open Delete
ffff Open Delete
fgdfgfg Open Delete
fgfdg Open Delete
fgfdgdgdf Open Delete
fgfdgfdgdg Open Delete
fghjk, Open Delete
fgjgh Open Delete
fgt Open Delete
fro Open Delete
fsda Open Delete
gdfg#i1097c8b84b58a65ed6ec7b4f0da3ab67 Open Delete
gdfg#i27992875ec4286a24e569b1e015b0473 Open Delete
gdfg%23i5784b3886628c4362594ffa43547edb4 Open Delete
gdfg%23ic3ee8978c60737ab5d058b5a3f6a1b09 Open Delete
geht nicht Open Delete
gg Open Delete
gg'A=0 Open Delete
gg%27A=0 Open Delete
ggg Open Delete
ghjk#i1097c8b84b58a65ed6ec7b4f0da3ab67 Open Delete
ghjk#i1dcd1cbb0d8eeb1fd3a32dc2aa9c8013 Open Delete
ghjk#i27992875ec4286a24e569b1e015b0473 Open Delete
ghjk#ic3ee8978c60737ab5d058b5a3f6a1b09 Open Delete
ghjk#ie025efbbb0738ed01a63b326c174233e Open Delete
ghjk%23i8c18088ea4d8dd4d6e5e986bceed35da Open Delete
ghk Open Delete
ghkjgykg Open Delete
Group B Open Delete
Group C Open Delete
Group%252BC Open Delete
Group%252BC%23i1dcd1cbb0d8eeb1fd3a32dc2aa9c8013 Open Delete
Group%252BC%23i5784b3886628c4362594ffa43547edb4 Open Delete
Group%252BC%23ibcac9f4c58199eeaa7ba5c7750b8434b Open Delete
Group%2BC#i27992875ec4286a24e569b1e015b0473 Open Delete
Group%2BC#i5784b3886628c4362594ffa43547edb4 Open Delete
Group+C Open Delete
gtgt Open Delete
gufc fucvuy dd Open Delete
gufc%20fucvuy Open Delete
hahah Open Delete
hbhbhb Open Delete
Hello%20World%20! Open Delete
heof Open Delete
HEYY%2520:D#i1097c8b84b58a65ed6ec7b4f0da3ab67 Open Delete
HEYY%2520:D#i27992875ec4286a24e569b1e015b0473 Open Delete
HEYY%2520:D#i5784b3886628c4362594ffa43547edb4 Open Delete
HEYY%2520:D#i8c18088ea4d8dd4d6e5e986bceed35da Open Delete
HEYY%2520:D#ibcac9f4c58199eeaa7ba5c7750b8434b Open Delete
HEYY%2520:D#ie025efbbb0738ed01a63b326c174233e Open Delete
HEYY%252520:D%23i1097c8b84b58a65ed6ec7b4f0da3ab67 Open Delete
HEYY%252520:D%23i1dcd1cbb0d8eeb1fd3a32dc2aa9c8013 Open Delete
HEYY%252520:D%23i27992875ec4286a24e569b1e015b0473 Open Delete
HEYY%252520:D%23i5784b3886628c4362594ffa43547edb4 Open Delete
HEYY%252520:D%23i8c18088ea4d8dd4d6e5e986bceed35da Open Delete
hg Open Delete
hgfh Open Delete
hgjgjh Open Delete
hhh Open Delete
hjh Open Delete
hjvhj Open Delete
ho Open Delete
how to fight insomnia naturallyTa mere la grosse choin Open Delete
hrthrh Open Delete
i Open Delete
iii Open Delete
ilesh Open Delete
interest Open Delete
iooi Open Delete
itemList Open Delete
iujjj Open Delete
iuy Open Delete
jbnn Open Delete
jhj Open Delete
jk Open Delete
jkjk Open Delete
jtujjk Open Delete
kappa Open Delete
kfhk Open Delete
khj Open Delete
khj#i1dcd1cbb0d8eeb1fd3a32dc2aa9c8013 Open Delete
khj#i27992875ec4286a24e569b1e015b0473 Open Delete
khj#i8c18088ea4d8dd4d6e5e986bceed35da Open Delete
khj#ibcac9f4c58199eeaa7ba5c7750b8434b Open Delete
khj%23ic3ee8978c60737ab5d058b5a3f6a1b09 Open Delete
kjh AND 2060=2060 Open Delete
kjh AND 2171=2112-- yWqk Open Delete
kjh AND 2675=9406 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(122)||CHR(120)||CHR(113)) AS NUMERIC) 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)-- Kpcm 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 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) 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 9650=6116 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)))-- IHOP Open Delete
kjh AND EXTRACTVALUE(7241,CONCAT(0x5c,0x717a6b7871,(SELECT (ELT(7241=7241,1))),0x716a6b7a71))-- fAHu Open Delete
kjh,),..('") Open Delete
kjh,),..('"). 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) FROM DUAL)||CHR(113)||CHR(106)||CHR(107)||CHR(122)||CHR(113)||CHR(62))) FROM DUAL) AND 'HwZm'='HwZm 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' ORDER BY 1-- Aifn Open Delete
kjh') AND 1448=9534 AND ('TzXm'='TzXm Open Delete
kjh') AND 2060=2060 AND ('JwAk'='JwAk Open Delete
kjh') AND 6019=4131 AND ('fWIB'='fWIB Open Delete
kjh') AND 7426=7426 AND ('cRTV'='cRTV 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 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 ('drpH'='drpH Open Delete
kjh') AND EXTRACTVALUE(7241,CONCAT(0x5c,0x717a6b7871,(SELECT (ELT(7241=7241,1))),0x716a6b7a71)) AND ('oZSA'='oZSA Open Delete
kjh') ORDER BY 1-- osYG Open Delete
kjh'FIFazt<'">kJJxrd Open Delete
kjh'vKJjiT<'">dxPGFb 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 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 9930=6330 AND (9057=9057 Open Delete
kjh) ORDER BY 1-- McOI Open Delete
kjh%20AND%20EXTRACTVALUE%287241,CONCAT%280x5c,0x717a6b7871,%28SELECT%20%28ELT%287241=7241,1%29%29%29,0x716a6b7a71%29%29 Open Delete
kjh%20AND%20EXTRACTVALUE%287241,CONCAT%280x5c,0x717a6b7871,%28SELECT%20%28ELT%287241=7241,1%29%29%29,0x716a6b7a71%29%29--%20fAHu Open Delete
kjh%27%20AND%202060=2060%20AND%20%27JKZh%27=%27JKZh 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%20ORDER%20BY%201--%20Aifn 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%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%29%20AND%208864=CAST%28%28CHR%28113%29%7C%7CCHR%28122%29%7C%7CCHR%28107%29%7C%7CCHR%28120%29%7C%7CCHR%28113%29%29%7C%7C%28SELECT%20%28CASE%20WHEN%20%288864=8864%29%20THEN%201%20ELSE%200%20END%29%29::text%7C%7C%28CHR%28113%29%7C%7CCHR%28106%29%7C%7CCHR Open Delete
kjh%29%20AND%209930=6330%20AND%20%289057=9057 Open Delete
kjkjkj Open Delete
kk Open Delete
kkik Open Delete
kkk Open Delete
kkk#i8c18088ea4d8dd4d6e5e986bceed35da Open Delete
kkk%23i27992875ec4286a24e569b1e015b0473 Open Delete
kkk%23ibcac9f4c58199eeaa7ba5c7750b8434b Open Delete
kkk%23ic3ee8978c60737ab5d058b5a3f6a1b09 Open Delete
kkk%23ie025efbbb0738ed01a63b326c174233e Open Delete
kljlk Open Delete
klklklkl Open Delete
kln Open Delete
kmkm Open Delete
kpok Open Delete
kpok%25C2%25B4p Open Delete
kpok%C3%82%C2%B4p Open Delete
l Open Delete
lkjlkj Open Delete
ll Open Delete
llllllllllllllll Open Delete
lolo Open Delete
Lorenz du Open Delete
loslos Open Delete
Lundi Open Delete
m Open Delete
mardi Open Delete
miTest Open Delete
mjn Open Delete
mkmkmk Open Delete
moiGHOY - Resources/views/Advanced/doctrine-them Open Delete
moj Open Delete
mon exemple Open Delete
mon tableau Open Delete
mon%20putain%20de%20tableau Open Delete
mon%20tableau Open Delete
mon%2520tableau Open Delete
mp Open Delete
Mumbojumbo Open Delete
my_array Open Delete
тест Open Delete
new Open Delete
new test Open Delete
new_22 Open Delete
New_test_2017-03_03 Open Delete
new%252520test Open Delete
nmn%23i1dcd1cbb0d8eeb1fd3a32dc2aa9c8013 Open Delete
nmn%23i27992875ec4286a24e569b1e015b0473 Open Delete
nmn%23i8c18088ea4d8dd4d6e5e986bceed35da Open Delete
nnn Open Delete
nnnnn Open Delete
Nouveau Open Delete
o Open Delete
o%C4%B1 Open Delete
oı Open Delete
oı Open Delete
oezjfez Open Delete
ojkj Open Delete
Ouiiiiiiiiiiii Open Delete
Ouiiiiiiiiiiiiiiiiiiiiiiiilul Open Delete
PC Open Delete
peppo Open Delete
perebetes Open Delete
perses%23i1097c8b84b58a65ed6ec7b4f0da3ab67 Open Delete
perses%23i21ef661e2506d5d0e513dce166c17d49 Open Delete
perses%23ie025efbbb0738ed01a63b326c174233e Open Delete
pppppii#i5784b3886628c4362594ffa43547edb4 Open Delete
pppppii%23i21ef661e2506d5d0e513dce166c17d49 Open Delete
pppppii%23i27992875ec4286a24e569b1e015b0473 Open Delete
pppppii%23i5784b3886628c4362594ffa43547edb4 Open Delete
pppppii%23ie025efbbb0738ed01a63b326c174233e Open Delete
pppppp Open Delete
Premier element de test Open Delete
Product Open Delete
project+1 Open Delete
Putin Open Delete
qqq Open Delete
Qqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwweeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeerrrrrrr Open Delete
qsd Open Delete
qsdfqsdf Open Delete
quantite%20--1 Open Delete
qwe Open Delete
qwehgnhngh Open Delete
qwerqwerqw Open Delete
r Open Delete
resr Open Delete
RET Open Delete
rfermkferkmfe Open Delete
rrgf Open Delete
rrr Open Delete
rrrr Open Delete
rrrr#ibcac9f4c58199eeaa7ba5c7750b8434b Open Delete
rrrr#ic3ee8978c60737ab5d058b5a3f6a1b09 Open Delete
rrrr%23i1dcd1cbb0d8eeb1fd3a32dc2aa9c8013 Open Delete
rrrr%23ibcac9f4c58199eeaa7ba5c7750b8434b Open Delete
sa Open Delete
saassa Open Delete
sad Open Delete
salut%20les%20gens Open Delete
sam Open Delete
sample Open Delete
sd Open Delete
sdasd Open Delete
sdasdafs Open Delete
sdfsdf Open Delete
sdfsdfsd Open Delete
sdsd'A=0 Open Delete
sdsd%27A=0 Open Delete
seeme Open Delete
seeme#i1dcd1cbb0d8eeb1fd3a32dc2aa9c8013 Open Delete
seeme#i5784b3886628c4362594ffa43547edb4 Open Delete
seeme#ibcac9f4c58199eeaa7ba5c7750b8434b Open Delete
seeme%23i27992875ec4286a24e569b1e015b0473 Open Delete
seeme%23i8c18088ea4d8dd4d6e5e986bceed35da Open Delete
seeme%23ie025efbbb0738ed01a63b326c174233e Open Delete
sfsa Open Delete
someNewArray#i1dcd1cbb0d8eeb1fd3a32dc2aa9c8013 Open Delete
someNewArray#i5784b3886628c4362594ffa43547edb4 Open Delete
someNewArray%23i1097c8b84b58a65ed6ec7b4f0da3ab67 Open Delete
someNewArray%23i27992875ec4286a24e569b1e015b0473 Open Delete
someNewArray%23i5784b3886628c4362594ffa43547edb4 Open Delete
ss Open Delete
suck my co Open Delete
t Open Delete
Ta mere la grosse choin 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#i1097c8b84b58a65ed6ec7b4f0da3ab67 Open Delete
Ta%2520mere%2520la%2520grosse%2520choin#i1dcd1cbb0d8eeb1fd3a32dc2aa9c8013 Open Delete
Ta%2520mere%2520la%2520grosse%2520choin#i27992875ec4286a24e569b1e015b0473 Open Delete
Ta%2520mere%2520la%2520grosse%2520choin#ibcac9f4c58199eeaa7ba5c7750b8434b Open Delete
Ta%2520mere%2520la%2520grosse%2520choin#ic3ee8978c60737ab5d058b5a3f6a1b09 Open Delete
Ta%252520mere%252520la%252520grosse%252520choin%23i1dcd1cbb0d8eeb1fd3a32dc2aa9c8013 Open Delete
Ta%252520mere%252520la%252520grosse%252520choin%23i27992875ec4286a24e569b1e015b0473 Open Delete
Ta%252520mere%252520la%252520grosse%252520choin%23i8c18088ea4d8dd4d6e5e986bceed35da Open Delete
Ta%252520mere%252520la%252520grosse%252520choin%23ie025efbbb0738ed01a63b326c174233e Open Delete
terst Open Delete
test array Open Delete
test34 Open Delete
test34'A=0 Open Delete
Teste Open Delete
teste2 Open Delete
TESTEN Open Delete
testing Open Delete
testN17 Open Delete
testname Open Delete
testsetse Open Delete
tesy Open Delete
tet Open Delete
Thais Open Delete
the Open Delete
the test Open Delete
tojo Open Delete
trololo Open Delete
try01 Open Delete
tset Open Delete
tttttz Open Delete
ui Open Delete
ukh Open Delete
undefined Open Delete
uuu Open Delete
Vai%20que%20da Open Delete
vcbbc Open Delete
vdsvd Open Delete
vffv Open Delete
Volta Di Open Delete
Volta Dilma Fo Open Delete
Volta%20Di Open Delete
Volta%252 Open Delete
Volta%2520Di Open Delete
Volta%2520Dilma%2520Fo Open Delete
Volta%2520Dilma%2520Fora% Open Delete
Volta%2520Dilma%2520Fora%2520Temer#i2 Open Delete
Volta%2520Dilma%2520Fora%2520Temer#i27992875ec4286a24e569b1e015b0473 Open Delete
Volta%2520Dilma%2520Fora%2520Temer#i5784b3886628c4362594ffa43547edb4 Open Delete
Volta%2520Dilma%2520Fora%2520Temer#ie025efbbb0738ed01a63b326c174233e Open Delete
Volta%252520Dilma%252520Fo Open Delete
Volta%252520Dilma%252520Fora%252520Temer%23i21ef661e2506d5d0e513dce16 Open Delete
Volta%252520Dilma%252520Fora%252520Temer%23ic3ee8978c60737ab5d058b5a3f6a1b09 Open Delete
VRE Open Delete
wasda Open Delete
why%20doctrine Open Delete
why%20doctrine%20on%20delete%20not%20work Open Delete
Woop%20wooop Open Delete
Woop%2520wooop Open Delete
wqeqe Open Delete
wsh%20yannito Open Delete
ww Open Delete
Xbox Series X > PS5 Open Delete
xvvsdf Open Delete
xy Open Delete
xzcvxcv Open Delete
yfcx Open Delete
yiktikrtr Open Delete
zizizizizi 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