Symfony2 рдореЗрдВ SonataAdminBundle рдХреЗ рд╕рд╛рде рдПрдбрд┐рдЯрд┐рдВрдЧ рдЯреНрд░реА рд╕реНрдЯреНрд░рдХреНрдЪрд░реНрд╕

рд╡реГрдХреНрд╖ рд╕рдВрд░рдЪрдирд╛рдУрдВ рдХрд╛ рд╕рдВрдкрд╛рджрди рд╡реЗрдм рд╡рд┐рдХрд╛рд╕ рдореЗрдВ рдПрдХ рдХрд╛рдлреА рд╕рд╛рдорд╛рдиреНрдп рдХрд╛рд░реНрдп рд╣реИред рдпрд╣ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЗ рд▓рд┐рдП рдмрд╣реБрдд рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рдЙрд╕реЗ рдЕрдкрдиреА рд╕рд╛рдЗрдЯ рдкрд░ рдХреЛрдИ рдкрджрд╛рдиреБрдХреНрд░рдо рдмрдирд╛рдиреЗ рдХрд╛ рдЕрд╡рд╕рд░ рджреЗрддрд╛ рд╣реИред рд╕реНрд╡рд╛рднрд╛рд╡рд┐рдХ рд░реВрдк рд╕реЗ, рд╕рд┐рдореНрдлрдиреА 2 рдкрд░ рд╕реНрд╡рд┐рдЪ рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж, рдкрд╣рд▓реЗ рдХрд╛рд░реНрдпреЛрдВ рдореЗрдВ рд╕реЗ рдПрдХ рдЗрд╕ рддрд░рд╣ рдХреЗ рдкреГрд╖реНрдареЛрдВ рдХреА рдПрдХ рд╢реНрд░реЗрдгреАрдмрджреНрдз рд╕реВрдЪреА рдмрдирд╛рдирд╛ рдФрд░ рдЗрд╕рдХреЗ рд▓рд┐рдП рдПрдХ рд╡реНрдпрд╡рд╕реНрдерд╛рдкрдХ рдкреИрдирд▓ рд▓рд┐рдЦрдирд╛ рдерд╛ред рдФрд░ рдЬрдм рд╕реЗ рдореИрдВ SonataAdminBundle рдХреЛ рд╡реНрдпрд╡рд╕реНрдерд╛рдкрдХ рдкреИрдирд▓ рдХреЗ рд░реВрдк рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реВрдВ , рдХрд╛рд░реНрдп рдкреЗрдбрд╝реЛрдВ рдХреЛ рд╕рдВрдкрд╛рджрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЗрд╕реЗ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд░рдирд╛ рдерд╛ред

рдРрд╕рд╛ рд▓рдЧрддрд╛ рдерд╛ рдХрд┐ рд╕рдорд╕реНрдпрд╛ рд╡реНрдпрд╛рдкрдХ рдереА, рдорд╛рдБрдЧ рдореЗрдВ рдФрд░ рдореБрдЭреЗ рдПрдХ рддреИрдпрд╛рд░ рд╕рдорд╛рдзрд╛рди "рдмреЙрдХреНрд╕ рд╕реЗ рдмрд╛рд╣рд░" рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреА рдЙрдореНрдореАрдж рдереАред рд╣рд╛рд▓рд╛рдБрдХрд┐, рдРрд╕рд╛ рдирд╣реАрдВ рд╣реБрдЖред рдЗрддрдирд╛ рд╣реА рдирд╣реАрдВ, рд╕реЛрдирд╛рдЯрд╛ рдХреЗ рдбреЗрд╡рд▓рдкрд░реНрд╕ рдХреЛ рдЗрд╕ рд╡рд┐рдЪрд╛рд░ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХрднреА рдирд╣реАрдВ рд▓рдЧрддрд╛ рдерд╛ рдХрд┐ рдХреЛрдИ рд╡реНрдпрдХреНрддрд┐ рдЕрдкрдиреЗ рдмрдВрдбрд▓ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдкреЗрдбрд╝реЛрдВ рдХреЛ "рдкреНрд░рд╢рд╛рд╕рд┐рдд" рдХрд░реЗрдЧрд╛ред

рдЪрд▓реЛ рдкреЗрдбрд╝ рд╕реЗ рд╣реА рд╢реБрд░реВ рдХрд░рддреЗ рд╣реИрдВред рдореЗрд░реЗ рдмрдЪрдкрди рд╕реЗ "рдПрдХ рдкреНрд░реЛрдЧреНрд░рд╛рдорд░ рдХреЗ рд░реВрдк рдореЗрдВ" рдореБрдЭреЗ рд╕рд┐рдЦрд╛рдпрд╛ рдЧрдпрд╛ рдерд╛ рдХрд┐ рдкрд╣рд┐рдпрд╛ рдХреЛ рдлрд┐рд░ рд╕реЗ рдордЬрдмреВрдд рди рдХрд░реЗрдВред рдФрд░ рдпрджреНрдпрдкрд┐ рдореИрдВ рдХрднреА-рдХрднреА "рд▓рд╛рдд" рдорд╛рд░рддрд╛ рдерд╛ рдФрд░ рдкреАрдЫреЗ рд╣рдЯ рдЬрд╛рддрд╛ рдерд╛, рдХрд┐ рдирдИ рдЖрд╡рд┐рд╖реНрдХрд╛рд░ рдХреА рдЧрдИ рд╕рд╛рдЗрдХрд┐рд▓ рдХреЛ рдЖрдЧреЗ рдХреА рд╕рд╡рд╛рд░реА рдХрд░рдирд╛ рдЖрд╕рд╛рди рд╣реЛрдЧрд╛, рдФрд░ рдмрдЧрд╝рд▓ рдореЗрдВ рдирд╣реАрдВ: рдореИрдВ рд╣рдореЗрд╢рд╛ рдЕрдкрдиреЗ рд╣рд╛рдереЛрдВ рдкрд░ рдЪрдврд╝рд╛ рдФрд░ ... рдореБрдЭреЗ рддреИрдпрд╛рд░ рдХрд┐рдП рдЧрдП рд╕рдорд╛рдзрд╛рдиреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдерд╛ред рдкреГрд╖реНрдареЛрдВ рдХреА рд╡реГрдХреНрд╖ рд╕рдВрд░рдЪрдирд╛ рдХреЗ рд▓рд┐рдП, рдбреЙрдХреНрдЯреНрд░рд┐рди рдПрдХреНрд╕рдЯреЗрдВрд╢рдиреНрд╕ рд╕реЗ рдиреЗрд╕реНрдЯреЗрдб рдЯреНрд░реА рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХрд╛ рдирд┐рд░реНрдгрдп рд▓рд┐рдпрд╛ рдЧрдпрд╛ред

