Advanced usage: example with Doctrine

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

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

Array name:
Add an element...

Existing arrays:
Name Open Delete
_ Open Delete
___ ☘ Cela fonctionne ☘ Open Delete
___ ☘ Cela fonctionne à Open Delete
___ ☘ Cela fonctionne ☠Open Delete
_____ Open Delete
__________________________________________ Open Delete
_________AAAAAAAAAAAAA_______ Open Delete
_________coucou Open Delete
__EDLP_7-0_ Open Delete
Open Delete
_Greeting, :D happy 2018 Open Delete
_Greeting,%20:D%20happy%202018 Open Delete
---#i1dcd1cbb0d8eeb1fd3a32dc2aa9c8013 Open Delete
---#i21ef661e2506d5d0e513dce166c17d49 Open Delete
---#i27992875ec4286a24e569b1e015b0473 Open Delete
---#i5784b3886628c4362594ffa43547edb4 Open Delete
---%23i1097c8b84b58a65ed6ec7b4f0da3ab67 Open Delete
---%23i1dcd1cbb0d8eeb1fd3a32dc2aa9c8013 Open Delete
' Open Delete
() Open Delete
(orphée) Open Delete
(SELECT (CASE WHEN (4626=9556) THEN 'kjh' ELSE (SELECT 9556 UNION SELECT 9237) END)) Open Delete
(SELECT (CASE WHEN (6190=5092) THEN 'kjh' ELSE (SELECT 5092 UNION SELECT 3869) END)) Open Delete
@12 Open Delete
#72uuuu Open Delete
#91 Open Delete
%23456 Open Delete
%25231 Open Delete
%252372uuuu Open Delete
%252372uuuu#i27992875ec4286a24e569b1e015b0473 Open Delete
%252391 Open Delete
%2525237233333 Open Delete
%2525237233333%23i1dcd1cbb0d8eeb1fd3a32dc2aa9c8013 Open Delete
%2525237233333%23i27992875ec4286a24e569b1e015b0473 Open Delete
%25252372uuuu%23i27992875ec4286a24e569b1e015b0473 Open Delete
%25253F%23i1097c8b84b58a65ed6ec7b4f0da3ab67 Open Delete
%25253F%23i21ef661e2506d5d0e513dce166c17d49 Open Delete
%253F#i1dcd1cbb0d8eeb1fd3a32dc2aa9c8013 Open Delete
%253F#i27992875ec4286a24e569b1e015b0473 Open Delete
%253F#ie025efbbb0738ed01a63b326c174233e Open Delete
%25C3%25B1lkjlkj Open Delete
%27rtrt Open Delete
%C3%83%C2%83%C3%82%C2%83%C3%83%C2%82%C3%82%C2%B1lkjlkj Open Delete
%C3%83%C2%83%C3%82%C2%B1sfkjaldsa Open Delete
%C3%83%C2%B1sf 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
01233 Open Delete
11#i21ef661e2506d5d0e513dce166c17d49 Open Delete
11%23i27992875ec4286a24e569b1e015b0473 Open Delete
1111#i1097c8b84b58a65ed6ec7b4f0da3ab67 Open Delete
1111#i21ef661e2506d5d0e513dce166c17d49 Open Delete
1111#i27992875ec4286a24e569b1e015b0473 Open Delete
1111#ie025efbbb0738ed01a63b326c174233e Open Delete
1111%23i1dcd1cbb0d8eeb1fd3a32dc2aa9c8013 Open Delete
1111%23i27992875ec4286a24e569b1e015b0473 Open Delete
1111%23i5784b3886628c4362594ffa43547edb4 Open Delete
11111111111111 Open Delete
1111111111111111111111111111111111#i21ef661e2506d5d0e513dce166c17d49 Open Delete
1111111111111111111111111111111111#i8c18088ea4d8dd4d6e5e986bceed35da Open Delete
1111111111111111111111111111111111#ibcac9f4c58199eeaa7ba5c7750b8434b Open Delete
1111111111111111111111111111111111#ie025efbbb0738ed01a63b326c174233e Open Delete
1111111111111111111111111111111111%23i8c18088ea4d8dd4d6e5e986bceed35da Open Delete
1111111111111111111111111111111111%23ie025efbbb0738ed01a63b326c174233e Open Delete
11111111aaa Open Delete
12 Open Delete
121113 Open Delete
122 Open Delete
123blue Open Delete
1241 Open Delete
2 Open Delete
32 Open Delete
4545 Open Delete
456 Open Delete
8889 Open Delete
969 Open Delete
☘ Cela fonctionne ☘ Open Delete
a%20Lorenz Open Delete
ñsf Open Delete
☘ Cela fonctionne ☘ Open Delete
A1 Open Delete
aa Open Delete
ñlkjlkj Open Delete
aaa Open Delete
ñsfkjaldsa Open Delete
aaaaaaaaaaaaa Open Delete
aaaaaaaaaaaaaa Open Delete
тест Open Delete
aaamine22222#i1097c8b84b58a65ed6ec7b4f0da3ab67 Open Delete
aaamine22222#ic3ee8978c60737ab5d058b5a3f6a1b09 Open Delete
aaamine22222%23i1dcd1cbb0d8eeb1fd3a32dc2aa9c8013 Open Delete
aaamine22222%23i8c18088ea4d8dd4d6e5e986bceed35da Open Delete
aaamine22222%23ic3ee8978c60737ab5d058b5a3f6a1b09 Open Delete
aarzarzample Open Delete
abc Open Delete
adfadf'A=0 Open Delete
adfadf%27A=0 Open Delete
adrian Open Delete
array%20new Open Delete
array%2520new Open Delete
Array2 Open Delete
asd asd asd Open Delete
asdaexample Open Delete
asdas Open Delete
asdasd#i21ef661e2506d5d0e513dce166c17d49 Open Delete
asdasd%23i5784b3886628c4362594ffa43547edb4 Open Delete
asdasdadasd Open Delete
asdasdadasd#i27992875ec4286a24e569b1e015b0473 Open Delete
asdasdadasd#ic3ee8978c60737ab5d058b5a3f6a1b09 Open Delete
asdasdadasd%23i5784b3886628c4362594ffa43547edb4 Open Delete
asdfasdfasd8888 Open Delete
asdfg Open Delete
bc Open Delete
bjfhj Open Delete
bjfhj#i1097c8b84b58a65ed6ec7b4f0da3ab67 Open Delete
bjfhj#i21ef661e2506d5d0e513dce166c17d49 Open Delete
bjfhj#ic3ee8978c60737ab5d058b5a3f6a1b09 Open Delete
bjfhj%23i21ef661e2506d5d0e513dce166c17d49 Open Delete
blah Open Delete
blah#ie025efbbb0738ed01a63b326c174233e Open Delete
blah%23i1dcd1cbb0d8eeb1fd3a32dc2aa9c8013 Open Delete
blah%23i8c18088ea4d8dd4d6e5e986bceed35da Open Delete
blah%23ibcac9f4c58199eeaa7ba5c7750b8434b Open Delete
blah%23ie025efbbb0738ed01a63b326c174233e Open Delete
Cmucik Open Delete
colombo Open Delete
cool Open Delete
cx%3Cwc Open Delete
cx%3Cwc%27A=0 Open Delete
cx<wc Open Delete
cxcxx Open Delete
D#i1dcd1cbb0d8eeb1fd3a32dc2aa9c8013 Open Delete
D#i21ef661e2506d5d0e513dce166c17d49 Open Delete
D#i27992875ec4286a24e569b1e015b0473 Open Delete
D#i5784b3886628c4362594ffa43547edb4 Open Delete
D#i8c18088ea4d8dd4d6e5e986bceed35da Open Delete
D%20happy%202018 Open Delete
D%23i1097c8b84b58a65ed6ec7b4f0da3ab67 Open Delete
D%23i5784b3886628c4362594ffa43547edb4 Open Delete
D%23ie025efbbb0738ed01a63b326c174233e Open Delete
dasf Open Delete
Demo Open Delete
dfa#i27992875ec4286a24e569b1e015b0473 Open Delete
dfa%23i27992875ec4286a24e569b1e015b0473 Open Delete
dfa%23ibcac9f4c58199eeaa7ba5c7750b8434b Open Delete
dfa%23ic3ee8978c60737ab5d058b5a3f6a1b09 Open Delete
dftydfty Open Delete
dfzre Open Delete
dgh Open Delete
dsadsadd Open Delete
dsds Open Delete
dsvfdsfg] Open Delete
ejemplito 2 Open Delete
ejemplo 2 Open Delete
ejemplo 2017-11-23 Open Delete
ejemplo%202017 Open Delete
er Open Delete
exam Open Delete
example Delete
example exam Open Delete
example123 Open Delete
example123#i1dcd1cbb0d8eeb1fd3a32dc2aa9c8013 Open Delete
example123%23i1097c8b84b58a65ed6ec7b4f0da3ab67 Open Delete
example4 Open Delete
exampleasfsafa Open Delete
exampleasfsafasf Open Delete
exampleasfsafasf%23i21ef661e2506d5d0e513dce166c17d49 Open Delete
exampleasfsafasf%23i27992875ec4286a24e569b1e015b0473 Open Delete
exampledsdsdda Open Delete
exampledsdsddasds,sad,a,d,as,d,asd,asd Open Delete
exampleeeeeeeeeeeee Open Delete
examplemmm Open Delete
examplemmmm Open Delete
examplesadas Open Delete
examplesadfasfasdf Open Delete
examplesafsaf Open Delete
examplesdsd Open Delete
exampless Open Delete
exampletestsf%20sdf%20sd%20sd Open Delete
examplevbnvnhv Open Delete
examplexzasca Open Delete
exdedededdedeeample Open Delete
Fda Open Delete
fdf#i1dcd1cbb0d8eeb1fd3a32dc2aa9c8013 Open Delete
fdf%23i5784b3886628c4362594ffa43547edb4 Open Delete
ff%20d Open Delete
fff Open Delete
fg Open Delete
fgfdg Open Delete
fgt Open Delete
firrra Open Delete
fro Open Delete
fsda Open Delete
gbfgbf Open Delete
gdfg#ibcac9f4c58199eeaa7ba5c7750b8434b Open Delete
gdfg%23i27992875ec4286a24e569b1e015b0473 Open Delete
geht%20nicht Open Delete
gfdgdf Open Delete
gg'A=0 Open Delete
ghfhgfg Open Delete
ghgtytyt Open Delete
ghj Open Delete
ghjk#ibcac9f4c58199eeaa7ba5c7750b8434b Open Delete
ghjk#ic3ee8978c60737ab5d058b5a3f6a1b09 Open Delete
Group%252BC%23i21ef661e2506d5d0e513dce166c17d49 Open Delete
Group%2BC#i5784b3886628c4362594ffa43547edb4 Open Delete
Group%2BC#i8c18088ea4d8dd4d6e5e986bceed35da Open Delete
gtgt Open Delete
gufc fucvuy Open Delete
gufc fucvuy dd Open Delete
hahah Open Delete
Hello World ! Open Delete
Hello%2520World%2520! Open Delete
hellowrld Open Delete
heof Open Delete
HEYY%2520:D#i5784b3886628c4362594ffa43547edb4 Open Delete
HEYY%2520:D#ibcac9f4c58199eeaa7ba5c7750b8434b Open Delete
HEYY%252520:D%23i8c18088ea4d8dd4d6e5e986bceed35da Open Delete
HEYY%252520:D%23ie025efbbb0738ed01a63b326c174233e Open Delete
hg Open Delete
hjvhj Open Delete
how to fight insomnia naturallyTa%20mere%20la%20grosse%20choin Open Delete
http Open Delete
interest Open Delete
ismail Open Delete
iuy Open Delete
jk Open Delete
jkjk Open Delete
jtujjk Open Delete
julio Open Delete
khj#i1dcd1cbb0d8eeb1fd3a32dc2aa9c8013 Open Delete
khj#i8c18088ea4d8dd4d6e5e986bceed35da Open Delete
khj#ic3ee8978c60737ab5d058b5a3f6a1b09 Open Delete
khj#ie025efbbb0738ed01a63b326c174233e Open Delete
khj%23ibcac9f4c58199eeaa7ba5c7750b8434b Open Delete
kiki Open Delete
kjh Open Delete
kjh AND 2935=5884-- JseU 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 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 ORDER BY 1-- MwCf Open Delete
kjh ORDER BY 1-- rvnA Open Delete
kjh' AND 2561=2906 AND 'dQSK'='dQSK Open Delete
kjh' AND 5727=1498 AND 'nmqQ'='nmqQ Open Delete
kjh' AND 7426=7426 AND 'Fjlg'='Fjlg 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' AND EXTRACTVALUE(5914,CONCAT(0x5c,0x716a6a7671,(SELECT (ELT(5914=5914,1))),0x71717a7871)) AND 'GCxm'='GCxm Open Delete
kjh' AND EXTRACTVALUE(7241,CONCAT(0x5c,0x717a6b7871,(SELECT (ELT(7241=7241,1))),0x716a6b7a71)) AND 'NwvR'='NwvR Open Delete
kjh') AND 3055=4968 AND ('igun'='igun Open Delete
kjh') AND 6019=4131 AND ('fWIB'='fWIB Open Delete
kjh') ORDER BY 1-- IuaH Open Delete
kjh'vKJjiT<'">dxPGFb Open Delete
kjh) AND 2060=2060 AND (3370=3370 Open Delete
kjh) AND 3185=2112 AND (3791=3791 Open Delete
kjh) AND 7954=(SELECT UPPER(XMLType(CHR(60)||CHR(58)||CHR(113)||CHR(122)||CHR(107)||CHR(120)||CHR(113)||(SELECT (CASE WHEN (7954=7954) THEN 1 ELSE 0 END) FRO Open Delete
kjh) AND EXTRACTVALUE(5914,CONCAT(0x5c,0x716a6a7671,(SELECT (ELT(5914=5914,1))),0x71717a7871)) AND (9337=9337 Open Delete
kjh%20AND%202935=5884--%20JseU Open Delete
kjh%20AND%206285=CAST%28%28CHR%28113%29%7C%7CCHR%28106%29%7C%7CCHR%28106%29%7C%7CCHR%28118%29%7C%7CCHR%28113%29%29%7C%7C%28SELECT%20%28CASE%20WHEN%20%286285=6285%29%20THEN%201%20ELSE%200%20END%29%29::text%7C%7C%28CHR%28113%29%7C%7CCHR%28113%29%7C%7CCHR%28 Open Delete
kjh%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%20FROM%2 Open Delete
kjh%27%20ORDER%20BY%201--%20Aifn Open Delete
kjh%27%29%20AND%20EXTRACTVALUE%287241,CONCAT%280x5c,0x717a6b7871,%28SELECT%20%28ELT%287241=7241,1%29%29%29,0x716a6b7a71%29%29%20AND%20%28%27oZSA%27=%27oZSA Open Delete
kjh%27FIFazt%3C%27%22%3EkJJxrd 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
kkk#i1097c8b84b58a65ed6ec7b4f0da3ab67 Open Delete
kkk%23ie025efbbb0738ed01a63b326c174233e Open Delete
kln Open Delete
kool Open Delete
kpok Open Delete
kpok´p Open Delete
kpok%25C2%25B4p Open Delete
kpok%C3%82%C2%B4p Open Delete
kpok%C3%83%C2%82%C3%82%C2%B4p Open Delete
lel Open Delete
lkj Open Delete
lkjlkj Open Delete
lol Open Delete
Lorenz du Open Delete
Lorenz%20du%20 Open Delete
Lundi Open Delete
m Open Delete
Marcin Open Delete
medicion 2 Open Delete
mmm Open Delete
moiGHOY - Resources/views/Advanced/doctrine-them Open Delete
mon exemple Open Delete
myarr Open Delete
Names Open Delete
тест Open Delete
new test Open Delete
New_test_2017-03_03 Open Delete
New%2520Array Open Delete
nmn#i8c18088ea4d8dd4d6e5e986bceed35da Open Delete
nmn#ibcac9f4c58199eeaa7ba5c7750b8434b Open Delete
nmn%23i8c18088ea4d8dd4d6e5e986bceed35da Open Delete
Numeros%20de%20prueba Open Delete
o%25C4%25B1 Open Delete
o%C3%84%C2%B1 Open Delete
oij Open Delete
ok Open Delete
oui Open Delete
ouiou Open Delete
pablo Open Delete
Pepa Open Delete
peppo Open Delete
perses#i8c18088ea4d8dd4d6e5e986bceed35da Open Delete
perses%23i8c18088ea4d8dd4d6e5e986bceed35da Open Delete
perses%23ibcac9f4c58199eeaa7ba5c7750b8434b Open Delete
perses%23ic3ee8978c60737ab5d058b5a3f6a1b09 Open Delete
polo Open Delete
pornhub.com Open Delete
pppppii#i1dcd1cbb0d8eeb1fd3a32dc2aa9c8013 Open Delete
pppppii#i27992875ec4286a24e569b1e015b0473 Open Delete
pppppii%23i5784b3886628c4362594ffa43547edb4 Open Delete
pppppii%23ic3ee8978c60737ab5d058b5a3f6a1b09 Open Delete
Premier element de test Open Delete
project+1 Open Delete
punto%202 Open Delete
qe Open Delete
quantite --1 Open Delete
quantite%2520--1 Open Delete
qwerqwerqw Open Delete
qwert Open Delete
rerwrer Open Delete
RET Open Delete
rrr Open Delete
rrrr Open Delete
rrrr#i1dcd1cbb0d8eeb1fd3a32dc2aa9c8013 Open Delete
rrrr#i27992875ec4286a24e569b1e015b0473 Open Delete
rrrr#ibcac9f4c58199eeaa7ba5c7750b8434b Open Delete
rrrr#ic3ee8978c60737ab5d058b5a3f6a1b09 Open Delete
sad.asdasd.sdsad Open Delete
salut les Open Delete
samArray Open Delete
sdasd Open Delete
sdc Open Delete
sdfsdfsd Open Delete
sdsd Open Delete
sdsd'A=0 Open Delete
sdsd%27A=0 Open Delete
seeme#i1dcd1cbb0d8eeb1fd3a32dc2aa9c8013 Open Delete
seeme#ic3ee8978c60737ab5d058b5a3f6a1b09 Open Delete
seeme%23i21ef661e2506d5d0e513dce166c17d49 Open Delete
seeme%23i8c18088ea4d8dd4d6e5e986bceed35da Open Delete
seeme%23ibcac9f4c58199eeaa7ba5c7750b8434b Open Delete
seeme%23ie025efbbb0738ed01a63b326c174233e Open Delete
select Open Delete
sfsdfsd Open Delete
someNewArray#i8c18088ea4d8dd4d6e5e986bceed35da Open Delete
someNewArray#ic3ee8978c60737ab5d058b5a3f6a1b09 Open Delete
someNewArray#ie025efbbb0738ed01a63b326c174233e Open Delete
someNewArray%23i27992875ec4286a24e569b1e015b0473 Open Delete
someNewArray%23i5784b3886628c4362594ffa43547edb4 Open Delete
sqd Open Delete
sqsq Open Delete
ssss Open Delete
suck my co Open Delete
Ta mere la Open Delete
Ta mere la grosse tchoin Open Delete
Ta%20mere%20la%20grosse%20tchoin Open Delete
Ta%2520mere%2520la%2520grosse%2520choin Open Delete
tableau%20cellule%20unique Open Delete
TATA Open Delete
Telous Open Delete
terst Open Delete
tesr Open Delete
tesss Open Delete
tesst Open Delete
test nours Open Delete
test%20nours Open Delete
test34'A=0 Open Delete
test34%27A=0 Open Delete
Tester Open Delete
testing Open Delete
testN17 Open Delete
testname Open Delete
tesy Open Delete
tet Open Delete
Thais Open Delete
the Open Delete
the%2520test Open Delete
this is an Open Delete
this%20is%20an Open Delete
this%2520is%2520an%2520array Open Delete
toti Open Delete
totototototo Open Delete
tre Open Delete
try01 Open Delete
tryy5 Open Delete
ttt Open Delete
tyrtyrtr Open Delete
tzzttz Open Delete
ugghutugituiutu Open Delete
uu Open Delete
Vai que da Open Delete
Vai%20que%20da Open Delete
Vai%2520que%2520da Open Delete
vcvcvcvcvv Open Delete
Volta Dilm Open Delete
Volta%20Di Open Delete
Volta%252 Open Delete
Volta%2520Dilma%2520Fora%2520Temer#i1097c8b84b58a65ed6ec7b4f0da3ab67 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%23i1097c8b84b58a65ed6ec7b4f0da3ab67 Open Delete
Volta%252520Dilma%252520Fora%252520Temer%23i21ef661e2506d5d0e513dce166c17d49 Open Delete
Volta%252520Dilma%252520Fora%252520Temer%23i27992875ec4286a24e569b1e015b0473 Open Delete
Volta%252520Dilma%252520Fora%252520Temer%23ic3ee8978c60737ab5d058b5a3f6a1b09 Open Delete
Volta+Dilma+Fora+Temer Open Delete
vxvxcvxcv Open Delete
why doctrine Open Delete
why doctrine on delete not work Open Delete
why doctrine on delete not work? Open Delete
why%2520doctrine%2520on%2520delete%2520not%2520work%253F Open Delete
Woop%20wooop Open Delete
Woop%25 Open Delete
wqeqe Open Delete
wqewqeqwewewq Open Delete
wsh yannito Open Delete
www Open Delete
wxc<wxc Open Delete
xcxcxcx Open Delete
xxx Open Delete
yfcx Open Delete
yyyyyyyyyyyyyy Open Delete
zDSfsdf Open Delete
zzzz 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