Upload
martin-escalante-leiva
View
214
Download
0
Embed Size (px)
Citation preview
8/17/2019 buenas_practicas_symfony.pdf
http://slidepdf.com/reader/full/buenaspracticassymfonypdf 1/57
!"#$%&'(#
)*#"(+ -%.(+/"($
$0*+ '(*1($
2*1"($ (34"!45
#4(+*&-$6/."/*&-*$* *-!"/*/"%+(&
&07)%+0
8/17/2019 buenas_practicas_symfony.pdf
http://slidepdf.com/reader/full/buenaspracticassymfonypdf 2/57
Esta página se ha dejado vacía a propósito
8/17/2019 buenas_practicas_symfony.pdf
http://slidepdf.com/reader/full/buenaspracticassymfonypdf 3/57
!"#$%& #& %(")&"$#(*!"#$%&'( *+ !"# %&'("# )*+,-.,"# /'0 1*"2'34*5 67214(7 8 8 8 8 8 8 8 8 8 9
*+*+ ,-. /&0 1(.232%4 42%" 5&$"6+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 7*+8+ 9 /&30. 24 :3;354 42%4 '3<;( + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + =
*+>+ ?" "#'31"13@. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + =
!"#$%&'( 8+ :*'"(/4 '0 )*47',-4 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 ;
8+*+ A.2%"'".:( BCDE(.C + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + F
8+8+ !;4".:( '" "#'31"13@. :4' <'(5 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + G
8+>+ -2%;&1%&;".:( '" "#'31"13@. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + H
8+I+ ?(2 <&.:'42 :4 '" "#'31"13@. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + *J8+7+ K%3'3L".:( (%;" 42%;&1%&;" :4 :3;41%(;3(2 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + **
!"#$%&'( >+ :4(1.<&*",.=( 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 >?
>+*+ !(.E35&;"13@. ;4'"13(.":" 1(. '" 3.E;"42%;&1%&;" + + + + + + + + + + + + + + + + + + + + + + + + *>
>+8+ !(.E35&;"13@. ;4'"13(.":" 1(. '" "#'31"13@. + + + + + + + + + + + + + + + + + + + + + + + + + + + + *I
>+>+ M( &%3'3142 '" 1(.E35&;"13@. 24DN.%31" + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + *=
>+I+ O4E3.4 '"2 (#13(.42 :4 1(.E35&;"13@. 24.23<'42 E&4;" :4 BCDE(.C+ + + + + + + + + + *=
!"#$%&'( I+ @*<"(.A"(/4 0" 0=<.," /' ('<4,.4 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 >;
I+*+ 9'D"14.".:( 1'"242 E&4;" :4' !"#$%& + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + *F
I+8+ !(.E35&;".:( '(2 24;P313(2 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + *G
I+>+ K%3'3L".:( &." 1"#" :4 #4;232%4.13" + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 8J
I+I+ -2%N.:";42 :4 1@:35( + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 8>
!"#$%&'( 7+ :4(-*40"/4*'# 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 B9
7+*+ !(.E35&;".:( 4' 4.;&%"D34.%( + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 8=
7+8+ !(.E35&;".:( '"2 #'".%3''"2 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 8=
7+>+ !@D( :4<4;$". 24; '(2 1(.%;('":(;42 BCDE(.C + + + + + + + + + + + + + + + + + + + + + + + + + + 8F
7+I+ K%3'3L".:( '(2 Q";"D!(.P4;%4; + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 8F
7+7+ -R41&%".:( 1@:35( ".%42 C :42#&02 :4' 1(.%;('":(; + + + + + + + + + + + + + + + + + + + + + + 8H
!"#$%&'( =+ C0"(-.00"# 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 ?>
=+*+ S;5".3L".:( '"2 #'".%3''"2+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + >*
=+8+ -T%4.23(.42 UV35 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + >8
!"#$%&'( F+ D4*2&0"*.4# 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 ?9
8/17/2019 buenas_practicas_symfony.pdf
http://slidepdf.com/reader/full/buenaspracticassymfonypdf 4/57
F+*+ !;4".:( '(2 E(;D&'";3(2 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + >7
F+8+ !(.E35&;".:( '(2 <(%(.42 :4' E(;D&'";3( + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + >=
F+>+ W4.:4;3L".:( 4' E(;D&'";3( + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + >G
F+I+ Q;(142".:( 4' 4.P$( :4 E(;D&'";3(2 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + >G
!"#$%&'( G+ E(-'*(",.4("0.A",.=(8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 F>
G+*+ X(;D"%( :4 '(2 ";1Y3P(2 :4 %;":&113@. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + I*
G+8+ S;5".3L".:( '(2 ";1Y3P(2 :4 %;":&113@. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + I8
G+>+ O4E3.34.:( 1'"P42 #";" '"2 %;":&113(.42 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + I8
G+I+ -R4D#'( :4 ";1Y3P( :4 %;":&113@.+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + I8
!"#$%&'( H+ 6'<&*./"/8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 F9
H+*+ 9&%4.%31"13@. C '()&*+%%, + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + I7H+8+ 9&%(;3L"13@. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + I=
H+>+ ?" ".(%"13@. ZB41&;3%C+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + IF
H+I+ !(D#;(<".:( '(2 #4;D32(2 23. !"#$%&'() + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + IH
H+7+ ?(2 -&.")(/0 23/&), + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + IH
H+=+ B35&34.%42 #"2(2 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 7*
!"#$%&'( *J+ G##'-# 3'% 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 9?
*J+*+ K%3'3L".:( 9224%31 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 7>*J+8+ 9#'31"13(.42 <"2":"2 4. 4' ')3#/&#$+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 7I
!"#$%&'( **+ H'#-# 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 99
**+*+ U42%2 &.3%";3(2 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 77
**+8+ U42%2 E&.13(."'42 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 77
**+>+ U42%2 #";" 4' 1@:35( ["P"B1;3#% + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 7F
8/17/2019 buenas_practicas_symfony.pdf
http://slidepdf.com/reader/full/buenaspracticassymfonypdf 5/57
+,-.)/0( 12
3,* 4/&",* -56%)$%,* #&0
75,8&9(5: ;<87("<-' E;"D4V(;\ BCDE(.C 42 1(.(13:( #(; 24; 2&7 10'I.%0'] C" /&4 24 &%3'3L" 4. ND<3%(2 %". :3E4;4.%42
1(D( 23%3(2 V4< :3D3.&%(2] "#'31"13(.42 4D#;42";3"'42 /&4 23;P4. D3'42 :4 D3''(.42 :4 #4%313(.42 4
3.1'&2( 1(D( <"24 :4 (%;(2 E;"D4V(;\2+
O42:4 /&4 24 #&<'31@ 4. R&'3( :4 8J**] '" 1(D&.3:": BCDE(.C Y" ;41(;;3:( &. '";5( 1"D3.( :4 "#;4.^
:3L"R4] %".%( 4. '( /&4 24 ;4E34;4 " /&0 42 1"#"L BCDE(.C :4 Y"14;] 1(D( 4. 1&N' 42 '" D4R(; D".4;"
:4 Y"14;'(+
?(2 :3E4;4.%42 ;41&;2(2 1;4":(2 #(; '" 1(D&.3:":] :42:4 ";%$1&'(2 :4 <'(52 Y"2%" #;424.%"13(.42 4.
1(.E4;4.13"2] Y". (;353.":( &." 24;34 :4 ;41(D4.:"13(.42 C <&4."2 #;N1%31"2 3'(.(3,+, #";" :42";;(^
''"; "#'31"13(.42 BCDE(.C+ ?"D4.%"<'4D4.%4] D&1Y"2 :4 42%"2 ;41(D4.:"13(.42 2(. 4;;@.4"2+ O4 Y4^
1Y(] 1(D#'31". 4. 4T142( 4' :42";;(''( :4 "#'31"13(.42 C .( 235&4. 4. "<2('&%( '" E3'(2(E$" #;"5DN%31"
:4 '(2 1;4":(;42 :4 BCDE(.C+
1212 =>" ?/@ %("*$*)& &*), A/.,B-' (<R4%3P( :4 42%" 5&$" 42 2('&13(."; 4' #;(<'4D" ".%4;3(; 42%"<'4134.:( &." 24;34 :4 %&'("# )*+,J
-.,"# 41.,."0'# )"*" /'#"**400"* ")0.,",.4('# ,4( '0 1*"2'34*5 67214(7B + -2%"2 2(. '"2 <&4."2#;N1%31"2 /&4 D4R(; 4.1"R". 1(. '" E3'(2(E$" :4' E;"D4V(;\ 245_. 2& #;3.13#"' ;42#(.2"<'4] X"<34. Q(^
%4.134; `Y%%#2abb1(..41%+24.23('"<2+1(Db#;(E3'4bE"<#(%c +
B"<4D(2 /&4 42 :3E$13' :42Y"14;24 :4 '(2 YN<3%(2 ":/&3;3:(2 :&;".%4 "d(2 C #(; 42( #&4:4 /&4 "'5&."
:4 42%"2 <&4."2 #;N1%31"2 %4 1Y(/&4 ( .( 42%02 :4 "1&4;:( 1(. 4''"+ -. 1&"'/&34; 1"2(] 1;44D(2 /&4
23 235&42 42%"2 <&4."2 #;N1%31"2 #(:;N2 :42";;(''"; "#'31"13(.42 D&1Y( DN2 ;N#3:(] D&1Y( DN2 EN13'^
D4.%4 C 1(. '" D32D" ( DN2 1"'3:": :4 234D#;4+ 9:4DN2] 42%" '32%" :4 <&4."2 #;N1%31"2 24 "D#'3";N C
"1%&"'3L";N :4 D".4;" 1(.%3.&" " #";%3; :4 "Y(;"+
-. 1&"'/&34; 1"2(] %4. 4. 1&4.%" /&4 42%( 2(. *',42'/",.4('# 4),.4("0'# /&4 %_ C %& 4/&3#( #(:032
245&3; ( .( "' :42";;(''"; "#'31"13(.42 BCDE(.C+ B3 #;4E34;42 245&3; &%3'3L".:( %&2 #;(#3"2 D4%(:('(^
5
8/17/2019 buenas_practicas_symfony.pdf
http://slidepdf.com/reader/full/buenaspracticassymfonypdf 6/57
5$"2 C <&4."2 #;N1%31"2] 4;42 '3<;4 :4 Y"14;'(+ BCDE(.C 42 E'4T3<'4 C 24 ":"#%";N " %& E(;D" :4 %;"<"R";+
-2( .&.1" P" " 1"D<3";+
12C2 D ?/$@" *& #$5$A& &*)& 0$45(-2%" 5&$" 42%N #4.2":" #";" 1&"'/&34; #;(5;"D":(; BCDE(.C] 23. 3D#(;%"; 23 42 4T#4;%( ( #;3.13#3".^
%4+ M( (<2%".%4] 1(D( 42%" 5&$" .( 42 &. %&%(;3"' #"2( " #"2(] 42 .4142";3( :32#(.4; :4 134;%(2 1(.(^
13D34.%(2 <N231(2 :4 BCDE(.C #";" #(:4; 245&3;'"+ e 23 .( 2"<42 .":" :4 BCDE(.C] f<34.P4.3:( " '"
1(D&.3:":g C .( ('P3:42 '44; #;3D4;( 4' %&%(;3"' 4&//(#5 -/+)/&$ `Y%%#abb2CDE(.C+1(Db:(1b1&;;4.%b
/&31\h%(&;b%Y4h<35h#31%&;4+Y%D'c +
9:4DN2] Y4D(2 :413:3:( /&4 42%" 5&$" 24" '( DN2 1(;%" #(23<'4] #";" /&4 24 " D&C EN13' '44;'" C 1(.^
2&'%";'" '"2 P4142 /&4 .41423%42+ 92$ /&4 .( P"D(2 " ;4#4%3; '"2 4T#'31"13(.42 /&4 #&4:42 4.1(.%;";
4. '" :(1&D4.%"13@. :4 BCDE(.C] 1(D( /&0 42 '" 3.C4113@. :4 :4#4.:4.13"2 ( 1@D( E&.13(.". '(2
1(.%;('":(;42 E;(.%"'42+ M(2 14.%;";4D(2 4T1'&23P"D4.%4 4. 4T#'31"; 1@D( Y"14; '( /&4 C" 1(.(142+
12E2 3, ,-0$%,%$F" [&.%( 1(. 42%" 5&$" 4.1(.%;";N2 &." "#'31"13@. :4 #;&4<" :42";;(''":" %4.34.:( 4. 1&4.%" %(:"2 42%"2
;41(D4.:"13(.42+ !" ")0.,",.=( '# -"( #'(,.00" ,424 &( %04<] C" /&4 /&4;4D(2 /&4 %4 E3R42 4T1'&^
23P"D4.%4 4. '( /&4 42%N ;4'"13(.":( 1(. BCDE(.C C %4 ('P3:42 :4 '"2 #";%31&'";3:":42 :4 '" #;(#3"
"#'31"13@.+
9&./&4 '" "#'31"13@. 42 24.13''" .( '" P"D(2 " :42";;(''"; #"2( " #"2( 4. '" 5&$"+ -. 2& '&5";] 24'41^
13(.";4D(2 "'5&.(2 %;(L(2 :4 1@:35( " '( '";5( :4 '(2 235&34.%42 1"#$%&'(2+ -. 4' _'%3D( 1"#$%&'( 24
4T#'31" 1@D( 3.2%"'"; '" "#'31"13@.+
Capítulo 1. Las buenas prácticas del framework Symfony Buenas prácticas oficiales de Symfony
6
8/17/2019 buenas_practicas_symfony.pdf
http://slidepdf.com/reader/full/buenaspracticassymfonypdf 7/57
+,-.)/0( C2
+5&,"#( &0 -5(<&%)(C212 G"*),0,"#( ;<87("<B('"D4.%4 4T32%4 &." D".4;" ;41(D4.:":" #";" 3.2%"'"; BCDE(.Ca
!(D#(24; 42 4' 542%(; :4 :4#4.:4.13"2 /&4 &%3'3L". %(:"2 '"2 "#'31"13(.42 QiQ D(:4;."2+ j;"13"2 "
!(D#(24; #(:;N2 "d":3; ( /&3%"; EN13'D4.%4 :4#4.:4.13"2 4. %&2 #;(C41%(2 C %"D<30. #(:;N2 "1%&"^
'3L"; 23. 42E&4;L( '"2 P4;23(.42 :4 '"2 '3<;4;$"2 :4 %4;14;(2 /&4 &%3'3L"2 4. %&2 "#'31"13(.42+
C21212 H&*)$(","#( #&-&"#&"%$,* %(" +(8-(*&59.%42 :4 3.2%"'"; BCDE(.C] "245_;"%4 :4 /&4 %34.42 :42)4#'* .(#-"0"/4 <04%"02'(-'+ 9<;4 %& 1(.^
2('" :4 1(D".:(2 ( %4;D3."' C 4R41&%" 4' 235&34.%4 1(D".:(a
* $,-.,/#& 001#&/',2
3,-.,/#& 1#&/',2 4#56778#5597:4#;$9<$9;=#8799>?;$8?<;47>? 5<4>0<:044 48@>=@>:
-. %& 1"2( P4;N2 &. 3:4.%3E31":(; :4 P4;23@. :3E4;4.%4+ M( %4 #;4(1* #(;/&4 1(D( !(D#(24; 24
"1%&"'3L" 1(.%3.&"D4.%4] 2& P4;23@. .( 3D#(;%" 234D#;4 /&4 24" ;4134.%4+
C212C2 G"*),0,"#( +(8-(*&5 A0(4,08&")&B3 %(:"P$" .( Y"2 3.2%"'":( !(D#(24; 5'(<"'D4.%4 4. %& (;:4.":(;] 4R41&%" '(2 235&34.%42 1(D".:(2
4. %& 232%4D" (#4;"%3P( ?3.&T ( k"1 SB l `.( %4 "2&2%42] #4;( 4' 245&.:( 1(D".:( %4 #4:3;N %& 1(.^
%;"24d" :4 &2&";3(ca
* $%&A 0/" B((./@CCD#($,-.,/#&E,&DC'2/(?AA#& F .B.
* /%9, -1 $,-.,/#&E.B?& C%/&CA,$?ACG'2C$,-.,/#&
K%3'3L" !(D#(24; `Y%%#2abb54%1(D#(24;+(;5bc #";" 3.2%"'"; BCDE(.C+IJ>KD LMN+OG+D
O4#4.:34.:( :4 '" :32%;3<&13@. :4 ?3.&T /&4 &%3'3142 42 #(23<'4 /&4 :4<"2 4R41&%"; 4' 1(D".:(/% 4. P4L :4 /%9,+KPOD
7
8/17/2019 buenas_practicas_symfony.pdf
http://slidepdf.com/reader/full/buenaspracticassymfonypdf 8/57
B3 %& 232%4D" (#4;"%3P( 42 m3.:(V2] :421";5" 4' 3.2%"'":(; :4 !(D#(24; `Y%%#2abb54%1(D#(24;+(;5b
:(V.'(":bc :42:4 2& 23%3( V4< (E313"'] 4R41_%"'( C 235&4 '(2 #"2(2 /&4 24 3.:31".+
C2C2 +5&,"#( 0, ,-0$%,%$F" #&0 40(A9Y(;" /&4 C" %4.4D(2 %(:( '32%(] C" #(:4D(2 1;4"; &. .&4P( #;(C41%( BCDE(.C+ Q";" 4''(] "<;4 %&
1(.2('" :4 1(D".:(2] 4.%;" 4. &. :3;41%(;3( :(.:4 %4.5"2 #4;D32( #";" 1;4"; ";1Y3P(2 C :3;41%(;3(2
`#(; 4R4D#'(] .&,)#$(,/Cc C 4R41&%" '( 235&34.%4a
* $9 .&,)#$(,/C
* $,-.,/#& $&#?(#0.&,H#$( /)-7,2)C7&?-#I,&J0/(?29?&90#9'(',2 GA,DC
-2%4 1(D".:( 1;4";N &. .&4P( :3;41%(;3( ''"D":( GA,DC /&4 1(.%34.4 &." "#'31"13@. BCDE(.C P"1$"
<"2":" 4. '" P4;23@. DN2 ;4134.%4 :32#(.3<'4 :4' E;"D4V(;\+
C2C212 +(8-5(4,"#( 0, $"*),0,%$F" #& ;<87("<!&".:( %4;D3.4 '" 3.2%"'"13@. :4 BCDE(.C] 4.%;" 4. 4' :3;41%(;3( GA,DC C 4R41&%" 42%4 1(D".:( #";"
1(D#;(<"; /&4 BCDE(.C 24 Y" 3.2%'":( 1(;;41%"D4.%4a
* $9 GA,DC
* .B. ?..C$,2/,A# 001#&/',2
")-7,2) 1#&/',2 5E=EK 0 ?..C9#1C9#G%D
B3 P42 '" P4;23@. 3.2%"'":" :4 BCDE(.C] %(:( E&.13(.@ 1(;;41%"D4.%4+ B3 .(] 4R41&%" 4' 235&34.%4 ,.)(6/
#";" :4%41%"; /&0 42%N E"''".:( 4. %& (;:4.":(; C /&4 3D#3:4 4R41&%"; "#'31"13(.42 BCDE(.Ca
* $9 .&,)#$(,/CGA,DC
* .B. ?..C$B#$JE.B.
O4#4.:34.:( :4' 42%":( :4 %& (;:4.":(;] 4' ;42&'%":( :4' ,.)(6/ ".%4;3(; #&4:4 24; &." ( :(2 '32%"2+ ?"
#;3D4;" '32%" 42 '" :4 '(2 ;4/&323%(2 %01.31(2 (<'35"%(;3(2 /&4 %& 232%4D" .( 1&D#'4+ ?" 245&.:" '32%"
D&42%;" '(2 ;4/&323%3(2 (#13(."'42 /&4 %"D#(1( 1&D#'42] #4;( /&4 .( %4 3D#3:4. 4R41&%"; "#'31"13(^
.42 BCDE(.C ̀ 2( 23D#'4D4.%4 ;41(D4.:"13(.42 #";" /&4 BCDE(.C 24 4R41&%4 D4R(;ca
")-7,2)5 L#M%'&#-#2(/ 3B#$J#&NNNNNNNNNNNNNNNNNNNNNNNNNNNNN
O PQP '/ %/'2D (B# 7,AA,I'2D .B.E'2' 7'A#@
C%/&CA,$?ACR#29C#($C.B.E'2'
O 3B#$J'2D ")-7,2) &#M%'&#-#2(/@
EEEEESEEEEEEEEEEEEEEEEEEEEEEEEETEEEEE
USLLVLW
X,%& /)/(#- '/ 2,( &#?9) (, &%2 ")-7,2)5 .&,H#$(/
Capítulo 2. Creando el proyecto Buenas prácticas oficiales de Symfony
8
8/17/2019 buenas_practicas_symfony.pdf
http://slidepdf.com/reader/full/buenaspracticassymfonypdf 9/57
Y'Z (B# 7,AA,I'2D -?29?(,&) &#M%'&#-#2(/
NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
K 9?(#E('-#R,2# /#(('2D -%/( G# /#(
O "#( (B# [9?(#E('-#R,2#[ /#(('2D '2 .B.E'2'K \A'J# S%&,.#CP?&'/]E
V.(',2?A &#$,--#29?(',2/ (, '-.&,1# ),%& /#(%.
NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
K /B,&(^,.#2^(?D /B,%A9 G# 9'/?GA#9 '2 .B.E'2'
O "#( /B,&(^,.#2^(?D (, ,77 '2 .B.E'2'KE
C2E2 >*)5/%)/5,"#( 0, ,-0$%,%$F"K." P4L 1;4":" '" "#'31"13@.] 4.%;" 4. 4' :3;41%(;3( GA,DC C P4;N2 '" 235&34.%4 R4;";/&$" :4 ";1Y3P(2 C
:3;41%(;3(2a
GA,DC
!" ?..C
# !" $,2/,A## !" $?$B#C
# !" $,27'DC
# !" A,D/C# $" L#/,%&$#/C!" /&$C
# $" _..`%29A#C
!" 1#29,&C
$" I#GC
BCDE(.C #;(#(.4 4%" R4;";/&$" :4 ";1Y3P(2 C :3;41%(;3(2 #";" 42%;&1%&;"; %&2 "#'31"13(.42+ -' #;(#@^
23%( :4 1":" ";1Y3P(b:3;41%(;3( 42 4' 235&34.%4a
n ?..C$?$B#C] "'D"14." %(:(2 '2( ";1Y3P(2 :4 1"1Y0 54.4;":(2 #(; '" "#'31"13@.+
n ?..C$,27'DC] "'D"14." %(:" '" 3.E(;D"13@. :4E3.3:" #";" 1":" 4.%(;.( :4 4R41&13@.+
n ?..CA,D/C] "'D"14." %(:(2 '(2 ";1Y3P(2 :4 '(5 :(.:4 24 5&";:". '(2 D4.2"R42 :4 '(5 54.4;":(2
#(; '" "#'31"13@.+
n ?..CL#/,%&$#/C] "'D"14." %(:"2 '"2 #'".%3''"2 :4 '" "#'31"13@. C %(:(2 '(2 ";1Y3P(2 :4
%;":&113(.42+
n /&$C_..`%29A#C] "'D"14." %(:( 4' 1@:35( 42#41$E31( :4 BCDE(.C `1(.%;('":(;42] ;&%"2] 4%1+c C%(:( %& 1@:35( #;(#3( `1'"242 :4 %& '@531" :4 .45(13(] 4.%3:":42 :4 O(1%;3.4] 4%1+c
U(:"2 '"2 P4;23(.42 :4 BCDE(.C 42%N. E3;D":"2 :353%"'D4.%4 #(; D(%3P(2 :4 245&;3:":+ B3
/&34;42 P4;3E31"; '" 3.%45;3:": :4 '" P4;23@. :4 BCDE(.C /&4 Y"2 3.2%"'":(] 1(.2&'%" 4' ;4#(23^
%(;3( #_<'31( :4 E3;D"2 :353%"'42 `Y%%#2abb53%Y&<+1(Db24.23('"<2b1Y41\2&D2c C 235&4 '(2 #"^
2(2 /&4 24 4T#'31". 4. 42%4 ";%$1&'( `Y%%#abbE"<34.+#(%4.134;+(;5b";%31'4bF>b235.3.5^#;(R41%^
;4'4"242c #";" #(:4; P4;3E31";'"2+
OMJ+P
Buenas prácticas oficiales de Symfony Capítulo 2. Creando el proyecto
9
8/17/2019 buenas_practicas_symfony.pdf
http://slidepdf.com/reader/full/buenaspracticassymfonypdf 10/57
n 1#29,&C] 42%4 42 4' :3;41%(;3( :(.:4 !(D#(24; 3.2%"'" '"2 :4#:4.:4.13"2 :4 '" "#'31"13@. C #(;
%".%( .&.1" :4<4;$"2 %(1"; .":" 4. 42%4 :3;41%(;3(+
n I#GC] "'D"14." '(2 1(.%;('":(;42 E;(.%"'42 C %(:(2 '(2 +,,&/, ;4'"13(.":(2 1(. 4' ')3#/&#$] %"'42
1(D( ";1Y3P(2 !BB] ";1Y3P(2 ["P"B1;3#% C '"2 3DN54.42+
C2Q2 3(* 4/"#0&* #& 0, ,-0$%,%$F"!&".:( 24 #&<'31@ BCDE(.C 8+J #(; #;3D4;" P4L] '" ;42#&42%" ."%&;"' :4 '(2 #;(5;"D":(;42 E&4 245&3;
42%;&1%&;".:( 2&2 "#'31"13(.42 1(D( 23 24 %;"%";" :4 '" ".%35&" P4;23@. 2CDE(.C *+T+ 92$ /&4 D&1Y"2
"#'31"13(.42 BCDE(.C "1"<";(. :3P3:3:"2 4. 78$"%3, %85(.3,] 23D3'";42 " '(2 :4 2CDE(.C *+T+
Q(; 42( Y(C 4. :$" 42 Y"<3%&"' 4.1(.%;";24 1(. "#'31"13(.42 BCDE(.C8 /&4 :4E3.4. !"#$%&, 1(D( '(2
235&34.%42a a/#&`%29A#] P&,9%$(`%29A#] b21,'$#`%29A#] 4%1+
M( (<2%".%4] '(2 !"#$%&, 42%N. #4.2":(2 #";" /&4 24". 4'4D4.%(2 :4 2(E%V";4 /&4 24 #&4:4. ;4&%3'3L";
:4 D".4;" "&%@.(D"+ -. (%;"2 #"'"<;"2] 23 %34.42 #(; 4R4D#'( &. !"#$%& ''"D":( a/#&`%29A# #4;( /&4.( #&4:42 ;4&%3'3L";'( %"' C 1(D( 42%N 4. (%;"2 "#'31"13(.42 BCDE(.C8] 4.%(.142 424 !"#$%& 42%N D"'
Y41Y(+ ?( D32D( /&4 23 %& !"#$%& b21,'$#`%29A# :4#4.:4 :4 (%;( !"#$%& 1(D( P&,9%$(`%29A#+ B4 %;"%"
:4 &. 4;;(; C 42%(2 :(2 4'4D4.%(2 .( :4<4;$". 24; !"#$%&, 3.:4#4.:34.%42+
9' %4.4; &. _.31( !"#$%& ''"D:( _..`%29A#] 4' 1@:35( :4 %&2 "#'31"13(.42 24;N D&1Y( DN2 EN13' :4 42^
1;3<3; C :4 '44;+ 9:4DN2] " #";%3; :4 '" P4;23@. 8+=] '" :(1&D4.%"13@. (E313"' :4 BCDE(.C 234D#;4 D(2^
%;";N 2&2 4R4D#'(2 1(. 42%4 !"#$%& _..`%29A#+
!(. %(:( 42%(] '" 42%;&1%&;" :4 :3;41%(;3(2 ;41(D4.:":" #";" &." "#'31"13@. BCDE(.C /&4 235" '"2
<&4."2 #;N1%31"2 (E313"'42 :4<4;$" 24; '" 235&34.%4a
GA,DC
!" ?..C
# !" $,2/,A#
# !" $?$B#C# !" $,27'DC# $" A,D/C
# $" L#/,%&$#/C
!" /&$C
# $" _..`%29A#C!" 1#29,&C$" I#GC
!" ?..E.B.$" ?..^9#1E.B.
!;4" 2('"D4.%4 &. !"#$%& ''"D":( _..`%29A# 4. %& "#'31"13@.+IJ>KD LMN+OG+D
M( 42 .4142";3( "d":3; .3.5_. #;4E3R( "' .(D<;4 _..`%29A# #";" 3.:31"; 4' 9&#$3) ] 1(D( #(;
4R4D#'( 4' .(D<;4 :4 %& 4D#;42" ( #;(C41%(a _$-#_..`%29A#+ -' D(%3P( 42 /&4 42%4 !"#$%&] #(;
2& #;(#3" ."%&;"'4L"] .&.1" P" " 24; ;4&%3'3L":( 4. (%;"2 "#'31"13(.42 C .&.1" P" " 24; #&<'3^
1":( 1(D( !"#$%& :4 %4;14;(2+
KPOD
Capítulo 2. Creando el proyecto Buenas prácticas oficiales de Symfony
10
8/17/2019 buenas_practicas_symfony.pdf
http://slidepdf.com/reader/full/buenaspracticassymfonypdf 11/57
C2R2 J)$0$S,"#( ()5, &*)5/%)/5, #& #$5&%)(5$(*B3 %& #;(C41%( ( '" 3.E;"42%;&1%&;" /&4 &%3'3L"2 ;4/&34;4. 1"D<3(2 4. '" R4;";/&$" :4 :3;41%(;3(2 #(;
:4E41%(] #&4:42 '44; 42%4 ";%$1&'( `Y%%#abb2CDE(.C+1(Db:(1b1&;;4.%b1((\<((\b1(.E35&;"%3(.b(P4^
;;3:4h:3;h2%;&1%&;4+Y%D'c #";" 2"<4; 1@D( ;4:4E3.3; '" '(1"'3L"13@. :4 '(2 :3;41%(;3(2 $?B$#C] A,D/C C
I#GC+
Q(; (%;" #";%4] '" E&%&;" P4;23@. BCDE(.C > &%3'3L";N &." 42%;&1%&;" :4 :3;41%(;3(2 '354;"D4.%4 :3E4^;4.%4a
GA,D0/)-7,2);C
!" ?..C
# !" $,27'DC
# $" L#/,%&$#/C!" G'2C# $" $,2/,A#
!" /&$C
!" 1?&C
# !" $?$B#C# $" A,D/C!" 1#29,&C
$" I#GC
9&./&4 '(2 1"D<3(2 2(. D&C 2&%3'42] %4 "1(.24R"D(2 /&4 #(; 4' D(D4.%( 1(.%3._42 1(. '" 42%;&1%&;"
:4 :3;41%(;3(2 #(; :4E41%( :4 BCDE(.C8+
B3 &%3'3L"2 BCDE(.C 8+= ( 23(;] 42%4 !"#$%& _..`%29A# C" 42%N 54.4;":(] #(; '( /&4 .( %34^
.42 /&4 Y"14; .":" DN2+ B3 &%3'3L"2 &." P4;23@. ".%4;3(; :4 BCDE(.C] #&4:42 54.4;"; 4' !"#$:
%& 4R41&%".:( 4' 235&34.%4 1(D".:(a
* .B. ?..C$,2/,A# D#2#&?(#@G%29A# 002?-#/.?$#c_..`%29A# 009'&c/&$007,&-?(c?22,(?(',2 002,0'2(#&?$(',2
OMJ+P
Buenas prácticas oficiales de Symfony Capítulo 2. Creando el proyecto
11
8/17/2019 buenas_practicas_symfony.pdf
http://slidepdf.com/reader/full/buenaspracticassymfonypdf 12/57
Esta página se ha dejado vacía a propósito
12
8/17/2019 buenas_practicas_symfony.pdf
http://slidepdf.com/reader/full/buenaspracticassymfonypdf 13/57
+,-.)/0( E2
+("7$A/5,%$F"?" 1(.E35&;"13@. :4 &." "#'31"13@. .(;D"'D4.%4 42%N ;4'"13(.":" 1(. D&1Y"2 #";%42 :3E4;4.%42 `3.^
E;"42%;&1%&;" %41.('@531"] 245&;3:":] 4%1+c C 1(. P";3(2 4.%(;.(2 :4 4R41&13@. ̀ :42";;(''(] #;(:&113@.]
4%1+c Q(; 42( BCDE(.C ;41(D34.:" :3P3:3; '" 1(.E35&;"13@. :4 '" "#'31"13@. 4. %;42 #";%42 :3E4;4.13"^
:"2+
E212 +("7$A/5,%$F" 5&0,%$(",#, %(" 0, $"75,&*)5/%)/5,
-' ";1Y3P( .?&?-#(#&/E)-A 1;4":( #(; :4E41%( #(; BCDE(.C 235&4 42%" ;41(D4.:"13@. C :4E3.4 '"2 (#^
13(.42 ;4'"13(.":"2 1(. '" <"24 :4 :"%(2 C 4' 24;P3:(; :4 1(;;4(a
d ?..C$,27'DC.?&?-#(#&/E)-A
.?&?-#(#&/@
9?(?G?/#^9&'1#&@ .9,^-)/MA
9?(?G?/#^B,/(@ 456E<E<E4
9?(?G?/#^.,&(@ N
9?(?G?/#^2?-#@ /)-7,2)
9?(?G?/#^%/#&@ &,,(9?(?G?/#^.?//I,&9@ N
-?'A#&^(&?2/.,&(@ /-(.
-?'A#&^B,/(@ 456E<E<E4
-?'A#&^%/#&@ N
-?'A#&^.?//I,&9@ N
d EEE
-2%"2 (#13(.42 .( 24 :4E3.4. 4. 4' ";1Y3P( ?..C$,27'DC$,27'DE)-A #(;/&4 .( %34.4. .":" /&4 P4; 1(.
4' 1(D#(;%"D34.%( :4 '" "#'31"13@.+ -. (%;"2 #"'"<;"2] " '" "#'31"13@. '4 :" 4T"1%"D4.%4 35&"' :@.:4
O4E3.4 '"2 (#13(.42 :4 1(.E35&;"13@. ;4'"13(.":"2 1(. '" 3.E;"42%;&1%&;" %41.('@^
531" 4. 4' ";1Y3P( ?..C$,27'DC.?&?-#(#&/E)-A+IJ>KD LMN+OG+D
13
8/17/2019 buenas_practicas_symfony.pdf
http://slidepdf.com/reader/full/buenaspracticassymfonypdf 14/57
24 4.1&4.%;" '" <"24 :4 :"%(2 ( 1@D( 24 "114:4 " 4''"+ ?( _.31( /&4 '4 3D#(;%" 42 /&4 Y"C" &." <"24
:4 :"%(2 #;4#";":"+
E21212 L,568&)5(* %,"F"$%(*
O42:4 '" P4;23@. 8+> BCDE(.C 3.1'&C4 &. ";1Y3P( :4 1(.E35&;"13@. ''"D":( .?&?-#(#&/E9'/(E)-A] /&4
"'D"14." %(:(2 '(2 #";ND4%;(2 :4 1(.E35&;"13@. /&4 :4<4. 42%"; :4E3.3:(2 4. '" "#'31"13@. #";" /&4
02%" E&.13(.4 1(;;41"D4.%4+ -2%(2 #";ND4%;(2 24 ''"D". )"*+2'-*4# ,"(=(.,4# /' 0" ")0.,",.=(
`.+#3#(.+% 6+)+7&/&), 4. 3.5'02c+
!":" P4L /&4 :4E3."2 &. .&4P( #";ND4%;( :4 1(.E35&;"13@. #";" %& "#'31"13@.] .( ('P3:42 "d":3;'(
%"D<30. " 42%4 ";1Y3P( .?&?-#(#&/E9'/(E)-A C 2&<3; :42#&02 '(2 1"D<3(2 "' ;42#(23%(;3( :4 1@:35(+
O4 42%" D".4;"] 1":" P4L /&4 &. D34D<;( :4' 4/&3#( :4 :42";;(''( "1%&"'314 4' #;(C41%( ( '( 3.2%"'4
4. #;(:&113@.] BCDE(.C 1(D#;(<";N 23 4' ._D4;( :4 #";ND4%;(2 :4' ";1Y3P( .?&?-#(#&/E)-A 1(3.13^
:4 1(. '(2 #";ND4%;(2 :4E3.3:(2 4. .?&?-#(#&/E)-AE9'/(+ B3 4T32%4 1&"'/&34; :3E4;4.13"] BCDE(.C %4
#;45&.%";N /&0 P"'(; /&34;42 "235."; " '(2 #";ND4%;(2 /&4 %4 E"'%". #(; :4E3.3; C '(2 "d":3;N "' ";1Y3^
P( .?&?-#(#&/E)-A+ 92$ '" "#'31"13@. .&.1" E"''";N #(;/&4 '4 E"'%4 &. #";ND4%;( :4 1(.E35&;"13@.+
E2C2 +("7$A/5,%$F" 5&0,%$(",#, %(" 0, ,-0$%,%$F"
-' ";1Y3P( $,27'DE)-A :4E3.4 '"2 (#13(.42 /&4 24 &%3'3L". #";" D(:3E31"; 4' 1(D#(;%"D34.%( :4
'" "#'31"13@.] %"'42 1(D( 4' ;4D3%4.%4 :4 '(2 4D"3'2 :4 .(%3E31"13@.] '(2 '&+/")& /355%&,
`Y%%#abb4.+V3\3#4:3"+(;5bV3\3bX4"%&;4h%(55'4c ] 4%1+ O4E3.3; 42%(2 P"'(;42 4. 4' ";1Y3P(
.?&?-#(#&/E)-A 42 #(23<'4] #4;( "d":3;$" &." 1"#" ":313(."' :4 1(.E35&;"13@. %(%"'D4.%4 3..4142";3"]
C" /&4 .(;D"'D4.%4 .( .41423%"2 1"D<3"; 42%(2 P"'(;42 4. E&.13@. :4' 24;P3:(; 4. 4' /&4 24 4.1&4.^
%;4 '" "#'31"13@.+
?"2 (#13(.42 :4 1(.E35&;"13@. :4E3.3:"2 4. 4' ";1Y3P( $,27'DE)-A .(;D"'D4.%4 P";$". 4. E&.13@.:4' 4.%(;.( :4 4R41&13@. `Y%%#abb'3<;(2V4<+42b2CDE(.Ch8hTb1"#3%&'(hIb4.%(;.(2+Y%D'c + Q(; 42(
BCDE(.C :4E3.4 :(2 ";1Y3P(2 :32%3.%(2 ''"D":(2 ?..C$,27'DC$,27'D^9#1E)-A C ?..C$,27'DC
$,27'D^.&,9E)-A #";" /&4 #&4:"2 :4E3.3; :3E4;4.%42 P"'(;42 #";" 1":" 4.%(;.(+
E2C212 +("*),")&* / (-%$("&* #& %("7$A/5,%$F"K.( :4 '(2 4;;(;42 DN2 Y"<3%&"'42 "' :4E3.3; '" 1(.E35&;"13@. :4 &." "#'31"13@. 1(.232%4 4. "d":3; (#^
13(.42 #";" P"'(;42 /&4 .&.1" P". " 1"D<3";] 1(D( #(; 4R4D#'( 4' ._D4;( :4 4'4D4.%(2 D(2%;":(2
4. &." #"53."13@.+
O4E3.4 %(:(2 '(2 #";ND4%;(2 :4 '" "#'31"13@. 4. 4' ";1Y3P( ?..C$,27'DC
.?&?-#(#&/E9'/(E)-A+IJ>KD LMN+OG+D
O4E3.4 '"2 (#13(.42 :4 1(.E35&;"13@. ;4'"13(.":"2 1(. '" "#'31"13@. 4. 4' ";1Y3P(
?..C$,27'DC$,27'DE)-A+IJ>KD LMN+OG+D
Capítulo 3. Configuración Buenas prácticas oficiales de Symfony
14
8/17/2019 buenas_practicas_symfony.pdf
http://slidepdf.com/reader/full/buenaspracticassymfonypdf 15/57
8/17/2019 buenas_practicas_symfony.pdf
http://slidepdf.com/reader/full/buenaspracticassymfonypdf 16/57
j
CC EEE
k
k
?" _.31" :42P4.%"R" 3D#(;%".%4 :4 &2"; 1(.2%".%42 1(D( (#13(.42 :4 1(.E35&;"13@. 42 /&4 .( #&4:42;4:4E3.3;'"2 EN13'D4.%4 4. '(2 %42%2 :4 '" "#'31"13@.+
E2E2 K( /)$0$%&* 0, %("7$A/5,%$F" *&86")$%,
!(D( 24 4T#'31" 4. 4' ";%$1&'( ;3* /3 <=63,& + ,&7+#/(. >3#'(5")+/(3# '3) + ?"#$%& `Y%%#abb2CDE(.C+1(Db
:(1b1&;;4.%b1((\<((\b<&.:'42b4T%4.23(.+Y%D'c ] '(2 !"#$%&, :4 BCDE(.C :32#(.4. :4 :(2 (#13(.42
#";" 542%3(."; 2&2 #;(#3"2 (#13(.42 :4 1(.E35&;"[email protected] '" 1(.E35&;"13@. #3)7+% :4E3.3:" 4. 4' ";1Y3P(/#&1'$#/E)-A C '" 1(.E35&;"13@. ,&7@/(.+ D4:3".%4 &." 1'"24 42#413"' :4 %3#( KSZ(#2/',2+
9&./&4 '" 1(.E35&;"13@. 24DN.%31" 42 D&1Y( DN2 "P".L":" C (E;414 1";"1%4;$2%31"2 ;4"'D4.%4 3.^
%4;42".%42] 1(D( '" P"'3:"13@. :4 '"2 (#13(.42 :4 1(.E35&;"13@.] 4' %;"<"R( .4142";3( #";" :4E3.3; 42"
1(.E35&;"13@. .( D4;414 '" #4." #";" '(2 !"#$%&, 3.%4;.(2 :4 '" "#'31"13@. C /&4 #(; %".%(] .( 24 P".
" ;4&%3'3L"; 1(D( !"#$%&, :4 %4;14;(2+
E2Q2 T&7$"& 0,* (-%$("&* #& %("7$A/5,%$F" *&"*$40&* 7/&5, #& ;<8U7("<9' %;"<"R"; 1(. (#13(.42 :4 1(.E35&;"13@. 24.23<'42] 1(D( #(; 4R4D#'( '"2 1;4:4.13"'42 #";" "114:4; "
'" <"24 :4 :"%(2] '" ;41(D4.:"13@. 1(.232%4 4. "'D"14.";'"2 E&4;" :4 '" "#'31"13@. BCDE(.C C "114:4;
" 4''"2 D4:3".%4 '"2 P";3"<'42 :4 4.%(;.(+ Q";" 2"<4; 1@D( Y"14;'(] 1(.2&'%" 4' ";%$1&'( ;3* /3 -&/ &=:
/&)#+% A+)+7&/&), (# /B& -&)9(.& >3#/+(#&) `Y%%#abb2CDE(.C+1(Db:(1b1&;;4.%b1((\<((\b1(.E35&;"%3(.b
4T%4;."'h#";"D4%4;2+Y%D'c +
M( :4E3."2 4. %&2 !"#$%&, &." 1(.E35&;"13@. 24DN.%31" #";" 4' 1(.%4.4:(; :4 3.^
C4113@. :4 :4#4.:4.13"2+IJ>KD LMN+OG+D
Capítulo 3. Configuración Buenas prácticas oficiales de Symfony
16
8/17/2019 buenas_practicas_symfony.pdf
http://slidepdf.com/reader/full/buenaspracticassymfonypdf 17/57
+,-.)/0( Q2
P5A,"$S,"#( 0, 0FA$%, #&
"&A(%$(?" 0=<.," /' ('<4,.4 ( !",(#&,, %35(. 1(.232%4 4. %(:( 4' 1@:35( /&4 421;3<42 #";" %& "#'31"13@. C /&4
.( 42%N ;4'"13(.":( 1(. 4' #;(#3( E;"D4V(;\ `1(.%;('":(;42] ;&%"2] 4%1+c ?"2 1'"242 :4' :(D3.3(] '"2
4.%3:":42 :4 O(1%;3.4 C '"2 1'"242 QiQ .(;D"'42 C 1(;;34.%42 2(. <&4.(2 4R4D#'(2 :4 '( /&4 42 '" '@^
531" :4 .45(13( :4 &." "#'31"13@. BCDE(.C+
-. '" D"C(;$" :4 %&2 #;(C41%(2] :4<4;$"2 "'D"14."; %(:" %& '@531" :4 .45(13( :4.%;( :4' !"#$%&
_..`%29A#+ Q";" (;5".3L"; D4R(; %& 1@:35( #&4:42 1;4"; %(:(2 '(2 :3;41%(;3(2 /&4 .41423%42a
/)-7,)50.&,H#$(C
!" ?..C
!" /&$C# $" _..`%29A#C# $" a('A/C
# $" f)3A?//E.B.
!" 1#29,&C
$" I#GC
Q212 D08,%&","#( %0,*&* 7/&5, #&0 !"#$%& M( 4T32%4 .3.5&." '3D3%"13@. %01.31" #";" 5&";:"; %& '@531" :4 .45(13( E&4;" :4 1&"'/&34; !"#$%&+ 92$
/&4 23 '( #;4E34;42] #&4:42 1;4"; %& #;(#3( #+7&,6+.& :4.%;( :4' :3;41%(;3( /&$C C (;5".3L"; 4' 1@:35(
:4 42" D".4;"a
/)-7,)50.&,H#$(C
!" ?..C!" /&$C# !" _$-#C# # $" a('A/C
# # $" f)3A?//E.B.# $" _..`%29A#C
17
8/17/2019 buenas_practicas_symfony.pdf
http://slidepdf.com/reader/full/buenaspracticassymfonypdf 18/57
!" 1#29,&C
$" I#GC
Q2C2 +("7$A/5,"#( 0(* *&5V$%$(*?" "#'31"13@. :4' <'(5 .41423%" &." &%3'3:": /&4 %;".2E(;D4 '(2 %$%&'(2 :4 '(2 ";%$1&'(2 `4R4D#'( ;3%+
C"#$3c 42 &. ,%"5 `4R4D#'( B3%+:7"#$3c+ ?(2 ,%"5 2(. '"2 1":4."2 :4 %4T%( /&4 24 &%3'3L". 1(D( #";%4
:4 '" KW? :4 '(2 ";%$1&'(2 #";" 4P3%"; '(2 1";"1%4;42 #;(<'4DN%31(2 ̀ 42#"13(2 4. <'".1(] "14.%(2] 4%1+c
92$ /&4 24 1;4" &." .&4P" 1'"24 ''"D":" "A%DD#& :4.%;( :4' :3;41%(;3( /&$C_..`%29A#Ca('A/C C 24
:4E3.4 4' 235&34.%4 D0%(:( /A%D'7)\]a
CC /&$C_..`%29A#Ca('A/C"A%DD#&E.B.
2?-#/.?$# _..`%29A#ha('A/i
$A?// "A%DD#&
j
/(?('$ 7%2$(',2 /A%D'7)\*/(&'2D]
j
&#(%&2 .&#D^&#.A?$#\
mCUs?0R<0tWCmn m0mn /(&(,A,I#&\(&'-\/(&'.^(?D/\*/(&'2D]]]
]i
kk
Q";" #(:4; &%3'3L"; 42%" 1'"24 4. %& "#'31"13@.] :4E3.4 &. .&4P( 24;P313( :4 '" 235&34.%4 D".4;"a
d ?..C$,27'DC/#&1'$#/E)-A
/#&1'$#/@
d #A 2,-G&# 9# A,/ /#&1'$',/ 9#G#&o? /#& -%) $,&(,
/A%DD#&@
$A?//@ _..`%29A#ha('A/h"A%DD#&
M(;D"'D4.%4 '(2 #;(5;"D":(;42 BCDE(.C &%3'3L". .(D<;42 :4 24;P313(2 D&C '";5(2] 1(#&42%(2 #(; 4'.(D<;4 :4 '" 1'"24 C 2& 1'"24] !"#$%& ( #+7&,6+.& #";" 4P3%"; 1('323(.42+ 92$ /&4 4. 42%4 1"2( 4' 24;P313(
#(:;$" Y"<4;24 ''"D":( #(; 4R4D#'( ?..E%('A/E/A%DD#&+ Q4;( 1&".:( 24 &%3'3L". .(D<;42 1(;%(2 #";"
'(2 24;P313(2] 4' 1@:35( 24 23D#'3E31" C 42 DN2 EN13' :4 '44;+
9Y(;" C" #&4:42 &%3'3L"; 4' 24;P313( /A%DD#& 4. 1&"'/&34; 1(.%;('":(;] 1(D( #(; 4R4D#'(
_9-'23,2(&,AA#&a
?" ;41(D4.:"13@. :4 &%3'3L"; 4' !"#$%& _..`%29A# 42 #";" /&4 %(:( 24" DN2 24.13''( :4 542%3(^
.";+ B3 %34.42 '" 4T#4;34.13" 2&E3134.%4 1(D( #";" :413:3; '( /&4 %34.4 /&4 1('(1";24 :4.%;( (
E&4;" :4' !"#$%&] 4.%(.142 :4<4;$"2 :4R";%4 5&3"; #(; %& #;(#3" 4T#4;34.13"+
OMJ+P
-' .(D<;4 :4 '(2 24;P313(2 :4<4;$" 24; %". 1(;%( 1(D( 24" #(23<'4] 3:4"'D4.%4 &."
2('" #"'"<;" 1(;%"+IJ>KD LMN+OG+D
Capítulo 4. Organizando la lógica de negocio Buenas prácticas oficiales de Symfony
18
8/17/2019 buenas_practicas_symfony.pdf
http://slidepdf.com/reader/full/buenaspracticassymfonypdf 19/57
.%GA'$ 7%2$(',2 $&#?(#_$(',2\L#M%#/( *&#M%#/(]
j
CC EEE
'7 \*7,&-0O'/"%G-'((#9\] uu *7,&-0O'/v?A'9\]] j
*/A%D c *(B'/0OD#(\m/A%DD#&m]0O/A%D'7)\*.,/(0OD#(g'(A#\]]]i*.,/(0O/#("A%D\*/A%D]i
CC EEE
k
k
Q2C212 >0 7(58,)( #& %("7$A/5,%$F" WDX3-. '" 24113@. ".%4;3(;] 24 &%3'3L@ e9k? #";" :4E3.3; 4' 24;P313(+
B"<4D(2 /&4 42%" ;41(D4.:"13@. 42 D&C 1(.%;(P4;%3:"+ B45_. .&42%;" #;(#3" 4T#4;34.13"] 4' &2( :4
e9k? C lk? 42%N <"2%".%4 ;4#";%3:(] 1(. &." '354;" P4.%"R" #";" e9k?+ -. 1&"'/&34; 1"2(] 1(D( '(2
:(2 E(;D"%(2 %34.4. 4' D32D( ;4.:3D34.%(] "' E3."' '" :41323@. :4 1&N' &%3'3L"; 42 &." 1&42%3@. :4 5&2^
%( #4;2(."'+
?" ;41(D4.:"13@. :4 &%3'3L"; e9k? 24 :4<4 " /&4 '(2 .&4P(2 #;(5;"D":(;42 BCDE(.C #&4:4. "2$
:4E3.3; '(2 24;P313(2 DN2 EN13'D4.%4 C :4 D".4;" D&C 1(.132"+ Q4;( 4. %&2 "#'31"13(.42 #&4:42 4'453;
4' E(;D"%( /&4 #;4E34;"2+
Q2C2C2 K( #&7$",* -,568&)5(* -,5, 0,* %0,*&* #& 0(* *&5V$%$(*Q;(<"<'4D4.%4 %4 Y"<;N2 :":( 1&4.%" :4 /&4 ".%42 .( Y4D(2 1;4":( &. #";ND4%;( :4 1(.E35&;"13@.
#";" :4E3.3; '" 1'"24 :4' 24;P313(a
d ?..C$,27'DC/#&1'$#/E)-A
d $&#?29, %2 .?&p-#(&, .?&? 9#7'2'& A? $A?/# 9# %2 /#&1'$',
d eV A, B?D?/ #2 (%/ ?.A'$?$',2#/
.?&?-#(#&/@
/A%DD#&E$A?//@ _..`%29A#ha('A/h"A%DD#&
/#&1'$#/@
/A%DD#&@
$A?//@ [w/A%DD#&E$A?//w[
-2%" #;N1%31" 42 D&C #42":" C ":4DN2] %(%"'D4.%4 3..4142";3" #";" '(2 24;P313(2 #;(#3(2 :4 %&2 "#'3^
1"13(.42+
K%3'3L" e9k? #";" :4E3.3; %&2 #;(#3(2 24;P313(2+IJ>KD LMN+OG+D
M( :4E3."2 #";ND4%;(2 :4 1(.E35&;"13@. #";" '"2 1'"242 :4 %&2 24;P313(2+IJ>KD LMN+OG+D
Buenas prácticas oficiales de Symfony Capítulo 4. Organizando la lógica de negocio
19
8/17/2019 buenas_practicas_symfony.pdf
http://slidepdf.com/reader/full/buenaspracticassymfonypdf 20/57
-2%" D"'" #;N1%31" %34.4 2& (;354. :4 .&4P( 4. '(2 !"#$%&, :4 %4;14;(2+ B3 :42";;(''"2 &. !"#$%& #";"
1(D#";%3;'( #_<'31"D4.%4] 4.%(.142 #;(<"<'D4.%4 2$ /&4 %34.42 /&4 :4E3.3; #";ND4%;(2 #";" '"2 1'"^
242 :4 %&2 24;P313(2+ Q4;( 23 42%N2 :4E3.34.:( 24;P313(2 3.%4;.(2 /&4 2@'( &%3'3L";N %& "#'31"13@.] 4.%(.^
142 .( Y"C .41423:": :4 Y"14; /&4 2&2 1'"242 24". 1(.E35&;"<'42+
Q2E2 J)$0$S,"#( /", %,-, #& -&5*$*)&"%$,BCDE(.C 42 &. E;"D4V(;\ iUUQ /&4 23D#'4D4.%4 24 4.1";5" :4 54.4;"; ;42#&42%"2 iUUQ " #";%3;
:4 #4%313(.42 iUUQ+ Q(; 42( BCDE(.C .( 3.1'&C4 .3.5&." &%3'3:": #";" 1(D&.31";24 1(. '"2 1"#"2 :4
#4;232%4.13"] 1(D( #(; 4R4D#'( <"242 :4 :"%(2 C 9QA2 4T%4;."2+ 92$ /&4 4;42 '3<;4 :4 421(54; '" '3<;4;$"
( 42%;"%453" /&4 #;4E34;"2 #";" 2('P4.%"; 42%" 1";4.13"+
-. '" #;N1%31" '" D"C(;$" :4 "#'31"13(.42 BCDE(.C Y"14. &2( :4' #;(C41%( O(1%;3.4
`Y%%#abbVVV+:(1%;3.4^#;(R41%+(;5bc #";" :4E3.3; 2& D(:4'( D4:3".%4 '"2 4.%3:":42 C '(2 ;42#(23%(^
;3(2+ 9' 35&"' /&4 1(. 4' ;42%( :4 '" '@531" :4 .45(13(] 24 ;41(D34.:" "'D"14."; '"2 4.%3:":42 :4 O(1^
%;3.4 :4.%;( :4' !"#$%& _..`%29A#
+
?"2 %;42 4.%3:":42 :4E3.3:"2 4. '" "#'31"13@. :4' <'(5 2(. &. <&4. 4R4D#'( :4 1@D( (;5".3L"; 42%"2
1'"242a
/)-7,2)50.&,H#$(C
!" EEE
$" /&$C
$" _..`%29A#C$" S2('()C
!" 3,--#2(E.B.
!" P,/(E.B.$" a/#&E.B.
Q2E212 3, $"7(58,%$F" #& 8,-&( #& T(%)5$"&?"2 4.%3:":42 :4 O(1%;3.4 2(. (<R4%(2 QiQ .(;D"'42 C 1(;;34.%42 1&C" 3.E(;D"13@. 24 "'D"14." 4.
'" <"24 :4 :"%(2+ ?" _.31" 3.E(;D"13@. /&4 %34.4 O(1%;3.4 2(<;4 %&2 4.%3:":42 42 '" 3.E(;D"13@. :4
7+6&3 `7+66(#5 4. 3.5'02c /&4 :4E3."2 #";" 4''"2+ O(1%;3.4 2(#(;%" 1&"%;( E(;D"%(2 #";" :4E3.3; 42%"
3.E(;D"[email protected] e9k?] lk?] QiQ C ".(%"13(.42+
?"2 ".(%"13(.42 2(. 1(. D&1Y" :3E4;4.13" 4' E(;D"%( DN2 1@D(:( C '" D".4;" DN2 N53' :4 :4E3.3; '"
3.E(;D"13@. :4 D"#4(a
2?-#/.?$# _..`%29A#hS2('()i
%/# q,$(&'2#hVLfhf?..'2D ?/ VLfi
%/# q,$(&'2#h3,--,2h3,AA#$(',2/h_&&?)3,AA#$(',2i
B3 %34.42 '" 4T#4;34.13" 2&E3134.%4] #(; 2&#&42%( #&4:42 "'D"14."; '"2 4.%3:":42 :4 O(1%;3.4
4. 1&"'/&34; (%;( :3;41%(;3( :4.%;( :4 /&$C+OMJ+P
K%3'3L" ".(%"13(.42 #";" :4E3.3; '" 3.E(;D"13@. :4 D"#4( :4 '"2 4.%3:":42 :4 O(1^
%;3.4+IJ>KD LMN+OG+D
Capítulo 4. Organizando la lógica de negocio Buenas prácticas oficiales de Symfony
20
8/17/2019 buenas_practicas_symfony.pdf
http://slidepdf.com/reader/full/buenaspracticassymfonypdf 21/57
CKK
K !VLfhS2('()
KC
$A?// P,/(
j$,2/( eaf^bgSf" c 4<i
CKK
K !VLfhb9
K !VLfhx#2#&?(#9v?A%#
K !VLfh3,A%-2\().#c['2(#D#&[]
KC
.&'1?(# *'9i
CKK
K !VLfh3,A%-2\().#c[/(&'2D[]
KC
.&'1?(# *('(A#i
CKK
K !VLfh3,A%-2\().#c[/(&'2D[]
KC
.&'1?(# */A%Di
CKK
K !VLfh3,A%-2\().#c[(#Z([]KC
.&'1?(# *$,2(#2(i
CKK
K !VLfh3,A%-2\().#c[/(&'2D[]
KC
.&'1?(# *?%(B,&S-?'Ai
CKK
K !VLfh3,A%-2\().#c[9?(#('-#[]
KC.&'1?(# *.%GA'/B#9_(i
CKK
K !VLfhV2#g,f?2)\
K (?&D#(S2('()c[3,--#2([n
K -?..#9`)c[.,/([n
K ,&.B?2L#-,1?Ac(&%#
K ]
K !VLfhV&9#&`)\j[.%GA'/B#9_([ c [_"3[k]
KC
.&'1?(# *$,--#2(/i
Buenas prácticas oficiales de Symfony Capítulo 4. Organizando la lógica de negocio
21
8/17/2019 buenas_practicas_symfony.pdf
http://slidepdf.com/reader/full/buenaspracticassymfonypdf 22/57
.%GA'$ 7%2$(',2 ^^$,2/(&%$(\]
j
*(B'/0O.%GA'/B#9_( c 2#I hq?(#g'-#\]i
*(B'/0O$,--#2(/ c 2#I _&&?)3,AA#$(',2\]i
k
CC D#((#&/ ?29 /#((#&/ EEE
k
!(D( %(:(2 '(2 E(;D"%(2 %34.4. 4' D32D( ;4.:3D34.%(] :4 .&4P( 42%" :41323@. 42 &." 1&42%3@. :4 5&2^
%( #4;2(."' C :4 4'453; 4' E(;D"%( 1(. 4' /&4 %_ C %& 4/&3#( (2 4.1(.%;032 DN2 " 5&2%(+
Q2E2C2 T,)(* #& -5/&4,BCDE(.C .( 3.1'&C4 #(; :4E41%( 4' 2(#(;%4 #";" 1;4"; :"%(2 :4 #;&4<"] #(; '( /&4 :4<4;$"2 4R41&%"; 4'
235&34.%4 1(D".:( #";" 3.2%"'"; 4' !"#$%& #";" 1;4"; :"%(2 :4 #;&4<" :4 O(1%;3.4a
* $,-.,/#& &#M%'&# [9,$(&'2#C9,$(&'2#07'Z(%&#/0G%29A#[@[N5[
O42#&02] "1%3P" 4' .&4P( !"#$%& 4. _..y#&2#AE.B.] #4;( Y"L'( 2('"D4.%4 4. 4' 4.%(;.( :4 :42";;(''(
`9#1c C #;&4<"2 `(#/(c] C" /&4 4. #;(:&113@. .( 24 .41423%" C "2$ 4P3%"D(2 /&4 #4."'314 4' ;4.:3D34.^
%(a
%/# ")-7,2)h3,-.,2#2(hQ((.y#&2#Ahy#&2#Ai
$A?// _..y#&2#A #Z(#29/ y#&2#A
j
.%GA'$ 7%2$(',2 &#D'/(#&`%29A#/\]
j
*G%29A#/ c ?&&?)\
CC EEE
]i
'7 \'2^?&&?)\*(B'/0OD#(S21'&,2-#2(\]n ?&&?)\m9#1mn m(#/(m]]] j
CC EEE
*G%29A#/UW c 2#I q,$(&'2#h`%29A#hY'Z(%&#/`%29A#hq,$(&'2#Y'Z(%&#/`%29A#\]n
k
&#(%&2 *G%29A#/i
k
CC EEE
k
Q(; 23D#'313:":] 42 ;41(D4.:"<'4 1;4"; &." _.31" 1'"24 #";" :4E3.3; '(2 :"%(2 :4 #;&4<"
`Y%%#abb2CDE(.C+1(Db:(1bD"2%4;b<&.:'42bO(1%;3.4X3T%&;42o&.:'4b3.:4T+Y%D'pV;3%3.5^23D#'4^
E3T%&;42c + B3 42%" 1'"24 1;414 D&1Y(] :3P3:4 2&2 1(.%4.3:(2 4. P";3"2 1'"242 DN2 #4/&4d"2+
B&#(.34.:( /&4 24 Y"C" :4E3.3:( "' D4.(2 &." 1'"24 1(. ";1Y3P(2 :4 #;&4<" C /&4 4' "1142( " '" <"24:4 :"%(2 42%N <34. 1(.E35&;":(] #&4:42 1";5"; %(:(2 '(2 :"%(2 4R41&%".:( 4' 235&34.%4 1(D".:(a
Capítulo 4. Organizando la lógica de negocio Buenas prácticas oficiales de Symfony
22
8/17/2019 buenas_practicas_symfony.pdf
http://slidepdf.com/reader/full/buenaspracticassymfonypdf 23/57
* .B. ?..C$,2/,A# 9,$(&'2#@7'Z(%&#/@A,?9
3?%An 9?(?G?/# I'AA G# .%&D#9E q, ),% I?2( (, $,2('2%# XCe z X
O .%&D'2D 9?(?G?/#
O A,?9'2D _..`%29A#hq?(?Y'Z(%&#/hVLfhr,?9Y'Z(%&#/
Q2Q2 >*)6"#,5&* #& %F#$A(-' 1@:35( E&4.%4 :4 BCDE(.C8 235&4 '"2 ;41(D4.:"13(.42 :4 '(2 42%N.:";42 QBW^* `Y%%#abbVVV+#Y#^
E35+(;5b#2;b#2;^*bc C QBW^8 `Y%%#abbVVV+#Y#^E35+(;5b#2;b#2;^8bc :4E3.3:(2 #(; '" 1(D&.3:": QiQ+
Q";" DN2 3.E(;D"13@.] #&4:42 '44; 4' ";%$1&'( 2(<;4 '(2 42%N.:";42 :4 1@:35( :4 BDCE(.C
`Y%%#abb2CDE(.C+1(Db:(1b1&;;4.%b1(.%;3<&%3.5b1(:4b2%".:";:2+Y%D'c + U"D<30. #&4:42 &%3'3L"; '"
Y4;;"D34.%" :4 1(.2('" QiQ^!B^X3T4; `Y%%#2abb53%Y&<+1(DbE"<#(%bQiQ^!B^X3T4;c #";" ;4E(;D"%4";
%(:( 4' 1@:35( E&4.%4 :4 %& "#'31"13@. 4. &.(2 #(1(2 245&.:(2 C 1(. '" 5";".%$" :4 .( ;(D#4;'( 1(.
'" "1%&"'3L"13@.+
Buenas prácticas oficiales de Symfony Capítulo 4. Organizando la lógica de negocio
23
8/17/2019 buenas_practicas_symfony.pdf
http://slidepdf.com/reader/full/buenaspracticassymfonypdf 24/57
Esta página se ha dejado vacía a propósito
24
8/17/2019 buenas_practicas_symfony.pdf
http://slidepdf.com/reader/full/buenaspracticassymfonypdf 25/57
+,-.)/0( R2
+(")5(0,#(5&*BCDE(.C 235&4 '" E3'(2(E$" :4 1;4"; 1(.%;('":(;42 D&C #4/&4d(2 C 1'"242 :4 D(:4'( D&C 5;".:42 `4.
3.5'02] /B(# .3#/)3%%&), +#$ '+/ 73$&%,c+ Q(; 42( '(2 1(.%;('":(;42 :4 BCDE(.C 24 1(D#(;%". 1(D( &."
E3." 1"#" :4 1@:35( /&4 &.4 C 1((;:3." '"2 :3E4;4.%42 #";%42 :4 '" "#'31"13@.+
?" ;45'" :4 (;( :4 '(2 1(.%;('":(;4 24 ;42&D4 4. 9J>LJBL] C" /&4 '(2 1(.%;('":(;42 :4<4;$". :4E3.3;
9 P";3"<'42 ( D4.(2] 1(.%4.4; >L "113(.42 ( D4.(2 4 3.1'&3; BL '$.4"2 :4 1@:35( ( D4.(2 4. 1":" "1^
13@.+ 9&./&4 #&4:4 Y"<4; 4T14#13(.42 #&.%&"'42 " 42%" ;45'"] %4 #&4:4 24;P3; 1(D( (;34.%"13@. #";"
2"<4; 1&N.:( %34.42 /&4 ;4E"1%(;3L"; %&2 1(.%;('":(;42 #";" 1(.P4;%3; #";%42 :4 2& 1@:35( 4. 24;P3^
13(2+
!&".:( +.36%+, '(2 1(.%;('":(;42 "' E;"D4V(;\ /&4 42%N2 &%3'3L".:(] #&4:42 "#;(P41Y"; %(:"2 2&2 E&.^
13(."'3:":42 C 42( "&D4.%" %& #;(:&1%3P3:":+
!(D( '(2 1(.%;('":(;42 .( 2(. DN2 /&4 &." 1"#" D&C E3." /&4 "#4."2 1(.%34.4 &."2 #(1"2 '$.4"2 :4
1@:35( #";" &.3; '"2 :3E4;4.%42 #";%42 :4 '" "#'31"13@.] :4:31"; :414."2 :4 Y(;"2 " :42"1(#'"; 424 1@^
:35( ;42#41%( "' E;"D4V(;\ 42 &. %;"<"R( 4.(;D4 /&4 :3E$13'D4.%4 %4 1(D#4.2";N " '" '";5"+
9:4DN2] "' &2"; ".(%"13(.42 #";" 4' 4.;&%"D34.%(] '" 1"1Y0 C '" 245&;3:":] 24 23D#'3E31" 4.(;D4D4.%4
'" 1(.E35&;"13@. :4 '" "#'31"13@.+ e" .( %4.:;N2 /&4 ;4<&21"; 4.%;4 :414."2 :4 ";1Y3P(2 :4 1(.E35&;"^
13@. 1;4":(2 1(. :3E4;4.%42 E(;D"%(2 `e9k?] lk?] QiQc+ 9Y(;" %(:" '" 1(.E35&;"13@. ;4'4P".%4 42%N
R&2%( :(.:4 '" .41423%"2 C &%3'3L" &. _.31( E(;D"%(+
-. ;42&D4.] '" ;41(D4.:"13@. 42 /'#",4)0"* -4-"02'(-' -& 0=<.," /' ('<4,.4 ;42#41%( :4' E;"D4^
V(;\] #4;( "' D32D( %34D#(] ",4)0"* -4-"02'(-' 04# ,4(-*40"/4*'# 7 '0 '(*&-"2.'(-4 "' E;"D4^
V(;\] #";" "#;(P41Y"; %(:"2 2&2 #(23<3'3:":42 :4 '" D".4;" DN2 N53' #(23<'4+
i"L /&4 %&2 1(.%;('":(;42 4T%34.:". :4 '" 1'"24 3,2(&,AA#& <"24 #;(#(;13(.":"
#(; 4' !"#$%& Y&?-#I,&J`%29A# C &2" ".(%"13(.42 #";" :4E3.3; 4' 4.;&%"D34.%(] '"
1"1Y0 C '" 245&;3:": 234D#;4 /&4 24" #(23<'4+
IJ>KD LMN+OG+D
25
8/17/2019 buenas_practicas_symfony.pdf
http://slidepdf.com/reader/full/buenaspracticassymfonypdf 26/57
R212 +("7$A/5,"#( &0 &"5/),8$&")(Q";" 1";5"; %(:"2 '"2 ;&%"2 :4E3.3:"2 1(D( ".(%"13(.42 4. '(2 1(.%;('":(;42 :4' !"#$%& _..`%29A#]
"d":4 '" 235&34.%4 1(.E35&;"13@. 4. 4' ";1Y3P( #;3.13#"' :4 4.;&%"D34.%(a
d ?..C$,27'DC&,%('2DE)-A
?..@
&#/,%&$#@ [!_..`%29A#C3,2(&,AA#&C[
().#@ ?22,(?(',2
-2%" 1(.E35&;"13@. Y"14 /&4 24 1";5&4. %(:"2 '"2 ".(%"13(.42 :4 1&"'/&34; 1(.%;('":(; :4E3.3:( :4.^
%;( :4' :3;41%(;3( /&$C_..`%29A#C3,2(&,AA#&C C :4 %(:(2 2&2 2&<:3;41%(;3(2+ 92$ /&4 23 4. %& "#'31"^
13@. Y"2 :4E3.3:( D&1Y(2 1(.%;('":(;42] #&4:4 24; &." <&4." 3:4" (;5".3L";'(2 4. 2&<:3;41%(;3(2a
l(%0.&,)#$(,OC
!" EEE
$" /&$C$" _..`%29A#C!" EEE$" 3,2(&,AA#&C
!" q#7?%A(3,2(&,AA#&E.B.
!" EEE
!" _.'C# !" EEE# $" EEE
$" `?$J#29C
!" EEE
$" EEE
R2C2 +("7$A/5,"#( 0,* -0,")$00,*
9&./&4 '" ".(%"13@. !g#-.A?(# 42 _%3'] 24 %;"%" :4 '" ".(%"13@. /&4 DN2 7+5(+ 3D#'31"+ e 424 42 4' D(^
%3P( #(; 4' /&4 24 ;41(D34.:" .( &%3'3L";'"+
?" D"C(;$" :4 1(.%;('":(;42 &%3'3L". '" ".(%"13@. !g#-.A?(# 23. #";ND4%;(2] '( /&4 Y"14 DN2 :3E$13' "
'(2 #;(5;"D":(;42 2"<4; 4T"1%"D4.%4 '" #'".%3''" /&4 24 42%N ;4.:4;3L".:(+ 9:4DN2] #";" '(2 #;(5;"^
D":(;42 /&4 4D#34L". 1(. BCDE(.C 42%4 1(D#(;%"D34.%( ;42&'%" 1(.E&2(] C" /&4 245_. 24 4T#'31"
4. '" :(1&D4.%"13@.] '(2 1(.%;('":(;42 :4<4;$". :4P('P4; 1(D( ;42&'%":( &." ;42#&42%" 4. E(;D" :4
(<R4%( L#/.,2/# `" D4.(2 /&4 &%3'3142 '" 1"#" :4 '" P32%" C :4P&4'P"2 &." #'".%3''" ;4.:4;3L":"c+
Q(; _'%3D(] '" ".(%"13@. !g#-.A?(# &%3'3L" '" 1'"24 g#-.A?(#r'/(#2#& #";" &,.".B+) 4' 4P4.%(
J#&2#AE1'#I '".L":( #; 4' E;"D4V(;\+ -2%4 %(,/&#&) 3.%;(:&14 &. 3D#"1%( .( :42#;413"<'4 4. 4' ;4.:3^
D34.%( :4 '" "#'31"13@.+ -. '" "#'31"13@. :4 <'(5] ;4.:4;3L"; '" #(;%":" 1&42%" D4.(2 :4 7 D3'3245&.^
:(2 1&".:( 24 &%3'3L" 4' D0%(:( *(B'/0O#&\] 4. 4' 1(.%;('":(; C DN2 :4 8= D3'3245&.:(2 1&".:(
24 &%3'3L" '" ".(%"13@. !g#-.A?(#+
M( &%3'3142 '" ".(%"13@. !g#-.A?(#\] #";" :4E3.3; '" #'".%3''" &%3'3L":" #(; 4' 1(.^
%;('":(;+IJ>KD LMN+OG+D
Capítulo 5. Controladores Buenas prácticas oficiales de Symfony
26
8/17/2019 buenas_practicas_symfony.pdf
http://slidepdf.com/reader/full/buenaspracticassymfonypdf 27/57
R2E2 +F8( #&4&5.," *&5 0(* %(")5(0,#(5&* ;<87("<!(.23:4;".:( %(:( '( ".%4;3(;] " 1(.%3.&"13@. 24 D&42%;" &. 4R4D#'( :4 1@D( :4<4;$" 24; 4' 1@:35(
:4 '(2 1(.%;('":(;42 :4 &." "#'31"13@. BCDE(.C %$#31"a
2?-#/.?$# _..`%29A#h3,2(&,AA#&i
%/# ")-7,2)h`%29A#hY&?-#I,&J`%29A#h3,2(&,AA#&h3,2(&,AA#&i
%/# "#2/',h`%29A#hY&?-#I,&JSZ(&?`%29A#h3,27'D%&?(',2hL,%(#i
$A?// q#7?%A(3,2(&,AA#& #Z(#29/ 3,2(&,AA#&
j
CKK
K !L,%(#\[C[n 2?-#c[B,-#.?D#[]
KC
.%GA'$ 7%2$(',2 '29#Z_$(',2\]
j*#- c *(B'/0OD#(q,$(&'2#\]0OD#(f?2?D#&\]i
*.,/(/ c *#-0OD#(L#.,/'(,&)\m_..@P,/(m]0O7'29r?(#/(\]i
&#(%&2 *(B'/0O#&\m9#7?%A(C'29#ZEB(-AE(I'Dmn ?&&?)\
m.,/(/m cO *.,/(/
]]i
k
k
R2Q2 J)$0$S,"#( 0(* L,5,8+("V&5)&5B3 4. %& "#'31"13@. &%3'3L"2 O(1%;3.4] 4.%(.142 #&4:42 &%3'3L"; 23 /&34;42 '( /&4 24 ''"D" Q";"D^
!(.P4;%4; `Y%%#abb2CDE(.C+1(Db:(1b1&;;4.%b<&.:'42bB4.23(X;"D4V(;\-T%;"o&.:'4b"..(%"%3(.2b
1(.P4;%4;2+Y%D'c #";" ;4"'3L"; <_2/&4:"2 4. '" <"24 :4 :"%(2 "&%(DN%31"D4.%4 C #"2"; 4' ;42&'%":( "'
1(.%;('":(;+
-R4D#'(
CKK
K !L,%(#\[Cj'9k[n 2?-#c[?9-'2^.,/(^/B,I[]
KC
.%GA'$ 7%2$(',2 /B,I_$(',2\P,/( *.,/(]
j
*9#A#(#Y,&- c *(B'/0O$&#?(#q#A#(#Y,&-\*.,/(]i
&#(%&2 *(B'/0O#&\m?9-'2C.,/(C/B,IEB(-AE(I'Dmn ?&&?)\
m.,/(m cO *.,/(n
m9#A#(#^7,&-m cO *9#A#(#Y,&-0O$&#?(#v'#I\]n
]]ik
K%3'3L" '(2 Q";"D!(.P4;%4; #";" <&21"; '"2 4.%3:":42 O(1%;3.4 "&%(DN%31"D4.%4
234D#;4 /&4 '" <_2/&4:" 24" 24.13''"+IJ>KD LMN+OG+D
Buenas prácticas oficiales de Symfony Capítulo 5. Controladores
27
8/17/2019 buenas_practicas_symfony.pdf
http://slidepdf.com/reader/full/buenaspracticassymfonypdf 28/57
?( Y"<3%&"' 4. 42%4 %3#( :4 1(.%;('":(;42 1(.232%4 4. #"2"; 1(D( #";ND4%;( " /B,I_$(',2\] 4' *'9
:4' ";%$1&'( /&4 24 /&34;4 '44;+ B3. 4D<";5(] "' &%3'3L"; 1(D( #";ND4%;( '" P";3"<'4 *.,/( 1(. 4' %3#(
:4 :"%( P,/( `4. 3.5'02 " 42%" %01.31" 24 '4 ''"D" /06& B(#/(#5c] BCDE(.C "#'31" &. A+)+7>3#9&)/&) #"^
;" <&21"; "&%(DN%31"D4.%4 4' (<R4%( 1&C( "%;3<&%( '9 1(3.13:" 1(. 4' P"'(; *'9 (<%4.3:( D4:3".%4 '"
;&%"+ B3 .( 24 4.1&4.%;" .3.5_. (<R4%(] 24 D&42%;" "&%(DN%31"D4.%4 &." #N53." :4 4;;(; ><>+
R2Q212 M&,0$S,"#( 4Y*?/&#,* 86* ,V,"S,#,*-' 4R4D#'( ".%4;3(; E&.13(." 23. %4.4; /&4 ;4"'3L"; .3.5&." 1(.E35&;"13@. ":313(."' #(;/&4 j'9k
1(3.13:4 4T"1%"D4.%4 1(. 4' .(D<;4 :4 &." 4.%3:":+ !&".:( 42%( .( 2&14:4] ( 23 /&34;42 Y"14; <_2^
/&4:"2 DN2 1(D#'4R"2] #&4:4 ;42&'%"; DN2 24.13''( ;4"'3L"; '" <_2/&4:" :4 O(1%;3.4 " D".(+ -2%( 42
#(; 4R4D#'( '( /&4 2&14:4 4. '" 1'"24 3,--#2(3,2(&,AA#& :4 '" "#'31"[email protected]
CKK
K !L,%(#\[C$,--#2(Cj.,/("A%DkC2#I[n 2?-# c [$,--#2(^2#I[]
KC
.%GA'$ 7%2$(',2 2#I_$(',2\L#M%#/( *&#M%#/(n *.,/("A%D]j
*.,/( c *(B'/0OD#(q,$(&'2#\]
0OD#(L#.,/'(,&)\m_..`%29A#@P,/(m]
0O7'29V2#`)\?&&?)\m/A%Dm cO */A%D]]i
'7 \{*.,/(] j
(B&,I *(B'/0O$&#?(#e,(Y,%29SZ$#.(',2\]i
k
CC EEE
k
Q(; 2&#&42%( %"D<30. #(:;$"2 &%3'3L"; '" 1(.E35&;"13@. "P".L":" :4 !P?&?-3,21#&(#& #(;/&4 42 <"2^
%".%4 E'4T3<'4a
%/# "#2/',h`%29A#hY&?-#I,&JSZ(&?`%29A#h3,27'D%&?(',2hL,%(#i
%/# "#2/',h`%29A#hY&?-#I,&JSZ(&?`%29A#h3,27'D%&?(',2hP?&?-3,21#&(#&i
CKK
K !L,%(#\[C$,--#2(Cj.,/("A%DkC2#I[n 2?-# c [$,--#2(^2#I[]
K !P?&?-3,21#&(#&\[.,/([n ,.(',2/cj[-?..'2D[@ j[.,/("A%D[@ [/A%D[kk]KC
.%GA'$ 7%2$(',2 2#I_$(',2\L#M%#/( *&#M%#/(n P,/( *.,/(]
j
CC EEE
k
?" 1(.1'&23@. 42 /&4 '(2 A+)+7>3#9&)/&) 2(. 54.3"'42 #";" 1"2(2 24.13''(2] #4;( .( :4<4;$"2 ('P3:";
/&4 Y"14; '"2 1(.2&'%"2 O(1%;3.4 " D".( %"D<30. 42 <"2%".%4 24.13''(+
Capítulo 5. Controladores Buenas prácticas oficiales de Symfony
28
8/17/2019 buenas_practicas_symfony.pdf
http://slidepdf.com/reader/full/buenaspracticassymfonypdf 29/57
R2R2 >Z&%/),"#( %F#$A( ,")&* < #&*-/@* #&0 %(")5(0,#(5B3 /&34;42 4R41&%"; 134;%( 1@:35( ".%42 ( :42#&02 :4 '" 4R41&13@. :4 '(2 1(.%;('":(;42 :4 '" "#'31"13@.]
&%3'3L" 4' 1(D#(.4.%4 <9&#/D(,6+/.B&) %"' C 1(D( 24 4T#'31" 4. 4' ";%$1&'( ;3* /3 -&/"6 !&'3)& +#$ +'/&)
E(%/&), `Y%%#abb2CDE(.C+1(Db:(1b1&;;4.%b1((\<((\b4P4.%h:32#"%1Y4;b<4E(;4h"E%4;hE3'%4;2+Y%D'c +
Buenas prácticas oficiales de Symfony Capítulo 5. Controladores
29
8/17/2019 buenas_practicas_symfony.pdf
http://slidepdf.com/reader/full/buenaspracticassymfonypdf 30/57
Esta página se ha dejado vacía a propósito
30
8/17/2019 buenas_practicas_symfony.pdf
http://slidepdf.com/reader/full/buenaspracticassymfonypdf 31/57
+,-.)/0( [2
L0,")$00,*!&".:( 24 #&<'31@ QiQ #(; #;3D4;" P4L Y"14 DN2 :4 8J "d(2] " '(2 #;(5;"D":(;42 '42 4.1".%@ 2& 24.^
13''4L C '( EN13' /&4 4;" D4L1'"; 1@:35( QiQ 1(. 1@:35( iUk?+ B3. 4D<";5(] 1(. 4' #"2( :4' %34D#( ".
2&;53:( '4.5&"R42 :4 #'".%3''"2 1(D( UV35 `Y%%#abb%V35+24.23('"<2+(;5bc /&4 2(. D&1Y( D4R(;42 #";"
1;4"; '"2 #'".%3''"2 :4 '"2 "#'31"13(.42+
-. 54.4;"'] '"2 #'".%3''"2 QiQ 2(. D&1Y( DN2 P4;<(2"2 /&4 '"2 #'".%3''"2 UV35 #(;/&4 .( %34.4. 2(^
#(;%4 ."%3P( #";" D&1Y"2 :4 '"2 E&.13(."'3:":42 /&4 .41423%". '"2 #'".%3''"2 D(:4;."2] %"'42 1(D( '"Y4;4.13"] 4' &,.+6+$3 "&%(DN%31( :4 3.E(;D"13@. C '(2 E3'%;(2+
UV35 42 4' E(;D"%( #(; :4E41%( :4 '"2 #'".%3''"2 BCDE(.C C 42 4' E(;D"%( :32%3.%( " QiQ 1(. '" D"C(;
1(D&.3:": :4 &2&";3(2] C" /&4 24 &%3'3L" 4. #;(C41%(2 %". 3D#(;%".%42 1(D( O;&#"' G+
Q(; _'%3D(] UV35 42 4' _.31( E(;D"%( /&4 %34.4. 5";".%3L":( 4' 2(#(;%4 4. '" E&%&;" P4;23@. BCDE(.C
>+J+ U".%( 42 "2$] /&4 42 D&C #(23<'4 /&4 :42"#";4L1" 4' 2(#(;%4 :4 #'".%3''"2 QiQ+
[212 P5A,"$S,"#( 0,* -0,")$00,*
?" D"C(;$" :4 #;(5;"D":(;42 BCDE(.C "'D"14." '"2 #'".%3''"2 :4 '" "#'31"13@. 4. '(2 :3;41%(;3(2
L#/,%&$#/C1'#I/C :4 1":" !"#$%&+ O42#&02 &%3'3L". 4' #37!)& %85(.3 :4 '" #'".%3''" #";" ;4E4;3;24 " 4''"
`4R4D#'( _$-#q#-,`%29A#@q#7?%A(@'29#ZEB(-AE(I'Dc+
9&./&4 42%" #;N1%31" 42 1(;;41%" #";" '(2 !"#$%&, :4 %4;14;(2] 4. 4' 1"2( :4 '"2 #'".%3''"2 :4 '" "#'31"^
13@. 42 D&1Y( DN2 1@D(:( "'D"14.";'"2 4. 4' :3;41%(;3( ?..CL#/,%&$#/C1'#I/C+ -' #;3D4; D(%3P( 42
/&4 24 23D#'3E31" :4 D".4;" ;":31"' 4' #37!)& %85(.3 :4 '"2 #'".%3''"2a
K%3'3L" 2('"D4.%4 UV35 #";" 1;4"; %&2 #'".%3''"2+IJ>KD LMN+OG+D
9'D"14." %(:"2 '"2 #'".%3''"2 :4 '" "#'31"13@. 4. 4' :3;41%(;3( ?..CL#/,%&$#/C
1'#I/C+IJ>KD LMN+OG+D
31
8/17/2019 buenas_practicas_symfony.pdf
http://slidepdf.com/reader/full/buenaspracticassymfonypdf 32/57
L0,")$00,* ,08,%&",#,* &" !"#$%&' L0,")$00,* ,08,%&",#,* &" ?..C?..C
_$-#q#-,`%29#@q#7?%A(@'29#ZEB(-AE(I'D 9#7?%A(C'29#ZEB(-AE(I'D
@@A?),%(EB(-AE(I'D A?),%(EB(-AE(I'D
_$-#q#-,`%29A#@@'29#ZEB(-AE(I'D '29#ZEB(-AE(I'D
_$-#q#-,`%29A#@q#7?%A(@/%G9'&C'29#ZEB(-AE(I'D 9#7?%A(C/%G9'&C'29#ZEB(-AE(I'D
_$-#q#-,`%29A#@q#7?%A(C/%G9'&@'29#ZEB(-AE(I'D 9#7?%A(C/%G9'&C'29#ZEB(-AE(I'D
S%;" :4 '"2 P4.%"R"2 :4 14.%;"'3L"; %(:"2 '"2 #'".%3''"2 42 /&4 24 23D#'3E31" D&1Y( 4' %;"<"R( :4 %& 4/&3^
#( ')3#/&#$ C :4 %&2 :324d":(;42+ e" .( 42 .4142";3( <&21"; '"2 #'".%3''"2 4.%;4 :414."2 :4 :3;41%(;3(2
#(;/&4 %(:"2 24 4.1&4.%;". 4. 4' D32D( '&5";+
[2C2 >\)&"*$("&* O9$A
9 '" "#'31"13@. :4' <'(5 '4 P4.:;$" D&C <34. &. E3'%;( :4 UV35 ''"D":( -95B(-A /&4 %;".2E(;D4 4' 1(.^
%4.3:( k";\:(V. 4. 1(.%4.3:( iUk?+
9.%42 :4 1;4"; 42%4 E3'%;(] "d":4 1(D( :4#4.:4.13" :4 %& #;(C41%( '" 4T14'4.%4 '3<;4;$" Q";24:(V.
`Y%%#abb#";24:(V.+(;5bc /&4 %;".2E(;D" 4' 1@:35( k";\:(V. 4. iUk?+ Q";" 4''(] 4R41&%" 4' 235&34.%4
1(D".:( 4. '" 1(.2('"a
* $,-.,/#& &#M%'&# #&%/#1C.?&/#9,I2
O42#&02] :4E3.4 &. .&4P( 24;P313( ''"D":( -?&J9,I2 #";" /&4 '( &%3'314 '" 4T%4.23@. :4 UV35+ -. 42%4
1"2( '" :4E3.313@. :4' 24;P313( 42 %. 23D#'4 1(D( 3.:31"; '" ;&%" " '" 1'"24 QiQ "2(13":"a
d ?..C$,27'DC/#&1'$#/E)-A
/#&1'$#/@
d EEE
-?&J9,I2@$A?//@ _..`%29A#ha('A/hf?&J9,I2
-2%" 1'"24 f?&J9,I2 :4E3.4 &. _.31( D0%(:( /&4 %;".2E(;D" 4' 1(.%4.3:( k";\:(V. #"2":( 1(D( ";^
5&D4.%( 4. 1(.%4.3:( iUk?a
2?-#/.?$# _..`%29A#ha('A/i
$A?// f?&J9,I2
j
.&'1?(# *.?&/#&i
.%GA'$ 7%2$(',2 ^^$,2/(&%$(\]
O4E3.4 %&2 4T%4.23(.42 UV35 4. 4' :3;41%(;3( _..`%29A#CgI'DC C 1(.E35_;"'"2 4. 4'
";1Y3P( ?..C$,27'DC/#&1'$#/E)-A+IJ>KD LMN+OG+D
Capítulo 6. Plantillas Buenas prácticas oficiales de Symfony
32
8/17/2019 buenas_practicas_symfony.pdf
http://slidepdf.com/reader/full/buenaspracticassymfonypdf 33/57
j
*(B'/0O.?&/#& c 2#I hP?&/#9,I2\]i
k
.%GA'$ 7%2$(',2 (,Q(-A\*(#Z(]
j*B(-A c *(B'/0O.?&/#&0O(#Z(\*(#Z(]i
&#(%&2 *B(-Ai
k
k
9Y(;" C" #&4:42 1;4"; '" 4T%4.23@. UV35 #";" :4E3.3; &. .&4P( E3'%;( ''"D":( -95B(-A D4:3".%4 '"
1'"24 gI'D^"'-.A#Y'A(#&+ M( ('P3:42 3.C41%"; 4' 24;P313( -?&J9,I2 4. 4' 1(.2%;&1%(; :4 '" 4T%4.23@.
UV35a
2?-#/.?$# _..`%29A#hgI'Di
%/# _..`%29A#ha('A/hf?&J9,I2i
$A?// _..SZ(#2/',2 #Z(#29/ hgI'D^SZ(#2/',2
j
.&'1?(# *.?&/#&i
.%GA'$ 7%2$(',2 ^^$,2/(&%$(\f?&J9,I2 *.?&/#&]
j
*(B'/0O.?&/#& c *.?&/#&ik
.%GA'$ 7%2$(',2 D#(Y'A(#&/\]
j
&#(%&2 ?&&?)\
2#I hgI'D^"'-.A#Y'A(#&\
m-95B(-Amn
?&&?)\*(B'/n m-?&J9,I2g,Q(-Am]n
?&&?)\m'/^/?7#m cO ?&&?)\mB(-Am]]
]n
]ik
.%GA'$ 7%2$(',2 -?&J9,I2g,Q(-A\*$,2(#2(]
j
&#(%&2 *(B'/0O.?&/#&0O(,Q(-A\*$,2(#2(]i
k
.%GA'$ 7%2$(',2 D#(e?-#\]
j
&#(%&2 m?..^#Z(#2/',2mi
k
k
Buenas prácticas oficiales de Symfony Capítulo 6. Plantillas
33
8/17/2019 buenas_practicas_symfony.pdf
http://slidepdf.com/reader/full/buenaspracticassymfonypdf 34/57
Q";" #(:4; &%3'3L"; '" 4T%4.23@. :4 UV35 4. '" "#'31"13@.] :4E3.4 &. .&4P( 24;P313( C 4%3/&0%"'( 1(.
'" 4%3/&4%" (I'DE#Z(#2/',2 `4' .(D<;4 :4 42%4 24;P313( 42 3;;4'4P".%4 #(;/&4 .( '( P"2 " &2"; :3;41%"^
D4.%4 4. '" "#'31"[email protected]
d ?..C$,27'DC/#&1'$#/E)-A
/#&1'$#/@?..E(I'DE?..^#Z(#2/',2@
$A?//@ _..`%29A#hgI'Dh_..SZ(#2/',2
?&D%-#2(/@ U[!-?&J9,I2[W
(?D/@
0 j 2?-#@ (I'DE#Z(#2/',2 k
Capítulo 6. Plantillas Buenas prácticas oficiales de Symfony
34
8/17/2019 buenas_practicas_symfony.pdf
http://slidepdf.com/reader/full/buenaspracticassymfonypdf 35/57
+,-.)/0( ]2
^(58/0,5$(*?(2 E(;D&'";3(2 2(. &." :4 '"2 #";%42 :4 BCDE(.C /&4 #4(; 24 &%3'3L".] :4<3:( " 2& 5;". 1(D#'4R3:": C
2& 3.%4;D3."<'4 '32%" :4 E&.13(."'3:":42+ -. 42%4 1"#$%&'( 24 D&42%;". "'5&."2 :4 '"2 <&4."2 #;N1%31"2
/&4 #&4:4. Y"14;%4 "#;(P41Y"; '(2 E(;D&'";3(2 :4 &." D".4;" 24.13''"+
]212 +5&,"#( 0(* 7(58/0,5$(*
-' 1(D#(.4.%4 E3)7 #4;D3%4 1;4"; '(2 E(;D&'";3(2 :3;41%"D4.%4 :4.%;( :4 '(2 1(.%;('":(;42+ B3 4'
E(;D&'";3( 42 #4/&4d( C .( P"2 " ;4&%3'3L";'( .&.1"] .( 42 3.1(;;41%( :4E3.3;'( :4.%;( :4' #;(#3( 1(.^
%;('":(;+ Q4;( #";" E(;D&'";3(2 1(D#'4R(2 /&4 24 ;4&%3'3L". 4. D&1Y"2 #";%42 :4 '" "#'31"13@.] 42 ;4^
1(D4.:"<'4 :4E3.3; 1":" E(;D&'";3( 4. 2& #;(#3" 1'"24 QiQa
2?-#/.?$# _..`%29A#hY,&-i
%/# ")-7,2)h3,-.,2#2(hY,&-h_G/(&?$(g).#i
%/# ")-7,2)h3,-.,2#2(hY,&-hY,&-`%'A9#&b2(#&7?$#i
%/# ")-7,2)h3,-.,2#2(hV.(',2/L#/,A1#&hV.(',2/L#/,A1#&b2(#&7?$#i
$A?// P,/(g).# #Z(#29/ _G/(&?$(g).#j
.%GA'$ 7%2$(',2 G%'A9Y,&-\Y,&-`%'A9#&b2(#&7?$# *G%'A9#&n ?&&?) *,.(',2/]
j
*G%'A9#&
0O?99\m('(A#m]
0O?99\m/%--?&)mn m(#Z(?&#?m]
0O?99\m$,2(#2(mn m(#Z(?&#?m]
0O?99\m?%(B,&S-?'Amn m#-?'Am]
0O?99\m.%GA'/B#9_(mn m9?(#('-#m]
i
k
O4E3.4 '(2 E(;D&'";3(2 1(D( 1'"242 QiQ+IJ>KD LMN+OG+D
35
8/17/2019 buenas_practicas_symfony.pdf
http://slidepdf.com/reader/full/buenaspracticassymfonypdf 36/57
.%GA'$ 7%2$(',2 /#(q#7?%A(V.(',2/\V.(',2/L#/,A1#&b2(#&7?$# *&#/,A1#&]
j
*&#/,A1#&0O/#(q#7?%A(/\?&&?)\
m9?(?^$A?//m cO m_..`%29A#hS2('()hP,/(m
]]i
k
.%GA'$ 7%2$(',2 D#(e?-#\]
j
&#(%&2 m.,/(mi
k
k
Q";" &%3'3L"; 42%" 1'"24 4. &. 1(.%;('":(;] 4D#'4" 4' "%"R( $&#?(#Y,&- 4 3.2%".13" &." .&4P" 1'"24 :4
%3#( E(;D&'";3(a
%/# _..`%29A#hY,&-hP,/(g).#iCC EEE
.%GA'$ 7%2$(',2 2#I_$(',2\L#M%#/( *&#M%#/(]
j
*.,/( c 2#I P,/(\]i
*7,&- c *(B'/0O$&#?(#Y,&-\2#I P,/(g).#\]n *.,/(]i
CC EEE
k
]21212 M&A$*)5,"#( 7(58/0,5$(* %(8( *&5V$%$(*BCDE(.C #4;D3%4 ;4532%;"; '(2 E(;D&'";3(2 1(D( 24;P313(2 `Y%%#abb2CDE(.C+1(Db:(1b1&;;4.%b1((\^
<((\bE(;Db1;4"%4h1&2%(DhE34':h%C#4+Y%D'p1;4"%3.5^C(&;^E34':^%C#4^"2^"^24;P314c ] #4;( .( '( ;41(^
D4.:"D(2 " D4.(2 /&4 P"C"2 " ;4&%3'3L"; 424 %3#( :4 E(;D&'";3( 4. D&1Y(2 23%3(2 :3E4;4.%42 ( P"C"2
" 4D<4<4;'( :4.%;( :4 (%;(2 E(;D&'";3(2 D4:3".%4 4' %3#( q1(''41%3(.q `Y%%#abb2CDE(.C+1(Db:(1b1&^
;;4.%b;4E4;4.14bE(;D2b%C#42b1(''41%3(.+Y%D'c +
-. '" D"C(;$" :4 '(2 1"2(2] '(2 E(;D&'";3(2 2('"D4.%4 24 &%3'3L". #";" 1;4"; ( D(:3E31"; 3.E(;D"13@.]
#(; '( /&4 ;4532%;";'(2 1(D( 24;P313(2 42 %(%"'D4.%4 3..4142";3(+ 9:4DN2] 42%( Y"14 /&4 24" DN2 :3E$^
13' 2"<4; 4T"1%"D4.%4 /&0 1'"24 :4 E(;D&'";3( 24 42%N &%3'3L".:( :4.%;( :4' 1(.%;('":(;+
]2C2 +("7$A/5,"#( 0(* 4()("&* #&0 7(58/0,5$(?"2 1'"242 :4 E(;D&'";3(2 :4<4;$". 24; "5.@2%31"2 ;42#41%( " :@.:4 24 P". " &%3'3L";+ O4 42%" D".4;"
'(2 E(;D&'";3(2 24 #(:;N. ;4&%3'3L"; DN2 EN13'D4.%4+
O42:4 '" P4;23@. 8+7 :4 BCDE(.C 42 #(23<'4 "d":3; <(%(.42 1(D( 1"D#(2 :4 %&2 #;(#3(2 E(;D&'";3(2+
?" P4.%"R" 42 /&4 "2$ 24 23D#'3E31" 4' 1@:35( :4 '" #'".%3''" /&4 D&42%;" 4' E(;D&'";3(+ ?" :42P4.%"R" 42/&4 "' "d":3; '(2 <(%(.42 "' #;(#3( E(;D&'";3(] 42%N2 '3D3%".:( 2& E&.13(."'3:":a
9d":4 '(2 <(%(.42 :4 '(2 E(;D&'";3(2 4. '"2 #'".%3''"2] .( 4. '"2 1'"242 :4 E(;D&'"^
;3( ( 4. '(2 1(.%;('":(;42+IJ>KD LMN+OG+D
Capítulo 7. Formularios Buenas prácticas oficiales de Symfony
36
8/17/2019 buenas_practicas_symfony.pdf
http://slidepdf.com/reader/full/buenaspracticassymfonypdf 37/57
$A?// P,/(g).# #Z(#29/ _G/(&?$(g).#
j
.%GA'$ 7%2$(',2 G%'A9Y,&-\Y,&-`%'A9#&b2(#&7?$# *G%'A9#&n ?&&?) *,.(',2/]
j
*G%'A9#&
CC EEE0O?99\m/?1#mn m/%G-'(mn ?&&?)\mA?G#Am cO m3&#?(# P,/(m]]
i
k
CC EEE
k
S;353."'D4.%4 42%4 E(;D&'";3( 24 :324d( #";" 1;4"; ";%$1&'(2 :4' <'(5 C #(; 42( 3.1'&C4 4' <(%@. >)&+/&
A3,/ + B3. 4D<";5(] 42%4 E(;D&'";3( #(:;$" ;4&%3'3L";24 %"D<30. #";" '" "113@. :4 D(:3E31"; '(2 ";%$1&^
'(2+ -. 42%4 1"2( 4' %4T%( :4' <(%@. 24;$" 3.1(;;41%(] C" /&4 .( 42%N2 .)&+#$3 ";%$1&'(2 23.( 73$('(.@#:
$3%3,+ Q";" 4P3%"; 42%(2 #;(<'4D"2] "'5&.(2 #;(5;"D":(;42 #;4E34;4. "d":3; '(2 <(%(.42 :3;41%"D4.%4
4. 4' 1(.%;('":(;a
2?-#/.?$# _..`%29A#h3,2(&,AA#&h_9-'2i
%/# ")-7,2)h3,-.,2#2(hQ((.Y,%29?(',2hL#M%#/(i
%/# ")-7,2)h`%29A#hY&?-#I,&J`%29A#h3,2(&,AA#&h3,2(&,AA#&i
%/# _..`%29A#hS2('()hP,/(i
%/# _..`%29A#hY,&-hP,/(g).#i
$A?// P,/(3,2(&,AA#& #Z(#29/ 3,2(&,AA#&j
CC EEE
.%GA'$ 7%2$(',2 2#I_$(',2\L#M%#/( *&#M%#/(]
j
*.,/( c 2#I P,/(\]i
*7,&- c *(B'/0O$&#?(#Y,&-\2#I P,/(g).#\]n *.,/(]i
*7,&-0O?99\m/%G-'(mn m/%G-'(mn ?&&?)\
mA?G#Am cO m3&#?(#mn
m?((&m cO ?&&?)\m$A?//m cO mG(2 G(209#7?%A( .%AA0&'DB(m]
]]i
CC EEE
k
k
-2%" 2('&13@. %"D<30. 42 &. 4;;(;] C" /&4 42%N2 D4L1'".:( 4' 1@:35( :4 '"2 #'".%3''"2 ̀ 4%3/&4%"2] 1'"242
!BB] 4%1+c 1(. 4' 1@:35( QiQ #&;( :4' 1(.%;('":(;+ B4#";"; '"2 :3E4;4.%42 1"#"2 :4 '" "#'31"13@. 42 &."
<&4." #;N1%31" /&4 234D#;4 :4<4;$"2 245&3;+ Q(; 42( 42 D4R(; 1('(1"; %(:( '( ;4'"13(.":( 1(. '" P32%"
4. '"2 #;(#3"2 #'".%3''"2a
Buenas prácticas oficiales de Symfony Capítulo 7. Formularios
37
8/17/2019 buenas_practicas_symfony.pdf
http://slidepdf.com/reader/full/buenaspracticassymfonypdf 38/57
l7,&- -#(B,9c[PV"g[ jj 7,&-^#2$().#\7,&-] kkO
jj 7,&-^I'9D#(\7,&-] kk
l'2.%( ().#c[/%G-'([ 1?A%#c[3&#?(#[
$A?//c[G(2 G(209#7?%A( .%AA0&'DB([ CO
lC7,&-O
]2E2 M&"#&5$S,"#( &0 7(58/0,5$(BCDE(.C #4;D3%4 ;4.:4;3L"; '(2 E(;D&'";3(2 :4 D&1Y"2 E(;D"2 :3E4;4.%42] :42:4 ;4.:4;3L"; %(:( 4'
E(;D&'";3( " '" P4L 1(. &." 3.2%;&113@. Y"2%" ;4.:4;3L"; 1":" &." :4 '"2 #";%42 /&4 E(;D". 1":" 1"D^
#( :4 E(;D&'";3(+ ?" D4R(; D".4;" :4 ;4.:4;3L"; 4' E(;D&'";3( 234D#;4 :4#4.:4 :4 1&N.%( .41423%42
#4;2(."'3L"; '(2 E(;D&'";3(2+
?( DN2 24.13''(] 42#413"'D4.%4 :&;".%4 4' :42";;(''( :4 '" "#'31"13@.] 42 1;4"; '"2 4%3/&4%"2 l7,&-O C
lC7,&-O " D".( C :42#&02 &%3'3L"; '" E&.13@. 7,&-^I'9D#(\] #";" ;4.:4;3L"; %(:(2 '(2 1"D#(2 :4' E(;^
D&'";3(a
l7,&- -#(B,9c[PV"g[ jj 7,&-^#2$().#\7,&-] kkO
jj 7,&-^I'9D#(\7,&-] kk
lC7,&-O
?(2 #;(5;"D":(;42 BCDE(.C DN2 4T#4;3D4.%":(2 24 Y"<;N. :":( 1&4.%" :4 /&4 4. 4' 4R4D#'( ".%4^
;3(; .( 24 &%3'3L". '"2 E&.13(.42 7,&-^/(?&(\] ( 7,&-\] #";" ;4.:4;3L"; '" 4%3/&4%" l7,&-O :4' E(;D&^'";3(+ -' D(%3P( 42 /&4] "&./&4 '"2 E&.13(.42 2(. D&C 1@D(:"2] .( "#(;%". %".%"2 P4.%"R"2 %4.34.:(
4. 1&4.%" /&4 ;4:&14. '354;"D4.%4 '" '453<3'3:": :4' E(;D&'";3(+
B3 /&34;42 1(.%;('"; :4 D".4;" DN2 #;4132" 1@D( 24 ;4.:4;3L". '(2 1"D#(2 :4' E(;D&'";3(] .( &%3'3142
'" E&.13@. 7,&-^I'9D#(\7,&-] C 4. 2& '&5";] ;4.:4;3L" 1":" 1"D#( :4 E(;D&'";3( 3.:3P3:&"'D4.%4+
!(.2&'%" 4' ";%$1&'( ;3* /3 >",/37(F& E3)7 G&#$&)(#5 `Y%%#abb2CDE(.C+1(Db:(1b1&;;4.%b1((\<((\b
E(;DbE(;Dh1&2%(D3L"%3(.+Y%D'c #";" 2"<4; 1@D( Y"14;'( C #";" "#;4.:4; " :4E3.3; %4D"2 :4 E(;D&^
'";3(+
]2Q2 L5(%&*,"#( &0 &"V.( #& 7(58/0,5$(*-' #;(142"D34.%( :4 '(2 E(;D&'";3(2 BCDE(.C 4. '(2 1(.%;('":(;42 :4<4;$" 245&3; '" 235&34.%4 42%;&1^
%&;"a
.%GA'$ 7%2$(',2 2#I_$(',2\L#M%#/( *&#M%#/(]
j
CC $&#?& #A 7,&-%A?&', EEE
*7,&-0OB?29A#L#M%#/(\*&#M%#/(]i
M( &%3'3142 '"2 E&.13(.42 7,&-\]] 7,&-^/(?&(\] ( 7,&-^#29\] #";" ;4.:4;3L"; '"2
4%3/&4%"2 :4 "#4;%&;" C 134;;4 :4' E(;D&'";3(+IJ>KD LMN+OG+D
?" _.31" 4T14#13@. 42 4' E(;D&'";3( #";" <(;;"; ";%$1&'(2 #(;/&4 42 %". 23D#'4 /&4 2& _.31(
1(.%4.3:( 42 &. <(%@. C 4.%(.142 2$ /&4 D4;414 '" #4." &%3'3L"; 42%(2 "%"R(2+OMJ+P
Capítulo 7. Formularios Buenas prácticas oficiales de Symfony
38
8/17/2019 buenas_practicas_symfony.pdf
http://slidepdf.com/reader/full/buenaspracticassymfonypdf 39/57
'7 \*7,&-0O'/"%G-'((#9\] uu *7,&-0O'/v?A'9\]] j
*#- c *(B'/0OD#(q,$(&'2#\]0OD#(f?2?D#&\]i
*#-0O.#&/'/(\*.,/(]i
*#-0O7A%/B\]i
&#(%&2 *(B'/0O	'&#$(\*(B'/0OD#2#&?(#a&A\
m?9-'2^.,/(^/B,Imn
?&&?)\m'9m cO *.,/(0OD#(b9\]]
]]i
k
CC #&'R?& A? .A?2('AA? EEE
k
-. 4' 1@:35( ".%4;3(; 42 3D#(;%".%4 E3R";24 4. :(2 1(2"2+ Q;3D4;(] 42 D4R(; &%3'3L"; &." _.31" "113@.
%".%( #";" D(2%;"; 4' E(;D&'";3( 1(D( #";" #;(142";'(+ 9&./&4 #(:;$"2 Y"<4; :4E3.3:( &." "[email protected]#I_$(',2 /&4 2('"D4.%4 D&42%;4 4' E(;D&'";3( C :42#&02 (%;" "113@. $&#?(#_$(',2 /&4 2@'( 24 4.^
1";5&4 :4 #;(142";'(] '"2 :(2 "113(.42 24;$". #;N1%31"D4.%4 3:0.%31"2+ 92$ /&4 42 D&1Y( DN2 EN13' 23
'" "113@. 2#I_$(',2 24 4.1";5" :4 '"2 :(2 %";4"2+
-. 245&.:( '&5";] %4 "1(.24R"D(2 /&4 "d":"2 4' D0%(:( *7,&-0O'/"%G-'((#9\] :4.%;( :4 '" 3.2%;&1^
13@. '7 #";" Y"14; 4' 1@:35( DN2 1'";(+ U01.31"D4.%4 .( 42 .4142";3( Y"14;'(] C" /&4 4' D0%(:(
'/v?A'9\] 4R41&%" #;3D4;( 4' D0%(:( '/"%G-'((#9\]+ Q4;( 23 .( '( "d":42] 4' E'&R( :4 4R41&13@. :4'
E(;D&'";3( /&4:" &. #(1( ;";(] C" /&4 #";414 /&4 234D#;4 24 42%N #;(142".:( 4' E(;D&'";3(] 3.1'&2(
4. '"2 #4%313(.42 xSg /&4 23D#'4D4.%4 '( D&42%;".+
Buenas prácticas oficiales de Symfony Capítulo 7. Formularios
39
8/17/2019 buenas_practicas_symfony.pdf
http://slidepdf.com/reader/full/buenaspracticassymfonypdf 40/57
Esta página se ha dejado vacía a propósito
40
8/17/2019 buenas_practicas_symfony.pdf
http://slidepdf.com/reader/full/buenaspracticassymfonypdf 41/57
+,-.)/0( _2
G")&5",%$(",0$S,%$F"?" 3.%4;."13(."'3L"13@. C '" '(1"'3L"13@. 24 4.1";5". :4 ":"#%"; '"2 "#'31"13(.42 C 2&2 1(.%4.3:(2 #";"
'" ;453@. ( 3:3(D" 42#41$E31(2 :4' &2&";3(+ -. BCDE(.C 42%" E&.13(."'3:": 42 (#13(."' C #(; 42( :4<42
"1%3P";'" ".%42 :4 &%3'3L";'"+ Q";" 4''(] :421(D4.%" '" (#13@. :4 1(.E35&;"13@. (&?2/A?(,& C :4E3.4 4'
3:3(D" #(; :4E41%( :4 '" "#'31"[email protected]
d ?..C$,27'DC$,27'DE)-A
7&?-#I,&J@
d EEE
(&?2/A?(,&@ j 7?AAG?$J@ [wA,$?A#w[ k
d ?..C$,27'DC.?&?-#(#&/E)-A
.?&?-#(#&/@
d EEE
A,$?A#@ #2
_212 ^(58,)( #& 0(* ,5%`$V(* #& )5,#/%%$F"-' 1(D#(.4.%4 H)+#,%+/(3# :4 BCDE(.C 2(#(;%" D&1Y(2 E(;D"%(2 :3E4;4.%42 #";" 1;4"; '(2 ";1Y3P(2 :4
%;":&[email protected] QiQ] r%] E.,] E-,] [BSM] !Bs] AMA] 4%1+
O4 %(:(2 '(2 E(;D"%(2 :4 %;":&113@. :32#(.3<'42] 2('"D4.%4 l?AXX C 5&//&=/ 42%N. 2(#(;%":(2 #(; %(:"2
'"2 Y4;;"D34.%"2 /&4 &%3'3L". '(2 %;":&1%(;42 #;(E423(."'42+ 9:4DN2] "' 42%"; <"2":( 4. lk?] #&4:42
P"'3:"; '(2 1(.%4.3:(2 :4' ";1Y3P( " D4:3:" /&4 '( 1;4"2+
9 #";%3; :4 '" P4;23@. 8+= :4 BCDE(.C '(2 ";1Y3P(2 l?AXX 2(#(;%". '" 1;4"13@. :4 .(%"2 C 1(D4.%";3(2+
!(D( &." <&4." %;":&113@. :4#4.:4 %(%"'D4.%4 :4 &. <&4. 1(.%4T%(] 42%"2 .(%"2 l?AXX 2(. 3:4"'42
#";" #;(#(;13(."; %(:" 42" 3.E(;D"13@. :4 1(.%4T%(+
K%3'3L" 4' E(;D"%( l?AXX #";" 1;4"; '(2 ";1Y3P(2 :4 %;":&113@.+IJ>KD LMN+OG+D
41
8/17/2019 buenas_practicas_symfony.pdf
http://slidepdf.com/reader/full/buenaspracticassymfonypdf 42/57
_2C2 P5A,"$S,"#( 0(* ,5%`$V(* #& )5,#/%%$F"
?(2 #;(5;"D":(;42 BCDE(.C .(;D"'D4.%4 5&";:"<". '(2 ";1Y3P(2 :4 %;":&113@. :4.%;( :4 '(2 :3;41^
%(;3(2 L#/,%&$#/C(&?2/A?(',2/C :4 '(2 !"#$%&, :4 '" "#'31"13@.+
B3. 4D<";5(] "'D"14."; %(:(2 '(2 ";1Y3P(2 4. ?..CL#/,%&$#/C(&?2/A?(',2/C 42 DN2 1@D(:( #(;/&4
"2$ 24 14.%;"'3L". %(:(2 42%(2 ";1Y3P(2+ 9:4DN2] 1&"'/&34; ";1Y3P( 1('(1":( 4. ?..CL#/,%&$#/C 24 1(.^23:4;" 1(. DN2 #;3(;3:": /&4 '(2 ";1Y3P(2 4/&3P"'4.%4 :4E3.3:(2 4. 4' :3;41%(;3( L#/,%&$#/C :4 '(2
!"#$%&,+ 92$ /&4 %&2 ";1Y3P(2 :4 %;":&113@. 7+.B+.+)@# 1&"'/&34; %;":&113@. 3:0.%31" :4E3.3:" 4. '(2
!"#$%&, :4 %4;14;(2] "'5( /&4 42 D&C _%3' 4. '"2 "#'31"13(.42+
_2E2 T&7$"$&"#( %0,V&* -,5, 0,* )5,#/%%$("&*
-D#'4"; 1'"P42 4. P4L :4 1(.%4.3:(2 23D#'3E31" D&1Y( '" 542%3@. :4 '(2 ";1Y3P(2 :4 %;":&113@.+ -'D(%3P( 42 /&4 #&4:42 1"D<3"; '(2 1(.%4.3:(2 :4' 3:3(D" #;3.13#"' 23. .41423:": :4 1"D<3"; %(:(2 '(2
";1Y3P(2 :4 %(:(2 '(2 3:3(D"2+
9:4DN2] '"2 1'"P42 234D#;4 :4<4. :421;3<3; 2& 6)368,(/3 C .( 2& %3.+%(F+.(8#+ B3 #(; 4R4D#'( :4E3.42
&. E(;D&'";3( 1(. &. 1"D#( 1&C( %$%&'( 42 e,-G&# 9# %/%?&',] 4.%(.142 '" 1'"P4 :4<4;$" 24;
A?G#AE2,-G&#^%/%?&', C .( 7,&-%A?&',^#9'(E$?-.,/^,GA'D?(,&',/EA?G#AE2,-G&#^%/%?&',+
_2Q2 >Z&8-0( #& ,5%`$V( #& )5,#/%%$F"9#'31".:( %(:"2 '"2 <&4."2 #;N%31"2 ".%4;3(;42] 4' ";1Y3P( :4 %;":&113@. :4 '" "#'31"13@. #";" 4' 3:3(^
D" 3.5'02 %4.:;$" 42%4 "2#41%(a
l{00 ?..CL#/,%&$#/C(&?2/A?(',2/C-#//?D#/E#2EZA'77 00O
lzZ-A 1#&/',2c[4E<[zO
lZA'77 1#&/',2c[4E5[ Z-A2/c[%&2@,?/'/@2?-#/@($@ZA'77@9,$%-#2(@4E5[O
l7'A# /,%&$#0A?2D%?D#c[#2[ (?&D#(0A?2D%?D#c[#2[ 9?(?().#c[.A?'2(#Z([O
lG,9)O
l(&?2/0%2'( '9c[4[O
l/,%&$#O('(A#E.,/(^A'/(lC/,%&$#O
l(?&D#(OP,/( r'/(lC(?&D#(O
lC(&?2/0%2'(O
lCG,9)O
-' !"#$%& [kBU;".2'"%3(.o&.:'4 `Y%%#2abb53%Y&<+1(Db21YD3%%R(Yb[kBU;".2'"%3(.o&.:'4c
(E;414 &." 3.%4;E"L V4< #";" P4; C 4:3%"; '(2 ";1Y3P(2 :4 %;":&113@.+ U"D<30. :32#(.4 :4 Y4^
;;"D34.%"2 "P".L":"2 #";" 4T%;"4; :4 '"2 #'".%3''"2 '"2 1":4."2 :4 %4T%( /&4 :4<4. %;":&13;24
4 3.1'&2( #&4:4 "1%&"'3L"; "&%(DN%31"D4.%4 '(2 ";1Y3P(2 l?AXX+
OMJ+P
9'D"14." %(:(2 '(2 ";1Y3P(2 :4 %;":&113@. 4. 4' :3;41%(;3( ?..CL#/,%&$#/C
(&?2/A?(',2/C+IJ>KD LMN+OG+D
K%3'3L" 1'"P42 4. P4L :4 1(.%4.3:(2 #";" 3:4.%3E31"; 1":" %;":&113@.+IJ>KD LMN+OG+D
Capítulo 8. Internacionalización Buenas prácticas oficiales de Symfony
42
8/17/2019 buenas_practicas_symfony.pdf
http://slidepdf.com/reader/full/buenaspracticassymfonypdf 43/57
lC7'A#O
lCZA'77O
Buenas prácticas oficiales de Symfony Capítulo 8. Internacionalización
43
8/17/2019 buenas_practicas_symfony.pdf
http://slidepdf.com/reader/full/buenaspracticassymfonypdf 44/57
Esta página se ha dejado vacía a propósito
44
8/17/2019 buenas_practicas_symfony.pdf
http://slidepdf.com/reader/full/buenaspracticassymfonypdf 45/57
+,-.)/0( a2
;&A/5$#,#a212 D/)&")$%,%$F" < ()*&+,%%' -. '"2 "#'31"13(.42 BCDE(.C #&4:42 "&%4.%31"; " %&2 &2&";3(2 1(. 1&"'/&34; D0%(:( /&4 :4E3."2 C
#&4:42 1";5"; '" 3.E(;D"13@. :4 '(2 &2&";3(2 :42:4 1&"'/&34; E&4.%4+ !(D( 42%4 42 &. %4D" <"2%".%4
1(D#'4R(] #&4:42 41Y"; &. P32%"L( " '(2 %&%(;3"'42 (E313"'42 2(<;4 '" 245&;3:": :4 BCDE(.C
`Y%%#abb2CDE(.C+1(Db:(1b1&;;4.%b1((\<((\b241&;3%Cb3.:4T+Y%D'c +
A.:4#4.:34.%4D4.%4 :4 %&2 .41423:":42] '" "&%4.%31"13@. 24 1(.E35&;" 4. 4' ";1Y3P( /#$%&'()E)-A <"^
R( '" 1'"P4 7'&#I?AA/+
?" D"C(;$" :4 "#'31"13(.42 2('"D4.%4 &%3'3L". &. D41".32D( :4 "&%4.%31"13@. C &. 1(.R&.%( :4 &2&"^
;3(2+ Q(; 42( %4 <"2%" 1(. %4.4; &. _.31( '()&*+%%+ K." 4T14#13@. PN'3:" 42 1&".:( &%3'3L"2 DN2 :4 &.
D41".32D( :4 "&%4.%31"13@.] 1(D( #(; 4R4D#'( 1&".:( :32#(.42 :4 &." 9QA #;(%453:"+
9:4DN2] :4<4;$"2 "1%3P"; 234D#;4 '" (#13@. ?2,2)-,%/ :4' '()&*+%%+ Q";" ;42%;3.53; 4' "1142( " '"2 :3E4^
;4.%42 #";%42 :4 '" "#'31"13@.] &%3'3L" '" 1(.E35&;"13@. :4 '" (#13@. ?$$#//^$,2(&,A+
!&".:( 24 "'D"14.". '"2 1(.%;"24d"2 :4 '(2 &2&";3(2 4. 4' 232%4D"] '" ;41(D4.:"13@. 1(.232%4 4. &%3^
'3L"; 4' 1(:3E31":(; G$&).( 4. P4L :4' %;":313(."' 1(:3E31":(; <"2":( 4. "Q_0845+ ?" #;3.13#"' P4.%"R"
:4 G$&).( 42 /&4 C" 3.1'&C4 4' ,+%/ 1(D( #";%4 :4 '" 1(.%;"24d"] '( /&4 '4 #;(%454 E;4.%4 " "%"/&42 :4
%3#( )+(#!3* /+!%&+ 9:4DN2] "' %;"%";24 :4 &. "'5(;3%D( ":"#%"%3P(] 42 #(23<'4 ;"'4.%3L"; 2& 4R41&13@.
#";" ;4232%3; D4R(; " '(2 "%"/&42 :4 E&4;L" <;&%"+
!(. %(:( 42%(] '" 1(.E35&;"13@. :4 '" "#'31"13@. :4 #;&4<" /&4:" :4 '" 235&34.%4 D".4;" #";" &%3'3L";&. E(;D&'";3( :4 '(53. C 1";5"; '(2 &2&";3(2 D4:3".%4 '" <"24 :4 :"%(2a
9 D4.(2 /&4 :4E3."2 :(2 D41".32D(2 :4 "&%4.%31"13@. :3E4;4.%42 `4R4D#'(] E(;^
D&'";3( :4 '(53. #";" 4' 23%3( C 232%4D" :4 /3I&#, #";" '" 9QAc :4E3.4 &. _.31( '()&:
*+%% 4. %& "#'31"13@. 1(. '" (#13@. ?2,2)-,%/ "1%3P":"+
IJ>KD LMN+OG+D
K%3'3L" G$&).( #";" 1(:3E31"; '"2 1(.%;"24d"2 :4 %&2 &2&";3(2+IJ>KD LMN+OG+D
45
8/17/2019 buenas_practicas_symfony.pdf
http://slidepdf.com/reader/full/buenaspracticassymfonypdf 46/57
/#$%&'()@
#2$,9#&/@
_..`%29A#hS2('()ha/#&@ G$&).(
.&,1'9#&/@
9?(?G?/#^%/#&/@#2('()@ j $A?//@ _..`%29A#@a/#&n .&,.#&()@ %/#&2?-# k
7'&#I?AA/@
/#$%	^?&#?@
.?((#&2@ sC
?2,2)-,%/@ (&%#
7,&-^A,D'2@
$B#$J^.?(B@ /#$%&'()^A,D'2^$B#$J
A,D'2^.?(B@ /#$%&'()^A,D'2^7,&-
A,D,%(@
.?(B@ /#$%&'()^A,D,%(
(?&D#(@ B,-#.?D#
d e, /# -%#/(&? A? /#$$'|2 m?$$#//^$,2(&,Am
a2C2 D/)(5$S,%$F"BCDE(.C %"D<30. :4E3.4 P";3"2 E(;D"2 :4 1(.E35&;"; '" "&%(;3L"13@.] 42 :413;] :4 ;42%;3.53; 4' "1142(
:4 '(2 &2&";3(2 " '(2 ;41&;2(2+ -. 1(.1;4%(] #&4:42 Y"14; &2( :4 '" 1(.E35&;"13@. ?$$#//^$,2(&,A 4.
4' ";1Y3P( 241&;3%C+CD' `Y%%#abb2CDE(.C+1(Db:(1b1&;;4.%b;4E4;4.14b1(.E35&;"%3(.b241&;3%C+Y%D'c
] :4 '" ".(%"13@. ZB41&;3%C `Y%%#abb2CDE(.C+1(Db:(1b1&;;4.%b<&.:'42bB4.23(X;"D4V(;\-T%;"^
o&.:'4b"..(%"%3(.2b241&;3%C+Y%D'c C :4' D0%(:( 32j;".%4:`c `Y%%#abb2CDE(.C+1(Db:(1b1&;;4.%b
<((\b241&;3%C+Y%D'p"11422^1(.%;('c :4' 24;P313( /#$%&'()E$,2(#Z(+
9' D";54. :4 '( ".%4;3(;] 4T32%4. (%;"2 E(;D"2 :4 14.%;"'3L"; %(:" '" '@531" ;4'"13(.":" 1(. '" 245&;3^
:":] 1(D( #(; 4R4D#'( '(2 ,&.")(/0 93/&), C '"2 9!? ( %(,/+, $& .3#/)3% $& +..&,3+
t<42%#;"1%314u
n K%3'3L" &. ,&.")(/0 93/&) #";" :4E3.3; '"2 ;42%;3113(.42 :4 245&;3:": :4 '(2 ;41&;2(2 :4 '""#'31"13@.+
-' 1@:35( E&4.%4 :4 '" "#'31"13@. :4 #;&4<" 3.1'&C4 1(D4.%";3(2 /&4 4T#'31". :4%"''":"D4.%4
1":" #";%4 :4 42%4 ";1Y3P(+OMJ+P
n K%3'3L" ?$$#//^$,2(&,A #";" #;(%454; 24113(.42 1(D#'4%"2 :4 %& 23%3( V4<+
n K%3'3L" '" ".(%"13@. !"#$%&'() #";" #;(%454; ;41&;2(2 3.:3P3:&"'42+
n K%3'3L" 4' 24;P313( /#$%&'()E$,2(#Z( 1&".:( '" '@531" ;4'"13(.":" 1(. '"
245&;3:": 24" DN2 1(D#'4R"+
IJ>KD LMN+OG+D
Capítulo 9. Seguridad Buenas prácticas oficiales de Symfony
46
8/17/2019 buenas_practicas_symfony.pdf
http://slidepdf.com/reader/full/buenaspracticassymfonypdf 47/57
n K%3'3L" &." 9!? 1&".:( :4E3."2 ;42%;3113(.42 :4 245&;3:": 5;".&'";42 4. '"2 /&4 1":" (<R4%(
:4E3.4 4' "1142( #4;D3%3:( #";" 1":" &2&";3(+ tb<42%#;"1%314u
a2E2 3, ,"(),%$F" b;&%/5$)<?" ".(%"13@. !"#$%&'() 42 '" E(;D" DN2 24.13''" :4 1(.%;('"; 4' "1142( " 1":" 1(.%;('":(; :4 '" "#'31"^
13@.+ B& 23.%"T32 42 D&C EN13' :4 '44; C ;42&'%" D&C 1@D(:( 1(.E35&;"; 4' "1142( :4 1":" 1(.%;('":(;
R&2%( 4.13D" :4' 1@:35( :4 '" "113@.+
-. '" "#'31"13@. :4 #;&4<"] #";" 1;4"; &. .&4P( ";%$1&'( 4. 4' <'(5 42 .4142";3( :32#(.4; :4' )3%&
LVrS^_qfbe+ !(. '" ".(%"13@. !"#$%&'()] 4' 1@:35( ;42&'%".%4 42a
%/# "#2/',h`%29A#hY&?-#I,&JSZ(&?`%29A#h3,27'D%&?(',2hL,%(#i
%/# "#2/',h`%29A#hY&?-#I,&JSZ(&?`%29A#h3,27'D%&?(',2h"#$%&'()i
CC EEE
CKKK q'/.A?)/ ? 7,&- (, $&#?(# ? 2#I P,/( #2('()E
K
K !L,%(#\[C2#I[n 2?-#c[?9-'2^.,/(^2#I[]
K !"#$%&'()\[B?/^&,A#\mLVrS^_qfbem][]
KC
.%GA'$ 7%2$(',2 2#I_$(',2\]
j
CC EEE
k
a2E212 T&7$"$&"#( 5&*)5$%%$("&* %(8-0&Z,* 8&#$,")& &\-5&*$("&*B3 '" '@531" :4 %& "#'31"13@. 42 DN2 1(D#'4R"] #&4:42 &%3'3L"; 4T#;423(.42 `Y%%#abb2CDE(.C+1(Db:(1b
1&;;4.%b1(D#(.4.%2b4T#;4223(.h'".5&"54b3.%;(:&1%3(.+Y%D'c :4.%;( :4 '" ".(%"13@. !"#$%&'()+ -.
4' 235&34.%4 4R4D#'(] 24 ;42%;3.54 4' "1142( #";" /&4 2@'( #&4:". 4:3%"; '(2 ";%$1&'(2 "/&4''(2 &2&";3(2
1&C( 4D"3' 1(3.13:" 1(. 4' "&%(; :4' ";%$1&'( ̀ (<%4.3:( D4:3".%4 4' D0%(:( D#(_%(B,&S-?'A :4' (<R4%(
P,/(ca
%/# _..`%29A#hS2('()hP,/(i
%/# "#2/',h`%29A#hY&?-#I,&JSZ(&?`%29A#h3,27'D%&?(',2h"#$%&'()i
CKKK !L,%(#\[Cj'9kC#9'([n 2?-#c[?9-'2^.,/(^#9'([]
K !"#$%&'()\[%/#&ED#(S-?'A\] cc .,/(ED#(_%(B,&S-?'A\][]
KC
.%GA'$ 7%2$(',2 #9'(_$(',2\P,/( *.,/(]
j
CC EEE
k
-2%" 1(.E35&;"13@. ;4/&34;4 :4' &2( :4 '(2 Q";"D!(.P4;%4;2 `Y%%#abb2CDE(.C+1(Db:(1b1&;;4.%b
<&.:'42bB4.23(X;"D4V(;\-T%;"o&.:'4b"..(%"%3(.2b1(.P4;%4;2+Y%D'c ] C" /&4 Y"C /&4 ;4"'3L"; &."
1(.2&'%" " '" <"24 :4 :"%(2 #";" (<%4.4; 4' (<R4%( P,/( C "235.";'( "' ";5&D4.%( *.,/( :4' 1(.%;('":(;+
Buenas prácticas oficiales de Symfony Capítulo 9. Seguridad
47
8/17/2019 buenas_practicas_symfony.pdf
http://slidepdf.com/reader/full/buenaspracticassymfonypdf 48/57
-2%( 42 '( /&4 Y"14 /&4 #&4:"2 &%3'3L"; &." P";3"<'4 ''"D":" .,/( :4.%;( :4 '" 4T#;423@. :4 '" ".(%"^
13@. !"#$%&'()+
?" 5;". :42P4.%"R" :4 '"2 4T#;423(.42 42 /&4 .( 24 #&4:4. ;4&%3'3L"; EN13'D4.%4 4. (%;"2 #";%42 :4 '"
"#'31"13@.+ AD"53." /&4 /&34;42 "d":3; 4. &." #'".%3''" &. 4.'"14 " '" "113@. :4 4:3%"; 4' ";%$1&'( #4^
;( 2('"D4.%4 23 4' &2&";3( /&4 42%N "114:34.:( " '" "#'31"13@. 42 "&%(; :4 424 ";%$1&'(+ 9Y(;" D32D(%4.:;$"2 /&4 ;4#4%3; 42" D32D" 4T#;423@. &%3'3L".:( 4' 1@:35( UV35a
jw '7 ?..E%/#& ?29 ?..E%/#&E#-?'A cc .,/(E?%(B,&S-?'A wk
l? Bc[[O EEE lC?O
jw #29'7 wk
?" 2('&13@. DN2 24.13''" #";" ;4&%3'3L"; 42%" '@531" 24;$" 1;4"; &. .&4P( D0%(:( 4. '" 4.%3:": P,/(
/&4 1(D#;&4<4 23 4' &2&";3( 3.:31":( 42 4' "&%(; :4' ";%$1&'(a
CC /&$C_..`%29A#CS2('()CP,/(E.B.
CC EEE
$A?// P,/(
j
CC EEE
CKK
K }S/ #A %/%?&', '29'$?9, #A ?%(,& 9#A P,/(z
K
K !&#(%&2 G,,A
KC.%GA'$ 7%2$(',2 '/_%(B,&\a/#& *%/#& c 2%AA]
j
&#(%&2 *%/#& uu *%/#&0OD#(S-?'A\] cc *(B'/0OD#(_%(B,&S-?'A\]i
k
k
9Y(;" C" #&4:42 ;4&%3'3L"; 42%4 D32D( D0%(:( %".%( 4. 4' 1(.%;('":(; 1(D( 4. '" #'".%3''"a
%/# _..`%29A#hS2('()hP,/(i
%/# "#2/',h`%29A#hY&?-#I,&JSZ(&?`%29A#h3,27'D%&?(',2h"#$%&'()i
CKK
K !L,%(#\[Cj'9kC#9'([n 2?-#c[?9-'2^.,/(^#9'([]
K !"#$%&'()\[.,/(E'/_%(B,&\%/#&][]
KC
.%GA'$ 7%2$(',2 #9'(_$(',2\P,/( *.,/(]
j
CC EEE
k
jw '7 .,/(E'/_%(B,&\?..E%/#&] wk
l? Bc[[O EEE lC?Ojw #29'7 wk
Capítulo 9. Seguridad Buenas prácticas oficiales de Symfony
48
8/17/2019 buenas_practicas_symfony.pdf
http://slidepdf.com/reader/full/buenaspracticassymfonypdf 49/57
a2Q2 +(8-5(4,"#( 0(* -&58$*(* *$" b;&%/5$)<-' 4R4D#'( :4 '" 24113@. ".%4;3(; &%3'3L" !"#$%&'() R&.%( 1(. &. A+)+7>3#9&)/&) #";" #(:4; "114:4; "'
P"'(; :4 '" P";3"<'4 .,/(+ B3 .( %4 5&2%" Y"14;'( "2$ ( %&2 ;4/&4;3D34.%(2 2(. DN2 1(D#'4R(2] ;41&4;:"
/&4 '" 245&;3:": 24 #&4:4 1(D#;(<"; EN13'D4.%4 1(. 1@:35( QiQa
CKK
K !L,%(#\[Cj'9kC#9'([n 2?-#c[?9-'2^.,/(^#9'([]
KC
.%GA'$ 7%2$(',2 #9'(_$(',2\*'9]
j
*.,/( c *(B'/0OD#(q,$(&'2#\]0OD#(L#.,/'(,&)\m_..`%29A#@P,/(m]
0O7'29\*'9]i
'7 \{*.,/(] j
(B&,I *(B'/0O$&#?(#e,(Y,%29SZ$#.(',2\]i
k
'7 \{*.,/(0O'/_%(B,&\*(B'/0OD#(a/#&\]]] j
(B&,I *(B'/0O$&#?(#_$$#//q#2'#9SZ$#.(',2\]i
k
CC EEE
k
a2R2 3(* -&."*)/0 23/&*'
B3 '" '@531" ;4'"13(.":" 1(. '" 245&;3:": 42 1(D#'4R" C .( 24 #&4:4 14.%;"'3L"; 4. &. D0%(:( :4 '"4.%3:":] 1(D( 4' ".%4;3(; D0%(:( '/_%(B,&\]] 4.%(.142 :4<4;$"2 &%3'3L"; &. ,&.")(/0 93/&) #;(#3(+ ?"
5;". P4.%"R" :4 '(2 93/&), ;42#41%( " '"2 9!? `Y%%#abb2CDE(.C+1(Db:(1b1&;;4.%b1((\<((\b241&;3%Cb
"1'+Y%D'c 42 /&4 2(. &. (;:4. :4 D"5.3%&: DN2 24.13''(2 :4 1;4"; C 4. 1"23 %(:(2 '(2 1"2(2 (E;414. '"
D32D" E'4T3<3'3:":+
Q";" &%3'3L"; 42%4 D41".32D(] 1;4" #;3D4;( '" 1'"24 :4' 93/&) + -' 235&34.%4 4R4D#'( D&42%;" '" 1"24 &%3^
'3L":" 4. '" "#'31"13@. #";" 4' 93/&) <"2":( 4. 4' D0%(:( D#(_%(B,&S-?'Aa
2?-#/.?$# _..`%29A#h"#$%&'()i
%/# ")-7,2)h3,-.,2#2(h"#$%&'()h3,&#h_%(B,&'R?(',2hv,(#&h_G/(&?$(v,(#&i%/# ")-7,2)h3,-.,2#2(h"#$%&'()h3,&#ha/#&ha/#&b2(#&7?$#i
CC r? $A?/# _G/(&?$(v,(#& #/(p 9'/.,2'GA# ? .?&('& 9# ")-7,2) 5E=
$A?// P,/(v,(#& #Z(#29/ _G/(&?$(v,(#&
j
$,2/( 3LS_gS c m$&#?(#mi
$,2/( Sqbg c m#9'(mi
.&,(#$(#9 7%2$(',2 D#("%..,&(#9_((&'G%(#/\]
j
&#(%&2 ?&&?)\/#A7@@3LS_gSn /#A7@@Sqbg]i
Buenas prácticas oficiales de Symfony Capítulo 9. Seguridad
49
8/17/2019 buenas_practicas_symfony.pdf
http://slidepdf.com/reader/full/buenaspracticassymfonypdf 50/57
k
.&,(#$(#9 7%2$(',2 D#("%..,&(#93A?//#/\]
j
&#(%&2 ?&&?)\m_..`%29A#hS2('()hP,/(m]i
k
.&,(#$(#9 7%2$(',2 '/x&?2(#9\*?((&'G%(#n *.,/(n *%/#& c 2%AA]
j
'7 \{*%/#& '2/(?2$#,7 a/#&b2(#&7?$#] j
&#(%&2 7?A/#i
k
'7 \*?((&'G%(# cc /#A7@@3LS_gS uu '2^?&&?)\LVrS^_qfben *%/#&0OD#(L,A#/\]]] j
&#(%&2 (&%#i
k
'7 \*?((&'G%(# cc /#A7@@Sqbg uu *%/#&0OD#(S-?'A\] ccc *.,/(0OD#(_%(B,&S-?'A\]] j
&#(%&2 (&%#i
k
&#(%&2 7?A/#i
k
k
Q";" "1%3P"; 4' 93/&) 4. '" "#'31"13@.] :4E3.4 &. .&4P( 24;P313( C 4%3/&0%"'( 1(. '" 4%3/&4%"
/#$%&'()E1,(#&a
d ?..C$,27'DC/#&1'$#/E)-A
/#&1'$#/@
d EEE
.,/(^1,(#&@
$A?//@ _..`%29A#h"#$%&'()hP,/(v,(#&
.%GA'$@ 7?A/#
(?D/@
0 j 2?-#@ /#$%&'()E1,(#& k
?( <&4.( :4' 93/&) 42 /&4 %"D<30. 24 #&4:4 &%3'3L"; R&.%( 1(. '" ".(%"13@. !"#$%&'()a
CKK
K !L,%(#\[Cj'9kC#9'([n 2?-#c[?9-'2^.,/(^#9'([]
K !"#$%&'()\['/^D&?2(#9\m#9'(mn .,/(][]
KC
.%GA'$ 7%2$(',2 #9'(_$(',2\P,/( *.,/(]
j
CC EEE
k
e #(; 2&#&42%( %"D<30. 24 #&4:4 1(D<3."; 1(. 4' 24;P313( /#$%&'()E$,2(#Z( D4:3".%4 4' D0%(:('/x&?2(#9\]a
Capítulo 9. Seguridad Buenas prácticas oficiales de Symfony
50
8/17/2019 buenas_practicas_symfony.pdf
http://slidepdf.com/reader/full/buenaspracticassymfonypdf 51/57
CKK
K !L,%(#\[Cj'9kC#9'([n 2?-#c[?9-'2^.,/(^#9'([]
KC
.%GA'$ 7%2$(',2 #9'(_$(',2\*'9]
j
*.,/( c CC M%#&) 7,& (B# .,/( EEE
'7 \{*(B'/0OD#(\m/#$%&'()E$,2(#Z(m]0O'/x&?2(#9\m#9'(mn *.,/(]] j
(B&,I *(B'/0O$&#?(#_$$#//q#2'#9SZ$#.(',2\]i
k
k
a2[2 ;$A/$&")&* -,*(*-' !"#$%& XSBK24;o&.:'4 `c ] :42";;(''":( #(; '" 1(D&.3:": BCDE(.C] 23D#'3E31" '" 542%3@. :4 '(2 &2&"^
;3(2 "'D"14.":(2 4. '" <"24 :4 :"%(2+ U"D<30. 24 4.1";5" :4 %";4"2 1(D( 4' ;4532%;( :4 &2&";3(2 ( 4'
4.P$( :4 4D"3'2 1&".:( " &. &2&";3( 24 '4 ('P3:" 2& 1(.%;"24d"+
?" E&.13(."'3:": W4D4D<4; k4 `Y%%#abb2CDE(.C+1(Db:(1b1&;;4.%b1((\<((\b241&;3%Cb;4D4D^
<4;hD4+Y%D'c :4' 1(D#(.4.%4 :4 245&;3:": :4 BCDE(.C #4;D3%4 D".%4.4; 1(.41%":(2 " %&2 &2&";3(2
#";" /&4 .( %4.5". /&4 3.%;(:&13; 2&2 1;4:4.13"'42 1":" P4L /&4 P323%4. %& 23%3(+
K." :4 '"2 E&.13(."'3:":42 DN2 _%3'42 :4' 1(D#(.4.%4 :4 245&;3:":] C /&4 42 424.13"' #(; 4R4D#'( #"^
;" :"; 2(#(;%4 "' &2&";3(] 1(.232%4 4. "114:4; " '" "#'31"13@. (76&),3#+#$3 " (%;( &2&";3(+ O4 42%" D"^
.4;" #&4:42 1(D#;(<"; :4 #;3D4;" D".( 4' 4;;(; ( #;(<'4D" /&4 42%N 2&E;34.:( 4' &2&";3(+ !(.2&'%"
'" 24113@. 2(<;4 3D#4;2(."; &2&";3(2 `Y%%#abb2CDE(.C+1(Db:(1b1&;;4.%b1((\<((\b241&;3%Cb3D#4;^
2(."%3.5h&24;+Y%D'c #";" 1(.(14; '(2 :4%"''42+
Q(; _'%3D(] 23 4. %& 4D#;42" 24 &%3'3L" &. D0%(:( :4 %35(# .( 2(#(;%":( #(; BCDE(.C] #&4:42
1;4"; %& #;(#3( #;(P44:(; :4 &2&";3(2 `Y%%#abb2CDE(.C+1(Db:(1b1&;;4.%b1((\<((\b241&;3%Cb1&2^
%(Dh#;(P3:4;+Y%D'c C %& #;(#3( #;(P44:(; :4 "&%4.%31"13@. `Y%%#abb2CDE(.C+1(Db:(1b1&;;4.%b1(^
(\<((\b241&;3%Cb1&2%(Dh"&%Y4.%31"%3(.h#;(P3:4;+Y%D'c +
Buenas prácticas oficiales de Symfony Capítulo 9. Seguridad
51
8/17/2019 buenas_practicas_symfony.pdf
http://slidepdf.com/reader/full/buenaspracticassymfonypdf 52/57
Esta página se ha dejado vacía a propósito
52
8/17/2019 buenas_practicas_symfony.pdf
http://slidepdf.com/reader/full/buenaspracticassymfonypdf 53/57
+,-.)/0( 1c2
D**&)* 9&4?(2 +,,&/, *&! 2(. '"2 Y(R"2 :4 42%3'( !BB] '(2 ";1Y3P(2 ["P"B1;3#% C '"2 3DN54.42 /&4 24 &%3'3L". 4. 4'
')3#/&#$ :4 '"2 "#'31"13(.42 #";" /&4 %4.5". &. <&4. "2#41%(+ M(;D"'D4.%4 '(2 #;(5;"D":(;42 BCD^
E(.C 1;4". 42%(2 ";1Y3P(2 4. '(2 :3;41%(;3(2 L#/,%&$#/C.%GA'$C :4 '(2 !"#$%&,+
O32#4;2"; '(2 +,,&/, 4.%;4 :414."2 :4 :3;41%(;3(2 :3E4;4.%42 Y"14 /&4 24" DN2 :3E$13' 542%3(.";'(2 #(;
#";%4 :4 %& 4/&3#(+ -' %;"<"R( :4 '(2 :324d":(;42 24;N D&1Y( DN2 EN13' 23 %(:(2 '(2 +,,&/, 24 4.1&4.%;".
4. &. _.31( '&5";+
9:4DN2] "' 14.%;"'3L"; %&2 +,,&/,] 4' 1@:35( :4 '"2 #'".%3''"2 24 23D#'3E31" #(;/&4 '(2 4.'"142 2(. D&1Y(
DN2 1(.132(2a
lA'2J &#Ac[/()A#/B##([ Bc[jj ?//#(\m$//CG,,(/(&?.E-'2E$//m] kk[ CO
lA'2J &#Ac[/()A#/B##([ Bc[jj ?//#(\m$//C-?'2E$//m] kk[ CO
jd EEE dk
l/$&'.( /&$c[jj ?//#(\mH/CHM%#&)E-'2EH/m] kk[OlC/$&'.(O
l/$&'.( /&$c[jj ?//#(\mH/CG,,(/(&?.E-'2EH/m] kk[OlC/$&'.(O
1c212 J)$0$S,"#( D**&)$%
i(C 4. :$" 42 #;N1%31"D4.%4 3D#(23<'4 /&4 &. 23%3( V4< :4E3." 2('"D4.%4 &.(2 #(1(2 ";1Y3P(2 !BB C ["P"B1;3#% 42%N%31(2+ B45&;"D4.%4 %&2 #;(C41%(2 &%3'3L";N. P";3(2 ";1Y3P(2 B"22 ( ?-BB /&4 24 1(D#3^
9'D"14." %(:(2 '(2 +,,&/, 4. 4' :3;41%(;3( I#GC :4' #;(C41%(+IJ>KD LMN+OG+D
-' :3;41%(;3( I#GC 42 #_<'31(] #(; '( 1&"'/&34; &2&";3( #&4:4 "114:4; " %(:(2 2&2 1(.%4.3:(2
:3;41%"D4.%4 :42:4 2& ."P45":(;+ B3 #;4E34;42 /&4 '(2 &2&";3(2 .( "114:". " '(2 ";1Y3P(2 (;3^
53."'42 :4 '(2 +,,&/, `#(; 4R4D#'( '(2 ";1Y3P(2 !(EE4B1;3#%] B"22 C ?-BBc] 5&";:" '(2 ";1Y3P(2
(;353."'42 4. ?..CL#/,%&$#/C?//#(/C C "'D"14." 4. I#GC 2('"D4.%4 4' ;42&'%":( :4 1(D#3'";
42(2 ";1Y3P(2+
KPOD
53
8/17/2019 buenas_practicas_symfony.pdf
http://slidepdf.com/reader/full/buenaspracticassymfonypdf 54/57
'". " 1@:35( !BB C :42#&02 24 1(D<3.". C D3.3D3L". #";" D4R(;"; 4' ;4.:3D34.%( :4 '" #";%4 E;(.%"'
:4 '" "#'31"13@.+
-T32%4. D&1Y"2 Y4;;"D34.%"2 /&4 ;42&4'P4. <34. 42%4 #;(<'4D"] 3.1'&C4.:( "'5&."2 42#413"'D4.%4
:324d":"2 #";" 4' ')3#/&#$ C /&4 .( &%3'3L". QiQ] 1(D( #(; 4R4D#'( j;&.%[B+
9224%31 `Y%%#abb2CDE(.C+1(Db:(1b1&;;4.%b1((\<((\b"224%31b"224%hD"."54D4.%+Y%D'c 42 &. 542%(;
:4 +,,&/, 1"#"L :4 1(D#3'"; '(2 +,,&/, :42";;(''":(2 1(. :414."2 :4 %41.('(5$"2] 3.'&1C4.:( #(; 2&^
#&42%( ?-BB] B"22 C !(EE4B1;3#%+ !(D<3."; %(:(2 42%(2 +,,&/, 4. &. _.31( ";1Y3P( D4:3".%4 9224%31 42
%". 24.13''( 1(D( &%3'3L"; '" 4%3/&4%" jw /()A#/B##(/ wk :4 UV35a
jw /()A#/B##(/
m$//CG,,(/(&?.E-'2E$//m
m$//C-?'2E$//m
7'A(#&cm$//&#I&'(#m ,%(.%(cm$//C$,-.'A#9C?AAE$//m wk
lA'2J &#Ac[/()A#/B##([ Bc[jj ?//#(^%&A kk[ CO
jw #29/()A#/B##(/ wk
jd EEE dk
jw /()A#/B##(/
mH/CHM%#&)E-'2EH/m
mH/CG,,(/(&?.E-'2EH/m,%(.%(cmH/C$,-.'A#9C?AAEH/m wk
l/$&'.( /&$c[jj ?//#(^%&A kk[OlC/$&'.(O
jw #29/()A#/B##(/ wk
1c21212 D-5&"#$&"#( 86* *(45& D**&)$%9224%31 %"D<30. 42 1"#"L :4 D3.3D3L"; '(2 ";1Y3P(2 !BB C ["P"B1;3#% &%3'3L".:( K5'3EC!BBbK5'3EC[B
`Y%%#abb2CDE(.C+1(Db:(1b1&;;4.%b1((\<((\b"224%31b&5'3ECR2+Y%D'c ] #";" "&D4.%"; 4' ;4.:3D34.%(
:4 %& 23%3( V4<+ O4 Y41Y(] 9224%31 %"D<30. #&4:4 1(D#;3D3; '"2 3DN54.42 `Y%%#abb2CDE(.C+1(Db:(1b
1&;;4.%b1((\<((\b"224%31bR#45h(#%3D3L4+Y%D'c #";" ;4:&13; 2& %"D"d( ".%42 :4 24;P3;'"2 " '(2 &2&"^
;3(2+
1c2C2 D-0$%,%$("&* 4,*,#,* &" &0 (*3#/&#$ 9'5&."2 %41.('(5$"2 ;4134.%42] 1(D( 9.5&'";[B] Y". 5".":( D&1Y" #(#&'";3:": 4.%;4 '" 1(D&.3:":
:4 #;(5;"D":(;42 #";" :42";;(''"; "#'31"13(.42 ')3#/&#$ /&4 24 1(D&.31". 1(. 4' 24;P3:(; D4:3".%4
&." 9QA+
B3 42%N2 :42";;(''".:( &." "#'31"13@. :4 42%4 %3#(] 42 #;4E4;3<'4 /&4 &%3'3142 '"2 Y4;;"D34.%"2 ;41(^
D4.:":"2 #(; '" %41.('(5$" /&4 &%3'3142] 1(D( #(; 4R4D#'( o(V4; C j;&.%[B+ O4 Y41Y(] :4<4;$"2 :42"^
;;(''"; %& ')3#/&#$ %(%"'D4.%4 :42"1(#'":( ;42#41%( :4' !+.I&#$ BCDE(.C ̀ 3.1'&2( 24#";".:( '(2 ;4#(^
23%(;3(2 :4 1@:35(c+ !(.2&'%" '" :(1&D4.%"13@. (E313"' :4 9224%31 `Y%%#2abb53%Y&<+1(Db\;32V"''2D3%Yb"224%31c #";" 1(.(14; %(:"2 2&2 E&.13(."'3:":42+
K%3'3L" 9224%31 #";" 1(D#3'";] 1(D<3."; C D3.3D3L"; '(2 +,,&/, *&!] " D4.(2 /&4
24#"2 &%3'3L"; <34. Y4;;"D34.%"2 :4' ')3#/&#$ 1(D( j;&.%[B+IJ>KD LMN+OG+D
Capítulo 10. Assets web Buenas prácticas oficiales de Symfony
54
8/17/2019 buenas_practicas_symfony.pdf
http://slidepdf.com/reader/full/buenaspracticassymfonypdf 55/57
+,-.)/0( 112
O&*)*j4.4;"'D4.%4 '(2 #;(5;"D":(;42 1;4". :(2 %3#(2 :4 %42%2+ ?(2 %42%2 &.3%";3(2 1(D#;&4<". '" 4.%;":"b
2"'3:" :4 :4%4;D3.:(2 D0%(:(2 ( E&.13(.42+ ?(2 %42%2 E&.13(."'42 &%3'3L". &. ."P45":(; &7"%+$3 #";"
."P45"; #(; '"2 #N53."2 :4 %& 23%3( ( "#'31"13@.] #3.1Y"; 4. 2&2 4.'"142 C ;4''4."; 2&2 E(;D&'";3(2 #";"
1(D#;(<"; 23 '(2 ;42&'%":(2 (<%4.3:(2 2(. '(2 42#4;":(2+
11212 O&*)* /"$),5$(*?(2 %42%2 &.3%";3(2 1(D#;&4<". /&4 '" '@531" :4 .45(13( :4 %& "#'31"31@. E&.13(." <34.+ -2%" '@531"
:4 .45(13( 42 %(%"'D4.%4 3.:4#4.:34.%4 :4' E;"D4V(;\ C #(; 42( BCDE(.C .( 3.1'&C4 .3.5&." Y4^
;;"D34.%" #";" 42%(2 %42%2+ ?" D"C(;$" :4 #;(5;"D":(;42 &%3'3L". QY#K.3% `Y%%#2abb#Y#&.3%+:4bc C
QY#B#41 `Y%%#abbVVV+#Y#2#41+.4%bc +
112C2 O&*)* 7/"%$(",0&*!(D( 1;4"; '(2 %42%2 E&.13(."'42 :4 '" "#'31"13@. ''4P" &. %34D#(] D&1Y(2 #;(5;"D":(;42 '(2 35.(;".
1(D#'4%"D4.%4 C .( Y"14. .3.5_. %42%+ ?" ;41(D4.:"13@. 42 /&4 "' D4.(2 :42";;(''42 &.(2 %42%2 E&.^
13(."'42 24.13''(2] C" /&4 %4 1(2%";N D&C #(1( %34D#( C P4;N2 /&4 2(. D&C _%3'42 #";" :421&<;3; '(
".%42 #(23<'4 4;;(;42 5;"P42 4. %& "#'31"13@.+
-2%4 %42% E&.13(."' 42 %". 24.13''( 1(D( '( 235&34.%4a
CKK !9?(?P&,1'9#& .&,1'9#a&A/ KC
.%GA'$ 7%2$(',2 (#/(P?D#b/"%$$#//7%A\*%&A]
j
*$A'#2( c /#A7@@$&#?(#3A'#2(\]i
*$A'#2(0O&#M%#/(\mxSgmn *%&A]i
*(B'/0O?//#&(g&%#\*$A'#2(0OD#(L#/.,2/#\]0O'/"%$$#//7%A\]]ik
O4E3.4 "' D4.(2 &. %42% E&.13(."' /&4 1(D#;&4<4 /&4 %(:"2 '"2 #N53."2 :4 %& 23%3(
( "#'31"13@. 24 1";5". <34.+
IJ>KD LMN+OG+D
55
8/17/2019 buenas_practicas_symfony.pdf
http://slidepdf.com/reader/full/buenaspracticassymfonypdf 56/57
.%GA'$ 7%2$(',2 .&,1'9#a&A/\]
j
&#(%&2 ?&&?)\
?&&?)\mCm]n
?&&?)\mC.,/(/m]n?&&?)\mC.,/(C7'Z(%�.,/(04m]n
?&&?)\mCGA,DC$?(#D,&)C7'Z(%�$?(#D,&)m]n
?&&?)\mC?&$B'1#/m]n
CC EEE
]i
k
-' 1@:35( :4 42%4 4R4D#'( 1(D#;&4<" /&4 %(:"2 '"2 KW?2 3.:31":"2 24 1";5". <34.+ Q";" 4''( 24 &%3'3L"
4' D0%(:( '/"%$$#//7%A\]] /&4 1(D#;&4<" 23 4' 1@:35( :4 42%":( iUUQ 24 4.1&4.%;" 4.%;4 5<< C 5tt+
9&./&4 #&4:4 #";414;%4 /&4 42%4 %42% .( 42 :4D"23":( _%3'] 4. ;4"'3:": D4;414 '" #4." "d":3;'( " %&
,"(/& :4 %42%2 #(; 4' #(1( 42E&4;L( /&4 %4 1(2%";N 1;4";'(+
112C212 K( A&"&5&* 0,* JM3 #& 0(* )&*)*r&3LN2 %4 42%02 #;45&.%".:( #(; /&0 4. 4' ".%4;3(; %42% E&.13(."' .( 24 &2" 4' 24;P313( 54.4;":(; :4
KW? " #";%3; :4' .(D<;4 :4 '"2 ;&%"2+
AD"53." /&4 :32#(.42 :4' 235&34.%4 %42% E&.13(."' /&4 &%3'3L" 4' 24;P313( &,%(#& #";" 54.4;"; '" KW? "#";%3; :4' .(D<;4 :4 '" ;&%"a
.%GA'$ 7%2$(',2 (#/(`A,D_&$B'1#/\]
j
*$A'#2( c /#A7@@$&#?(#3A'#2(\]i
*%&A c *$A'#2(0OD#(3,2(?'2#&\]0OD#(\m&,%(#&m]0OD#2#&?(#\mGA,D^?&$B'1#/m]i
*$A'#2(0O&#M%#/(\mxSgmn *%&A]i
CC EEE
k
9&./&4 4' 1@:35( ".%4;3(; E&.13(." 1(;;41%"D4.%4] %34.4 &." :42P4.%"R" D&C 5;".:4+ B3 &. #;(5;"^
D":(; 1"D<3" 23. /&4;4; '" KW? :4 '" ;&%" GA,D^?&$B'1#/] 42%4 %42% .( 24 ;(D#4;N C #(; %".%( .( %4
:";N2 1&4.%" :4' 4;;(;+ B3. 4D<";5(] '" KW? ".%4;3(; :4R";N :4 E&.13(."; #";" '(2 P323%".%42 :4' 23%3(]
#(; '( /&4 %(:(2 '(2 4.'"142 ".%4;3(;42 C %(:(2 '(2 D";1":(;42 :4R";N. :4 E&.13(."; 23. /&4 %4 :42
1&4.%"+
112C2C2 D5%`$V(* #& #,)(*B3 4. %& "#'31"13@. /&34;42 54.4;"; <&4.(2 ";1Y3P(2 1(. :"%(2 :4 #;&4<"] #&4:42 &%3'3L"; '"2 '3<;4;$"2
X"\4; `Y%%#2abb53%Y&<+1(DbEL".3.(%%(bX"\4;c C 9'314 `Y%%#2abb53%Y&<+1(Db.4'D3(b"'314c +
-21;3<4 '"2 KW? :4 '(2 %42%2 " D".(] 23. &%3'3L"; 4' 24;P313( &,%(#& :4 BCDE(.C #";"
54.4;";'"2+IJ>KD LMN+OG+D
Capítulo 11. Tests Buenas prácticas oficiales de Symfony
56
8/17/2019 buenas_practicas_symfony.pdf
http://slidepdf.com/reader/full/buenaspracticassymfonypdf 57/57
112E2 O&*)* -,5, &0 %F#$A( d,V,;%5$-)-' &7"%+$3) :4 ."P45":(; /&4 &%3'3L" BCDE(.C #";" '(2 %42%2 E&.13(."'42 .( #4;D3%4 #;(<"; 4' 1(D^
#(;%"D34.%( ["P"B1;3#% :4 %&2 #N53."2+ 92$ /&4 23 4. %& "#'31"13@. 42 3D#(;%".%4 #;(<"; 424 1@:35(]
:4<4;$"2 &%3'3L"; '" '3<;4;$" k3.\ `Y%%#abbD3.\+<4Y"%+(;5c R&.%( 1(. QiQK.3%+
S<P3"D4.%4 23 %& "#'31"13@. &%3'3L" ["P"B1;3#% 4. %(:"2 2&2 E&.13(."'3:":42] 24;$" D4R(; &%3'3L"; &."
Y4;;"D34.%" :4 %42%2 42#413"'D4.%4 #4.2":" #";" ["P"B1;3#%+
Buenas prácticas oficiales de Symfony Capítulo 11. Tests