рдбреЙрдХреНрдЯреНрд░рд┐рди рдПрдХреНрд╕рдЯреЗрдВрд╢рди рдЯреНрд░реА рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЯреНрд░реА рдореЙрдбрд▓ рдмрдирд╛рдирд╛ рд╕реАрдзрд╛ рд╣реИ рдФрд░ рдЗрд╕реЗ рдореИрдиреБрдЕрд▓ рдореЗрдВ рд╡рд░реНрдгрд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред рдореИрдВ рдпрд╣ рдиреЛрдЯ рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ рдХрд┐ Symfony2 рдХреЗ рдЕрдВрджрд░ рдбреЙрдХреНрдЯреНрд░рд┐рди рдПрдХреНрд╕рдЯреЗрдВрд╢рди рдХреЗ рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рдЙрдкрдпреЛрдЧ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ StofDoctrineExtensionsBundle рдХреЛ рдХрдиреЗрдХреНрдЯ рдХрд░рдирд╛ рд╣реЛрдЧрд╛, рдЬрд┐рд╕рдХреА рд╕реНрдерд╛рдкрдирд╛ рдФрд░ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди, рдлрд┐рд░ рд╕реЗ, рдореИрдиреБрдЕрд▓ рдореЗрдВ рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ рд╡рд░реНрдгрд┐рдд рд╣реИред рдЦреИрд░, рдЕрдЧрд░ рдЕрдЪрд╛рдирдХ рдХрд┐рд╕реА рдХреЛ рдЗрд╕рд╕реЗ рдХреЛрдИ рд╕рдорд╕реНрдпрд╛ рд╣реИ, рддреЛ рдореБрдЭреЗ рдЯрд┐рдкреНрдкрдгрд┐рдпреЛрдВ рдореЗрдВ рдорджрдж рдХрд░рдиреЗ рдореЗрдВ рдЦреБрд╢реА рд╣реЛрдЧреАред

рдЗрд╕рд▓рд┐рдП, рдореБрдЭреЗ ShtumiPravBundle: рдкреЗрдЬ рдореЙрдбрд▓ рдорд┐рд▓рд╛, рдЬрд┐рд╕рдХрд╛ рдкреВрд░рд╛ рдХреЛрдб рдореИрдВ рдЗрд╕ рд▓реЗрдЦ рдореЗрдВ рдЕрдирд╛рд╡рд╢реНрдпрдХ рдирд╣реАрдВ рджреВрдВрдЧрд╛ред

рдЕрдм рдореИрдВ рдиреЗрд╕реНрдЯреЗрдб рдЯреНрд░реА рдХреА рдмреБрд░реА рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХреБрдЫ рд╢рдмреНрдж рдХрд╣рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ, рдЬрд┐рд╕рдХреЗ рдХрд╛рд░рдг рдореБрдЭреЗ рдПрдХ рджреЛ рдмрд╛рд░ рд╕рдм рдХреБрдЫ рдмрджрд▓рдирд╛ рдкрдбрд╝рд╛ред

  1. рдЯреНрд░реА рд╕рдВрд░рдЪрдирд╛ рдХреЛ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдбреЙрдХреНрдЯреНрд░рд┐рди рдПрдХреНрд╕рдЯреЗрдВрд╢рдиреНрд╕ рди рдХреЗрд╡рд▓ рдореВрд▓ рдХреНрд╖реЗрддреНрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ, рдмрд▓реНрдХрд┐ рд░реВрдЯ, рд▓реИрдлреНрдЯ, рдЖрд░рдЬреАрдЯреА, рдПрд▓рд╡реАрдПрд▓ рдлрд╝реАрд▓реНрдб рднреА рд╣реИрдВ, рдЬреЛ рдбреЗрдЯрд╛рдмреЗрд╕ рдореЗрдВ рднреА рд╕рдВрдЧреНрд░рд╣реАрдд рд╣реИрдВред рдЦреЗрддреЛрдВ рдХрд╛ рдЙрджреНрджреЗрд╢реНрдп рд╕реНрдкрд╖реНрдЯ рд╣реИ: рд╡реЗ рдкреЗрдбрд╝ рдореЗрдВ рдмрдЪреНрдЪреЛрдВ рдХреЗ рдХреНрд░рдо рдХреЛ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░рддреЗ рд╣реИрдВ, рдФрд░ рдЖрдкрдХреЛ рдкреЗрдбрд╝ рдХреЗ рддрддреНрд╡реЛрдВ рдХреЛ "рд╕рд╣реА" рдХреНрд░рдо рдореЗрдВ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕рд░рд▓ SQL рдкреНрд░рд╢реНрди рдмрдирд╛рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рднреА рджреЗрддреЗ рд╣реИрдВред рдЗрди рдлрд╝реАрд▓реНрдбреНрд╕ рдХреА рдЧрдгрдирд╛ рдФрд░ рдбреЗрдЯрд╛рдмреЗрд╕ рдореЗрдВ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ рд╕рдВрдЧреНрд░рд╣реАрдд рдХреА рдЬрд╛рддреА рд╣реИред рд╣рд╛рд▓рд╛рдВрдХрд┐, рдореИрдВ рдЕрднреА рднреА рдХреНрд╖реЗрддреНрд░ рдХреА рдХрдореА рдФрд░ рдЖрд░рдЬреАрдЯреА рдХреЗ рдореВрд▓реНрдпреЛрдВ рдХреА рдЧрдгрдирд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрд▓реНрдЧреЛрд░рд┐рдереНрдо рдХреЛ рд╕рдордЭ рдирд╣реАрдВ рд╕рдХрд╛ (рд╣рд╛рд▓рд╛рдВрдХрд┐ рдореИрдВрдиреЗ рдХрдард┐рди рдкреНрд░рдпрд╛рд╕ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдерд╛)ред рддреЛ рдпрд╣рд╛рдБ рд╣реИред рдХреНрдпрд╛ рдкреЗрдбрд╝ рдХреЗ рдХрд┐рд╕реА рднреА рддрддреНрд╡ рдореЗрдВ рдЗрди рдХреНрд╖реЗрддреНрд░реЛрдВ рдХрд╛ рдПрдХ рдореВрд▓реНрдп рдЧрд▓рдд рд╣реЛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП - рдЗрд╕рд╕реЗ рдкреВрд░реЗ рдкреЗрдбрд╝ рдХрд╛ рдЯреВрдЯрдирд╛ рд╣реЛрдЧрд╛ред рдПрдХ рдЯреВрдЯрдирд╛ рдЬрд┐рд╕реЗ рдареАрдХ рдХрд░рдирд╛ рд▓рдЧрднрдЧ рдЕрд╕рдВрднрд╡ рд╣реИ, рдЙрдкрд░реЛрдХреНрдд рдХреНрд╖реЗрддреНрд░реЛрдВ рдХреА рдЧрдгрдирд╛ рдХреА рдЬрдЯрд┐рд▓рддрд╛ рдХреЛ рджреЗрдЦрддреЗ рд╣реБрдП, рдкреЗрдбрд╝ рдХреЗ рддрддреНрд╡реЛрдВ рдХреА рд╕рдВрдЦреНрдпрд╛ рд╕реЗ рдЧреБрдгрд╛ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред
  2. рдбреЙрдХреНрдЯреНрд░рд┐рди рдПрдХреНрд╕рдЯреЗрдВрд╢рдиреНрд╕ рдЯреНрд░реА рдореЗрдВ, рдореВрд▓ рддрддреНрд╡реЛрдВ рдХреЛ рдорд╛рдирдХ рддрд░реАрдХреЛрдВ (рдореВрд╡рдЕрдк, рдореВрд╡рдбрд╛рдЙрди) рдХреЗ рд╕рд╛рде рдмрджрд▓рдирд╛ рдЕрд╕рдВрднрд╡ рд╣реИред рдЬрдм рдЖрдк рдРрд╕рд╛ рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рд╕рдВрдмрдВрдзрд┐рдд рд╕рдВрджреЗрд╢ рдХреЗ рд╕рд╛рде рдПрдХ "рдЕрдкрд╡рд╛рдж" рдмрд╛рд╣рд░ рдлреЗрдВрдХ рджрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред рд╡реНрдпрд╡рд╣рд╛рд░, рдХрд╣рдиреЗ рдХрд╛ рдЕрдзрд┐рдХрд╛рд░, рдЕрдЬреАрдм рдФрд░ рдЕрдкреНрд░рддреНрдпрд╛рд╢рд┐рдд рд╣реИ, рд▓реЗрдХрд┐рди рдЖрдкрдХреЛ рдЗрд╕рдХреЗ рд╕рд╛рде рд▓рдЧрдирд╛ рд╣реЛрдЧрд╛ред
  3. рдЪрд░рдг 1 рдореЗрдВ, рдореИрдВрдиреЗ рд░реВрдЯ, рд▓реИрдлреНрдЯ, рдЖрд░рдЬреАрдЯреА рдлрд╝реАрд▓реНрдбреНрд╕ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╛рдд рдХреА, рдЬрд┐рд╕рдХреЗ рдореВрд▓реНрдпреЛрдВ рдореЗрдВ рд╡рд┐рдлрд▓рддрд╛ рдкреВрд░реЗ рдкреЗрдбрд╝ рдХреЗ рдЯреВрдЯрдиреЗ рдХреА рдУрд░ рдЬрд╛рддрд╛ рд╣реИред рдЕрдм рдЖрдЧ рдореЗрдВ рдИрдВрдзрди рдбрд╛рд▓реЗрдВред рд╡рд┐рджреЗрд╢реА рдХреБрдВрдЬрд┐рдпреЛрдВ рдХреА рдЙрдкрд╕реНрдерд┐рддрд┐ рдХреЗ рдХрд╛рд░рдг рдкреЗрдбрд╝ рдХреЗ рддрддреНрд╡реЛрдВ рдХреЛ рд╣рдЯрд╛рдиреЗ рдореЗрдВ рд╡рд┐рдлрд▓рддрд╛ рдХреА рд╕реНрдерд┐рддрд┐ рдореЗрдВ рдРрд╕реА рд╕реНрдерд┐рддрд┐рдпрд╛рдВ рд╣реЛрддреА рд╣реИрдВред рдореЗрд░реЗ рдорд╛рдорд▓реЗ рдореЗрдВ, рдпреЗ рдкреНрд░рддреНрдпреЗрдХ рд▓реЗрдЦ рдХреЗ рд▓рд┐рдП "рдЦрд░рд╛рдм" рдЕрддрд┐рд░рд┐рдХреНрдд рддрддреНрд╡ рдереЗред рд╕рд╛рдЗрдЯ рдХреЛ рд╕рд╛рдордЧреНрд░реА рд╕реЗ рднрд░рдиреЗ рдХреЗ рдмрд╛рдж рдЗрд╕рдХреА рд╕рднреА рдорд╣рд┐рдорд╛ рдореЗрдВ рд╕рдорд╕реНрдпрд╛ рдХрд╛ рдкрддрд╛ рдЪрд▓рд╛ рдерд╛, рдФрд░ рдкреЗрдбрд╝ рдХреЛ рдмрд╣рд╛рд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдмрд╣реБрдд рдЕрдзрд┐рдХ рдирд╕реЛрдВ рдФрд░ рд╢реНрд░рдо рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдереАред

рд╡реНрдпрд╡рд╕реНрдерд╛рдкрдХ рдкреИрдирд▓ рдореЗрдВ рдкреЗрдбрд╝ рдХреА рд╕рдВрд░рдЪрдирд╛ рдХрд╛ рдирд┐рд╖реНрдХрд░реНрд╖

рдЬрд┐рди рдкрд╣рд▓реА рд╕рдорд╕реНрдпрд╛рдУрдВ рдХреЛ рд╣рд▓ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдереА, рдЙрдирдореЗрдВ рд╕реЗ рдПрдХ рдкреЗрдбрд╝ рдХреЗ рд░реВрдк рдореЗрдВ рд╡реНрдпрд╡рд╕реНрдерд╛рдкрдХ рдкреИрдирд▓ рдореЗрдВ рдкреГрд╖реНрдареЛрдВ рдХрд╛ рдЙрддреНрдкрд╛рджрди рдерд╛, рдЕрд░реНрдерд╛рдд, рд▓реЗрдЦ рд╢реАрд░реНрд╖рдХ рд╕реЗ рдкрд╣рд▓реЗ рдмрд╛рдИрдВ рдУрд░ рдШреЛрдВрд╕рд▓реЗ рдХреЗ рд╕реНрддрд░ рдХреЗ рдЕрдиреБрд░реВрдк рд░рд┐рдХреНрдд рд╕реНрдерд╛рди рдХреА рд╕рдВрдЦреНрдпрд╛ рдЬреЛрдбрд╝реЗрдВред рдпрд╣реА рд╕рдорд╕реНрдпрд╛ рдЪреБрдирд┐рдВрджрд╛ рдбреНрд░реЙрдкрдбрд╛рдЙрди рдХреЗ рд╕рд╛рде рдереАред рд╕рдорд╛рдзрд╛рди рдмрд╣реБрдд рд╕рд░рд▓ рдкрд╛рдпрд╛ рдЧрдпрд╛ - рдореЙрдбрд▓ рдореЗрдВ __toString рдФрд░ getLaveledTitle рд╡рд┐рдзрд┐рдпрд╛рдБ рдЬреЛрдбрд╝реЗрдВ:

class Page { ... public function __toString() { $prefix = ""; for ($i=2; $i<= $this->lvl; $i++){ $prefix .= "& nbsp;& nbsp;& nbsp;& nbsp;"; } return $prefix . $this->title; } public function getLaveledTitle() { return (string)$this; } ... } 

рдЕрдм, рд╕реВрдЪреА рд╕реЗрдЯрд┐рдВрдЧреНрд╕ рдореЗрдВ, рдордХреНрдЦреА рдкрд░ рдЙрддреНрдкрдиреНрди laveled_title рдлрд╝реАрд▓реНрдб рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рд╕рдВрднрд╡ рд╣реЛ рдЧрдпрд╛ред

рдореИрдВ рд╕рд╣рдордд рд╣реВрдВ рдХрд┐ рд╕рдорд╛рдзрд╛рди рд╕рдмрд╕реЗ рдЕрдЪреНрдЫрд╛ рдирд╣реАрдВ рд╣реИ, рд▓реЗрдХрд┐рди рдпрд╣рд╛рдВ рдХреЛрдИ рдЕрдиреНрдп рдирд╣реАрдВ рджрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред



рдКрдкрд░ рд▓рд┐рдЦреА рд╕рдорд╕реНрдпрд╛рдУрдВ рдХреЗ рдЕрдиреБрдЪреНрдЫреЗрдж 2 рдХреЛ рдпрд╛рдж рдХрд░реЗрдВред рдЗрд╕ рд╕рдорд╕реНрдпрд╛ рдХреЛ рд╣рд▓ рдХрд░рдиреЗ рдХрд╛ рд╕рдмрд╕реЗ рдЖрд╕рд╛рди рддрд░реАрдХрд╛ рдПрдХ рдореВрд▓ рддрддреНрд╡ рдмрдирд╛рдирд╛ рд╣реИ рдФрд░ рдпрд╛ рддреЛ рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рди рдХрд░реЗрдВ рдпрд╛ рдЗрд╕реЗ рдореБрдЦреНрдп рдкреГрд╖реНрда рдХреЗ рдкрд╛рда рдХреЗ рд░реВрдк рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВред
рдореИрдВрдиреЗ рдЗрд╕реЗ "== рд░реВрдЯ рдПрд▓реАрдореЗрдВрдЯ ==" рдирд╛рдо рджреЗрдиреЗ рдХрд╛ рдлреИрд╕рд▓рд╛ рдХрд┐рдпрд╛ рдФрд░ рдЗрд╕реЗ рдХрд╣реАрдВ рдФрд░ рдЗрд╕реНрддреЗрдорд╛рд▓ рдирд╣реАрдВ рдХрд┐рдпрд╛ред рдЕрд░реНрдерд╛рддреН, рд╡реНрдпрд╡рд╕реНрдерд╛рдкрдХ рдкреИрдирд▓ рдореЗрдВ рдЗрд╕рдХреЗ рд╕рдВрдкрд╛рджрди / рд╡рд┐рд▓реЛрдкрди рдХреЛ рдкреНрд░рддрд┐рдмрдВрдзрд┐рдд рдХрд░рдирд╛ред рдЕрдиреНрдп рд╕рднреА рд▓реЗрдЦ рдпрд╛ рддреЛ рдЗрд╕ рдореВрд▓ рддрддреНрд╡ рдХреЗ рд╡рдВрд╢рдЬ рд╣реЛрдиреЗ рдЪрд╛рд╣рд┐рдП, рдпрд╛ рд╡рдВрд╢рдЬреЛрдВ рдХреЗ рд╡рдВрд╢рдЬ рд╣реЛрдиреЗ рдЪрд╛рд╣рд┐рдПред рдореВрд▓ рддрддреНрд╡ рдХреЛ рдбреЗрдЯрд╛рдмреЗрд╕ рдореЗрдВ рд╣рд╛рдереЛрдВ рд╕реЗ рдмрдирд╛рдпрд╛ рдЧрдпрд╛ рдерд╛, рдФрд░ рдЗрд╕реЗ рд╕рдВрдкрд╛рджрди рдпреЛрдЧреНрдп рд╣реЛрдиреЗ рд╕реЗ рд░реЛрдХрдиреЗ рдХреЗ рд▓рд┐рдП, CreateQuery рдкрджреНрдзрддрд┐ рдХреЛ PageAdmin рд╡рд░реНрдЧ рдореЗрдВ рдЬреЛрдбрд╝рд╛ рдЧрдпрд╛ рдерд╛ред

рдпрд╣рд╛рдВ рдореИрдВ PageAdmin рд╡рд░реНрдЧ рдХрд╛ рдкреВрд░рд╛ рдХреЛрдб рджреВрдВрдЧрд╛, рдФрд░ рдиреАрдЪреЗ рдореИрдВ рдмрддрд╛рдКрдВрдЧрд╛ рдХрд┐ рдХреНрдпрд╛ рддрд░реАрдХреЗ рдФрд░ рдХреНрдпрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдП рдЧрдП рдереЗред

 <? namespace Shtumi\PravBundle\Admin; use Sonata\AdminBundle\Admin\Admin; use Sonata\AdminBundle\Form\FormMapper; use Sonata\AdminBundle\Datagrid\ListMapper; use Sonata\DoctrineORMAdminBundle\Datagrid\ProxyQuery; class PageAdmin extends Admin{ protected $maxPerPage = 2500; protected $maxPageLinks = 2500; protected $datagridValues = array( '_sort_order' => 'ASC', '_sort_by' => 'p.root, p.lft' ); public function createQuery($context = 'list') { $em = $this->modelManager->getEntityManager('Shtumi\PravBundle\Entity\Page'); $queryBuilder = $em ->createQueryBuilder('p') ->select('p') ->from('ShtumiPravBundle:Page', 'p') ->where('p.parent IS NOT NULL'); $query = new ProxyQuery($queryBuilder); return $query; } protected function configureListFields(ListMapper $listMapper) { $listMapper ->add('up', 'text', array('template' => 'ShtumiPravBundle:admin:field_tree_up.html.twig', 'label'=>' ')) ->add('down', 'text', array('template' => 'ShtumiPravBundle:admin:field_tree_down.html.twig', 'label'=>' ')) ->add('id', null, array('sortable'=>false)) ->addIdentifier('laveled_title', null, array('sortable'=>false, 'label'=>' ')) ->add('_action', 'actions', array( 'actions' => array( 'edit' => array(), 'delete' => array() ), 'label'=> '' )) ; } protected function configureFormFields(FormMapper $form) { $subject = $this->getSubject(); $id = $subject->getId(); $form ->with('') ->add('parent', null, array('label' => '' , 'required'=>true , 'query_builder' => function($er) use ($id) { $qb = $er->createQueryBuilder('p'); if ($id){ $qb ->where('p.id <> :id') ->setParameter('id', $id); } $qb ->orderBy('p.root, p.lft', 'ASC'); return $qb; } )) ->add('title', null, array('label' => '')) ->add('text', null, array('label' => ' ')) ->end() ; } public function preRemove($object) { $em = $this->modelManager->getEntityManager($object); $repo = $em->getRepository("ShtumiPravBundle:Page"); $subtree = $repo->childrenHierarchy($object); foreach ($subtree AS $el){ $menus = $em->getRepository('ShtumiPravBundle:AdditionalMenu') ->findBy(array('page'=> $el['id'])); foreach ($menus AS $m){ $em->remove($m); } $services = $em->getRepository('ShtumiPravBundle:Service') ->findBy(array('page'=> $el['id'])); foreach ($services AS $s){ $em->remove($s); } $em->flush(); } $repo->verify(); $repo->recover(); $em->flush(); } public function postPersist($object) { $em = $this->modelManager->getEntityManager($object); $repo = $em->getRepository("ShtumiPravBundle:Page"); $repo->verify(); $repo->recover(); $em->flush(); } public function postUpdate($object) { $em = $this->modelManager->getEntityManager($object); $repo = $em->getRepository("ShtumiPravBundle:Page"); $repo->verify(); $repo->recover(); $em->flush(); } } 

рдиреЗрд╕реНрдЯреЗрдб рдЯреНрд░реА рдореЗрдВ рдПрдХ рдкреЗрдбрд╝ рдмрдирд╛рдиреЗ рдореЗрдВ рдПрдХ рдЦрд╝рд╛рд╕рд┐рдпрдд рд╣реИред рдмрд╛рдПрдВ рд╕реЗ рджрд╛рдПрдВ рдкреВрд░реЗ рдХреНрд░рдо рдореЗрдВ рдкреВрд░реЗ рдкреЗрдбрд╝ рдХреЗ рдЪрд╛рд░реЛрдВ рдУрд░ рдЬрд╛рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ рдЗрд╕рдХреЗ рддрддреНрд╡реЛрдВ рдХреЛ рдкрд╣рд▓реЗ рд░реВрдЯ рдлрд╝реАрд▓реНрдб рд╕реЗ рдФрд░ рдлрд┐рд░ рд▓реИрдлреНрдЯ рдлрд╝реАрд▓реНрдб рджреНрд╡рд╛рд░рд╛ рд╕реЙрд░реНрдЯ рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред рдЗрд╕рдХреЗ рд▓рд┐рдП $ datagridValues тАЛтАЛрдкреНрд░реЙрдкрд░реНрдЯреА рдХреЛ рдЬреЛрдбрд╝рд╛ рдЧрдпрд╛ рд╣реИред

рдПрдХ рдкреЗрдбрд╝ рдХреЛ рд╕рдВрдкрд╛рджрд┐рдд рдХрд░рддреЗ рд╕рдордп, рдЬреНрдпрд╛рджрд╛рддрд░ рдорд╛рдорд▓реЛрдВ рдореЗрдВ рдкреЗрдЬрд┐рдВрдЧ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реЛрддреА рд╣реИред рдЗрд╕рд▓рд┐рдП, рдореИрдВрдиреЗ рдорд╛рдирдХ 30 рд╕реЗ 2500 рддрдХ рдПрдХ рдкреГрд╖реНрда рд╕реЗ рддрддреНрд╡реЛрдВ рдХреА рд╕рдВрдЦреНрдпрд╛ рдореЗрдВ рд╡реГрджреНрдзрд┐ рдХреАред

рддрддреНрд╡реЛрдВ рдХреЛ рдЬреЛрдбрд╝рдирд╛ / рд╕рдВрдкрд╛рджрд┐рдд рдХрд░рдирд╛

рдпрд╣рд╛рдВ рдореБрдЦреНрдп рд╕рдорд╕реНрдпрд╛ рд▓реЗрдЦ рдХреЛ рд╕рдВрдкрд╛рджрд┐рдд рдХрд░рдиреЗ рдХреЗ рд░реВрдк рдореЗрдВ рдорд╛рддрд╛-рдкрд┐рддрд╛ рдХреА рдкрджрд╛рдиреБрдХреНрд░рдорд┐рдд рдбреНрд░реЙрдк-рдбрд╛рдЙрди рд╕реВрдЪреА рдХрд╛ рдЖрдЙрдЯрдкреБрдЯ рдереАред рдЗрдХрд╛рдИ рдкреИрд░реЗрдВрдЯ рдлрд╝реАрд▓реНрдб рдореЗрдВ рдХреНрд▓реЛрдЬрд░ рдХреЗ рд╕рд╛рде рдХреНрд╡реЗрд░реА_рдмрд┐рд▓реНрдбрд░ рдЬреЛрдбрд╝рдХрд░ рдЗрд╕ рд╕рдорд╕реНрдпрд╛ рдХреЛ рд╣рд▓ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред рдЪреВрдВрдХрд┐ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдбреЗрдЯрд╛рдмреЗрд╕ рдореЗрдВ рдПрдХ рдореВрд▓ рддрддреНрд╡ "== рд░реВрдЯ рддрддреНрд╡ ==" рд╣реИ, рдЗрд╕рд▓рд┐рдП рдореВрд▓ рдХреНрд╖реЗрддреНрд░ рдЖрд╡рд╢реНрдпрдХ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред



рдкреЛрд╕реНрдЯрдкрд░реНрд╕рд┐рд╕реНрдЯ рдФрд░ рдкреЛрд╕реНрдЯрдкреЗрдб рддрд░реАрдХреЛрдВ рдХреЗ рд▓рд┐рдП рдХреЗ рд░реВрдк рдореЗрдВ, рдЙрдиреНрд╣реЗрдВ рдпрд╣ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд░рд┐рдкреЙрдЬрд┐рдЯрд░реА рдХреЗ рд╕рддреНрдпрд╛рдкрди рдФрд░ рдкреБрдирд░реНрдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рддрд░реАрдХреЛрдВ рдХреЛ рдХреЙрд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЬреЛрдбрд╝рд╛ рдЧрдпрд╛ рдерд╛ рддрд╛рдХрд┐ рдпрд╣ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рд╣реЛ рд╕рдХреЗ рдХрд┐ рдЗрди рдХрд╛рд░реНрдпреЛрдВ рдХреЗ рдмрд╛рдж рдкреЗрдбрд╝ рдХреА рд╕рдВрд░рдЪрдирд╛ рдХреЛ рдиреБрдХрд╕рд╛рди рдирд╣реАрдВ рд╣реЛрдЧрд╛ред

рдЕрдкрдиреЗ рдкрдбрд╝реЛрд╕рд┐рдпреЛрдВ рдХреЗ рд╕рд╛рдкреЗрдХреНрд╖ рдЖрдЗрдЯрдо рд╕реЙрд░реНрдЯ рдХрд░реЗрдВ

рдпрд╣ рднреА рдмрдЯрди рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдЖрд╡рд╢реНрдпрдХ рдерд╛ рдЬрд┐рд╕рдХреЗ рд╕рд╛рде рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдЕрдкрдиреЗ рдкрдбрд╝реЛрд╕рд┐рдпреЛрдВ рдХреЗ рд╕рд╛рдкреЗрдХреНрд╖ рд▓реЗрдЦ рдХреЛ рдКрдкрд░ / рдиреАрдЪреЗ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░ рд╕рдХрддрд╛ рдерд╛ред SonataAdminBundle рдЖрдкрдХреЛ рд░рд┐рдХреЙрд░реНрдб рдХреА рд╕реВрдЪреА рдХреЗ рдХреНрд╖реЗрддреНрд░реЛрдВ рдореЗрдВ рдЕрдкрдиреЗ рдЯреЗрдореНрдкреНрд▓реЗрдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред рдЗрд╕рд▓рд┐рдП, рдЖрдкрдХреЛ рдХреНрд░рдорд╢рдГ рдФрд░ рдКрдкрд░ рдФрд░ рдиреАрдЪреЗ рдмрдЯрди рдХреЗ рд▓рд┐рдП рджреЛ рдЯреЗрдореНрдкрд▓реЗрдЯ рдмрдирд╛рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ:

ShtumiPravBundle: рд╡реНрдпрд╡рд╕реНрдерд╛рдкрдХ: field_tree_up.html.twig

 {% extends 'SonataAdminBundle:CRUD:base_list_field.html.twig' %} {% block field %} {% spaceless %} {% if object.parent.children[0].id != object.id %} <a href="{{ path('page_tree_up', {'page_id': object.id}) }}"> <img src="{{ asset('bundles/shtumiprav/images/admin/arrow_up.png') }}" alt="{% trans %}{% endtrans %}" /> </a> {% endif %} {% endspaceless %} {% endblock %} 


ShtumiPravBundle: рд╡реНрдпрд╡рд╕реНрдерд╛рдкрдХ: field_tree_down.html.twig

 {% extends 'SonataAdminBundle:CRUD:base_list_field.html.twig' %} {% block field %} {% spaceless %} {% if object.parent.children[object.parent.children|length - 1].id != object.id %} <a href="{{ path('page_tree_down', {'page_id': object.id}) }}"> <img src="{{ asset('bundles/shtumiprav/images/admin/arrow_down.png') }}" alt="{% trans %}{% endtrans %}" /> </a> {% endif %} {% endspaceless %} {% endblock %} 

рдпреЗ рдЯреЗрдореНрдкрд▓реЗрдЯ PageAdmin рд╡рд░реНрдЧ рдХреЗ configListFields рд╡рд┐рдзрд┐ рд╕реЗ рдЬреБрдбрд╝реЗ рд╣реБрдП рд╣реИрдВред

рджреЛ рд░рд╛рд╕реНрддреЛрдВ рдХреЛ рд░рд╛рдЙрдЯрд┐рдВрдЧ рдореЗрдВ рдЬреЛрдбрд╝рд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред рдлрд╛рдЗрд▓ рдХреЛ рдХреНрд░рдорд╢рдГ рдКрдкрд░ рдФрд░ рдиреАрдЪреЗ рдмрдЯрди рдХреЗ рд▓рд┐рдП рдЬреЛрдбрд╝рд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП:

 page_tree_up: pattern: /admin/page_tree_up/{page_id} defaults: { _controller: ShtumiPravBundle:PageTreeSort:up } page_tree_down: pattern: /admin/page_tree_down/{page_id} defaults: { _controller: ShtumiPravBundle:PageTreeSort:down } 

рдареАрдХ рд╣реИ, рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ, рдЖрдкрдХреЛ рдПрдХ PageTreeSortController рдирд┐рдпрдВрддреНрд░рдХ рдмрдирд╛рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ рдЬреЛ рд▓реЗрдЦ рдХреЗ рдЖрдВрджреЛрд▓рди рдХрд╛ рдкреНрд░рджрд░реНрд╢рди рдХрд░реЗрдЧрд╛:

 <?php namespace Shtumi\PravBundle\Controller; use Symfony\Bundle\FrameworkBundle\Controller\Controller; use Sensio\Bundle\FrameworkExtraBundle\Configuration\Route; use Sensio\Bundle\FrameworkExtraBundle\Configuration\Template; use JMS\SecurityExtraBundle\Annotation\Secure; class PageTreeSortController extends Controller { /** * @Secure(roles="ROLE_SUPER_ADMIN") */ public function upAction($page_id) { $em = $this->getDoctrine()->getEntityManager(); $repo = $em->getRepository('ShtumiPravBundle:Page'); $page = $repo->findOneById($page_id); if ($page->getParent()){ $repo->moveUp($page); } return $this->redirect($this->getRequest()->headers->get('referer')); } /** * @Secure(roles="ROLE_SUPER_ADMIN") */ public function downAction($page_id) { $em = $this->getDoctrine()->getEntityManager(); $repo = $em->getRepository('ShtumiPravBundle:Page'); $page = $repo->findOneById($page_id); if ($page->getParent()){ $repo->moveDown($page); } return $this->redirect($this->getRequest()->headers->get('referer')); } } 

рдХреЗрд╡рд▓ рдПрдХ рд╡реНрдпрд╡рд╕реНрдерд╛рдкрдХ рд╣реА рдЗрд╕ рдирд┐рдпрдВрддреНрд░рдХ рддрдХ рдкрд╣реБрдБрдЪ рд╕рдХрддрд╛ рд╣реИ; рдЗрд╕рд▓рд┐рдП, рд░реЛрд▓ рдкрд░ рд░реЛрдХ ROLE_SUPER_ADMIN рдЖрд╡рд╢реНрдпрдХ рд╣реИред

рдЖрдЗрдЯрдо рд╣рдЯрд╛рдПрдВ

рдкреЗрдбрд╝ рдХреЗ рддрддреНрд╡реЛрдВ рдХреЛ рд╣рдЯрд╛рдиреЗ рдХреА рдореБрдЦреНрдп рд╕реВрдХреНрд╖реНрдорддрд╛ рдпрд╣ рд╣реИ рдХрд┐ рдЖрдкрдХреЛ рдпрд╣ рдзреНрдпрд╛рди рд░рдЦрдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ рдХрд┐ рд╡рд┐рджреЗрд╢реА рдХреБрдВрдЬреА рдХреЗ рдХрд╛рд░рдг рдХреЛрдИ рд╕рдВрдШрд░реНрд╖ рдирд╣реАрдВ рд╣реИ рдФрд░ рдкреЗрдбрд╝ рдореЗрдВ рдХреЛрдИ рд╡рд┐рдлрд▓рддрд╛рдПрдВ рдирд╣реАрдВ рд╣реИрдВред рдореИрдВрдиреЗ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдиреЗрд╕реНрдЯреЗрдб рдкреЗрдбрд╝ рд╕рдорд╕реНрдпрд╛рдУрдВ рдХреЗ рдкреИрд░рд╛ 3 рдореЗрдВ рдЗрд╕ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╛рдд рдХреА рдереАред

рдореИрдВрдиреЗ рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рдпрд╣ рджрд┐рдЦрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐ рдкреЗрдЬ рд╣рдЯрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдкреЗрдЬрд░рдорд┐рди рд╡рд░реНрдЧ рд╕реЗ рдкреНрд░реАрдореЗрд╡ рд╡рд┐рдзрд┐ рдХреЛ рд╣рдЯрд╛рдирд╛ рд╢реБрд░реВ рдирд╣реАрдВ рдХрд┐рдпрд╛ рд╣реИ, рдЖрдкрдХреЛ рдХрд┐рд╕реА рдЕрдиреНрдп рдореЙрдбрд▓ рд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд рд╕рднреА рдкреНрд░рд╡рд┐рд╖реНрдЯрд┐рдпреЛрдВ рдХреЛ рд╣рдЯрд╛рдиреЗ рдФрд░ рджреЗрдЦрднрд╛рд▓ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рдореЗрд░реЗ рдорд╛рдорд▓реЗ рдореЗрдВ, рдпреЗ рдПрдбрд┐рд╢рдирд▓ рдореАрдиреВ рдФрд░ рд╕рд░реНрд╡рд┐рд╕ рдореЙрдбрд▓ рдереЗред

рдореИрдВ рдпрд╣ рднреА рдзреНрдпрд╛рди рджреЗрдирд╛ рдЪрд╛рд╣реВрдВрдЧрд╛ рдХрд┐ рдХреИрд╕реНрдХреЗрдб рдбрд┐рд▓реАрдЯ рдореЙрдбрд▓ рдореЗрдВ рдЗрдВрд╕реНрдЯреЙрд▓реЗрд╢рди рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ рдХрд╛рдо рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИред рддрдереНрдп рдпрд╣ рд╣реИ рдХрд┐ рдбреЙрдХреНрдЯреНрд░рд┐рди рдПрдХреНрд╕рдЯреЗрдВрд╢рдиреНрд╕ рдЯреНрд░реА рд╡рдВрд╢рдЬ рдХреЛ рд╣рдЯрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдЕрдкрдиреЗ рд╕реНрд╡рдпрдВ рдХреЗ рддрд░реАрдХреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ, рдЬреЛ рдХреИрд╕реНрдХреЗрдбрд┐рдВрдЧ рдкрд░ рдзреНрдпрд╛рди рдирд╣реАрдВ рджреЗрддреЗ рд╣реИрдВред рд╕рдЪ рд╣реИ, рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдореИрдВрдиреЗ рдЕрднреА рднреА рдХреИрд╕реНрдХреЗрдбрд┐рдВрдЧ рд╡рд┐рд▓реЛрдкрди рд╕реНрдерд╛рдкрд┐рдд рдХрд┐рдпрд╛ рд╣реИ:

 class Page { ... /** * @ORM\OneToMany(targetEntity="Service", mappedBy="page", cascade={"all"}, orphanRemoval=true) * @ORM\OrderBy({"position"="ASC"}) */ protected $services; ... } 

рдиреЗрд╕реНрдЯреЗрдб рдЯреНрд░реА рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ рд╡рдВрд╢рдЬ рдХреЛ рд╣рдЯрд╛ рджреЗрддрд╛ рд╣реИред рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХреБрдЫ рднреА рдирд╣реАрдВ рдерд╛ред

рдирд┐рд╖реНрдХрд░реНрд╖

рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдореЗрд░реЗ рджреНрд╡рд╛рд░рд╛ рдмрддрд╛рдП рдЧрдП рд╕рдорд╛рдзрд╛рди рдореЗрдВ рдХреБрдЫ рднреА рдЬрдЯрд┐рд▓ рдирд╣реАрдВ рд╣реИ, рд╣рд╛рд▓рд╛рдВрдХрд┐, рдиреЗрд╕реНрдЯ рдЯреНрд░реА рдХреЗ рдХрднреА-рдХрднреА рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдкрд╛рд░рджрд░реНрд╢реА рд╡реНрдпрд╡рд╣рд╛рд░ рдирд╣реАрдВ рд╣реЛрдиреЗ рдХреЗ рдХрд╛рд░рдг, рд╕реЛрдирд╛рдЯрд╛рд╕реНрдорд┐рдирдмрдВрдбрд▓ рдореЗрдВ рдкреНрд░рд╡реЗрд╢ рдмрдирд╛рдиреЗ рдХреА рд╕реБрд╡рд┐рдзрд╛рдУрдВ рд╕реЗ рдЬрдЯрд┐рд▓, рдореБрдЭреЗ рдХреБрдЫ рд╕рдордп рдХреЗ рд▓рд┐рдП рдЗрд╕ рд╕рдорд╛рдзрд╛рди рдХреЗ рд╕рд╛рде рдЯрд┐рдВрдХрд░ рдХрд░рдирд╛ рдкрдбрд╝рд╛ред рдореБрдЭреЗ рдЙрдореНрдореАрдж рд╣реИ рдХрд┐ рдпрд╣ рд╕рдорд╛рди рдХрд╛рд░реНрдп рдХреЛ рд▓рд╛рдЧреВ рдХрд░рддреЗ рд╕рдордп, рдкреНрд░рд┐рдп рдкрд╛рдардХ рдХреЛ рдмрдЪрд╛рдиреЗ рдореЗрдВ рдорджрдж рдХрд░реЗрдЧрд╛ред

рдЗрд╕ рд╕рдорд╛рдзрд╛рди рд╕реЗ рдХреНрдпрд╛ рдЧрд╛рдпрдм рд╣реИред рдкрд╣рд▓реА рдмрд╛рдд рдЬреЛ рджрд┐рдорд╛рдЧ рдореЗрдВ рдЖрддреА рд╣реИ рд╡рд╣ рд╕рдмрдкреНрд░рд┐рд╕реЗрд╕ рдХреЛ рдЫрд┐рдкрд╛рддреА рд╣реИред рдпрд╣реА рд╣реИ, рдкреНрд░рддреНрдпреЗрдХ рддрддреНрд╡ рдХреЗ рдмрдЧрд▓ рдореЗрдВ "рдкреНрд▓рд╕рд╕", рдЖрдкрдХреЛ рдЗрд╕рдХреЗ рд╡рдВрд╢ рдХреЛ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред рдРрд╕рд╛ рд╕рдорд╛рдзрд╛рди рдмрд╣реБрдд рдмрдбрд╝реЗ рдкреЗрдбрд╝реЛрдВ рдХреЗ рд▓рд┐рдП рдкреНрд░рд╛рд╕рдВрдЧрд┐рдХ рд╣реЛрдЧрд╛ред рд╕реБрдзрд╛рд░ рдХрд╛ рджреВрд╕рд░рд╛ рд╡рд┐рдЪрд╛рд░ рдкрд╣рд▓реЗ рд╕реЗ рдирд┐рдореНрдирд╛рдиреБрд╕рд╛рд░ рд╣реИ - рдореИрдВ рдЪрд╛рд╣реВрдВрдЧрд╛ рдХрд┐ рд╡реНрдпрд╡рд╕реНрдерд╛рдкрдХ рдЗрд╕ рдЕрднрд┐рднрд╛рд╡рдХ рддрддреНрд╡ рдХреЛ рдкреНрд▓рд╕ рдЪрд┐рдиреНрд╣ рдкрд░ рдХреНрд▓рд┐рдХ рдХрд░рдХреЗ рдпрд╛рдж рд░рдЦреЗрдВ рдФрд░ рдПрдХ рдирдпрд╛ рд▓реЗрдЦ рдмрдирд╛рддреЗ рд╕рдордп, рдпрд╣ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ "рдореВрд▓" рдлрд╝реАрд▓реНрдб рдореЗрдВ рдЗрд╕рдХрд╛ рдЪрдпрди рдХрд░реЗрдЧрд╛ред

рджреЛрдиреЛрдВ рд╕рдорд╕реНрдпрд╛рдУрдВ рдХрд╛ рд╣рд▓ рдореБрд╢реНрдХрд┐рд▓ рдирд╣реАрдВ рд╣реИред "рдкреНрд▓рд╕ рд╕рд╛рдЗрди" рдХреЗ рд▓рд┐рдП рдПрдХ рдФрд░ рдЯреЗрдореНрдкрд▓реЗрдЯ рдмрдирд╛рдирд╛ рдЖрд╡рд╢реНрдпрдХ рд╣реИ рдФрд░ рдлрд┐рд░ рдирд┐рдпрдВрддреНрд░рдХ рдореЗрдВ рд╕рддреНрд░ рдХреЛ рд╕рд╣реЗрдЬреЗрдВ рдЬреЛ рддрддреНрд╡реЛрдВ рдХреЛ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП рдФрд░ рдЬрд┐рд╕реЗ рдЫрд┐рдкрд╛рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред рдЦреИрд░, createQuery рд╡рд┐рдзрд┐ рдореЗрдВ, рдЗрд╕ рд╕рддреНрд░ рд╕реЗ рдбреЗрдЯрд╛ рдкреНрд░реЛрд╕реЗрд╕ рдХрд░реЗрдВред

Source: https://habr.com/ru/post/In143413/


All Articles