рд╕рд┐рдореНрдлрдиреА 2 рдореЗрдВ ShtumiUsefulBundle рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ - рдПрдХ рдмрдВрдбрд▓ рдореЗрдВ рдХреБрдЫ рдЙрдкрдпреЛрдЧреА рдЪреАрдЬреЗрдВ

рдирдП, рд▓реЗрдХрд┐рди рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдмрд╣реБрдд рд▓реЛрдХрдкреНрд░рд┐рдп Symfony2 рдврд╛рдВрдЪреЗ рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рдкрд░рд┐рдпреЛрдЬрдирд╛рдУрдВ рдХреЛ рд╡рд┐рдХрд╕рд┐рдд рдХрд░рддреЗ рд╕рдордп, рдПрдХ рдХреЛрдб рдХреЗ рдЕрдиреИрдЪреНрдЫрд┐рдХ рд░реВрдк рд╕реЗ рд╕рд╛рдордирд╛ рдХрд░рддрд╛ рд╣реИ рдЬреЛ рдХрдо рд╕реЗ рдХрдо рдкрд░рд┐рд╡рд░реНрддрди рдХреЗ рд╕рд╛рде, рдпрд╛ рдпрд╣рд╛рдВ рддрдХ тАЛтАЛрдХрд┐ рдЙрдирдХреЗ рдмрд┐рдирд╛, рдПрдХ рдкрд░рд┐рдпреЛрдЬрдирд╛ рд╕реЗ рджреВрд╕рд░реА рдкрд░рд┐рдпреЛрдЬрдирд╛ рдореЗрдВ рднрдЯрдХрддреЗ рд╣реИрдВред рдПрдХ рд╕рд╛рде рдХрдИ рдРрд╕реЗ "рдЯреБрдХрдбрд╝реЗ" рдПрдХрддреНрд░ рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж, рдореИрдВрдиреЗ ShtumiUsefulBundle рдмрдирд╛рдпрд╛, рдЬрд┐рд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдореИрдВ рдмрд╛рдд рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВред

рдЖрдк рдмрдВрдбрд▓ рдХреЛ GitHub: ShtumiUsefulBundle рдкрд░ рдкрд╛ рд╕рдХрддреЗ рд╣реИрдВред

рдмрдВрдбрд▓ рдХреА рд╕реНрдерд╛рдкрдирд╛ рдФрд░ рд╡рд┐рдиреНрдпрд╛рд╕ рддреБрдЪреНрдЫ рд╣реИ рдФрд░ рд░реАрдбрдореЗ рдореЗрдВ рд╡рд░реНрдгрд┐рдд рд╣реИред рдореИрдВ рдЗрд╕ рдореБрджреНрджреЗ рдкрд░ рдзреНрдпрд╛рди рдирд╣реАрдВ рджреВрдБрдЧрд╛ред

рдСрдЯреЛ-рдлрд┐рд▓ рдлреЙрд░реНрдо рднрд░реЗрдВ


Symfony2 рдореЗрдВ рдПрдХ рдорд╣рд╛рди рдкреНрд░рдХрд╛рд░ рдХреЗ рдЗрдХрд╛рдИ рдлрд╝реАрд▓реНрдб рд╣реИрдВ - рдПрдХ рдлрд╝реАрд▓реНрдб рдЬрд┐рд╕рдореЗрдВ рдПрдХ рдбреНрд░реЙрдк-рдбрд╛рдЙрди рд╕реВрдЪреА рд╣реЛрддреА рд╣реИ, рдЬреЛ рдПрдХ рд╡рд┐рд╢рд┐рд╖реНрдЯ рддрд╛рд▓рд┐рдХрд╛ рд╕реЗ рд░рд┐рдХреЙрд░реНрдб рдХреЗ рд╕рд╛рде рдкреЙрдкреБрд▓реЗрдЯреЗрдб рд╣реЛрддреА рд╣реИред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдлреЙрд░реНрдо рдЬрдорд╛ рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж, рдЖрдкрдХреЛ рдЪрдпрдирд┐рдд рд░рд┐рдХреЙрд░реНрдб рдХреА рдЖрдИрдбреА рдирд╣реАрдВ рдорд┐рд▓рддреА рд╣реИ, рдмрд▓реНрдХрд┐ рдСрдмреНрдЬреЗрдХреНрдЯ рд╣реА рд╣реЛрддрд╛ рд╣реИред рдмрд╣реБрдд рдЖрд░рд╛рдо рд╕реЗ! рдЖрд╕рд╛рдиреА рд╕реЗ, рдЬрдмрдХрд┐ рддрд╛рд▓рд┐рдХрд╛ рдореЗрдВ рдбреЗрдЯрд╛ рдХреА рдорд╛рддреНрд░рд╛ рдЙрдЪрд┐рдд рд╕реАрдорд╛ рд╕реЗ рдЕрдзрд┐рдХ рдирд╣реАрдВ рд╣реИред рд▓реЗрдХрд┐рди рдЬрдм, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреА рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рддрд╛рд▓рд┐рдХрд╛ рдореЗрдВ рд╣рдЬрд╛рд░реЛрдВ рд░рд┐рдХреЙрд░реНрдб рд╣реЛрддреЗ рд╣реИрдВ рдФрд░ рдЖрдкрдХреЛ рдлрд╝реЙрд░реНрдо рдореЗрдВ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХрд╛ рдЪрдпрди рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ, рддреЛ рдпрд╣ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдЕрдиреБрдкрдпреБрдХреНрдд рд╣реЛ рдЬрд╛рддрд╛ рд╣реИред рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ рдПрдХ рдЙрдЪрд┐рдд рд╕рдорд╛рдзрд╛рди рдСрдЯреЛ-рдкреНрд░рддрд┐рд╕реНрдерд╛рдкрди рдХреЗ рд╕рд╛рде рдПрдХ рдкрд╛рда рдХреНрд╖реЗрддреНрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рд╣реИред ShtumiUsefulBundle рдЖрдкрдХреЛ рдРрд╕реЗ рдлрд╝реАрд▓реНрдб рдмрдирд╛рдиреЗ рдФрд░ рд▓рдЪреАрд▓реЗ рдврдВрдЧ рд╕реЗ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред

рдЫрд╡рд┐

рдкрд╣рд▓реЗ рдЖрдкрдХреЛ рдСрдЯреЛ-рдкреНрд░рддрд┐рд╕реНрдерд╛рдкрди рдХреЗ рд╕рд╛рде рд╕реЗрдЯрд┐рдВрдЧреНрд╕ рдореЗрдВ рдкреНрд░рддреНрдпреЗрдХ рдлрд╝реАрд▓реНрдб рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ (рдЙрджрд╛рд╣рд░рдг рдореЗрдВ рджреЛ рд╣реИрдВ)ред

//app/config/config.yml

shtumi_useful: autocomplete_entities: users: class: AcmeDemoBundle:User role: ROLE_ADMIN property: email products: class: AcmeDemoBundle:Product role: ROLE_ADMIN search: contains 


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

рдлрд╝реАрд▓реНрдб рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдмрд╣реБрдд рд╕рд░рд▓ рд╣реИ:

 $formBuilder ->add('product', 'shtumi_ajax_autocomplete', array('entity_alias'=>'products')); 


рдЗрд╕ рдХреНрд╖реЗрддреНрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рд╕реЛрдирд╛рдЯрд╛рдбрдорд┐рдирдмрдВрдбрд▓ рдореЗрдВ рдлрд┐рд▓реНрдЯрд░ рдХреЗ рд░реВрдк рдореЗрдВ рднреА рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ (рдЙрди рд▓реЛрдЧреЛрдВ рдХреЗ рд▓рд┐рдП рдЬреЛ рдпрд╣ рдирд╣реАрдВ рдЬрд╛рдирддреЗ - рдпрд╣ рд╕рд┐рдореНрдлрдиреА 2 рдореЗрдВ рд╡реНрдпрд╡рд╕реНрдерд╛рдкрдХ рдЬрдирд░реЗрдЯрд░ рд╣реИ - рдИрдорд╛рдирджрд╛рд░ рд╣реЛрдиреЗ рдХреЗ рд▓рд┐рдП, рдореИрдВ рдХрд▓реНрдкрдирд╛ рдирд╣реАрдВ рдХрд░ рд╕рдХрддрд╛ рдХрд┐ рдореИрдВ рдЗрд╕ рдмрдВрдбрд▓ рдХреЗ рдмрд┐рдирд╛ рдХреИрд╕реЗ рд░рд╣реВрдВрдЧрд╛ ...)ред рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдмрд┐рдХреНрд░реА рдореЙрдбрд▓ рдореЗрдВ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдореЙрдбрд▓ рдХреЗ рд╕рд╛рде рдПрдХ ManyToOne рдПрд╕реЛрд╕рд┐рдПрд╢рди рдХреЗ рд╕рд╛рде рдПрдХ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рд╕рдВрдкрддреНрддрд┐ рд╣реЛрдиреА рдЪрд╛рд╣рд┐рдПред

 //src/Acme/DemoBundle/Admin/SaleAdmin.php protected function configureDatagridFilters(DatagridMapper $datagridMapper) { $datagridMapper ->add('id') ->add('user', 'shtumi_ajax_autocomplete', array('entity_alias'=>'users')) ; } 


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

Shtumi_ajax_autocomplete рдХреНрд╖реЗрддреНрд░ рдореЗрдВ рдХреЙрд▓рдмреИрдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдореБрд╢реНрдХрд┐рд▓ рдирд╣реАрдВ рд╣реИ:

 //src/Acme/DemoBundle/Admin/UserAdmin.php protected function configureDatagridFilters(DatagridMapper $datagridMapper) { $datagridMapper ... ->add('email', 'shtumi_ajax_autocomplete', array('entity_alias'=>'users', 'callback' => function ($queryBuilder, $alias, $field, $data) { if (!$data['value']) { return; } if ($data['type']== 1){ //1 - no, 0 - yes $eq = " != "; } else { $eq = " = "; } $queryBuilder ->andWhere($alias . '.email' . $eq . ':value1') ->setParameter('value1', $data['value']); })) ; } 


рдЖрд╢реНрд░рд┐рдд рдХреНрд╖реЗрддреНрд░


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

рдЫрд╡рд┐

рдкрд┐рдЫрд▓реЗ рдкреНрд░рдХрд╛рд░ рдХреЗ рд╕рд╛рде рд╢реБрд░реВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд┐рдП рдЬрд╛рдиреЗ рд╡рд╛рд▓реЗ рдХреНрд╖реЗрддреНрд░реЛрдВ рдХреЛ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ:

//app/config/config.yml

 shtumi_useful: dependent_filtered_entities: region_by_country: class: AcmeDemoBundle:Region parent_property: country property: title role: ROLE_USER no_result_msg: 'No regions found for that country' order_property: title order_direction: ASC 


рд╕реНрд╡рдпрдВ рдлрд╝реАрд▓реНрдб рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдлрд┐рд░ рд╕реЗ рдХреЛрдИ рдХрдард┐рдирд╛рдИ рдкреНрд░рд╕реНрддреБрдд рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИред

 $formBuilder ->add('country', 'entity', array('class' => 'AcmeDemoBundle:Country' , 'required' => true , 'empty_value'=> '== Choose country ==')) ->add('region', 'shtumi_dependent_filtered_entity' , array('entity_alias' => 'region_by_country' , 'empty_value'=> '== Choose region ==' , 'parent_field'=>'country')) 


parent_field - рдЗрд╕ рд░реВрдк рдореЗрдВ рдореБрдЦреНрдп рдлрд╝реАрд▓реНрдб рдХрд╛ рдирд╛рдоред

рдирд┐рд░реНрднрд░ рдХреНрд╖реЗрддреНрд░ рдорд╛рди AJAX рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд▓реЛрдб рдХрд┐рдП рдЧрдП рд╣реИрдВред рдЗрд╕рд▓рд┐рдП, рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдкрд░реНрдпрд╛рдкреНрдд рдорд╛рддреНрд░рд╛ рдореЗрдВ рдбреЗрдЯрд╛ рдкрд░ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред

рдкрд░рд┐рдгрд╛рдорд╕реНрд╡рд░реВрдк, рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдлрд╝реЙрд░реНрдо рднрд░рдиреЗ рдХреЗ рдмрд╛рдж, рд╣рдореЗрдВ рдПрдХ рджреЗрд╢ рдСрдмреНрдЬреЗрдХреНрдЯ рдФрд░ рдПрдХ рдХреНрд╖реЗрддреНрд░ рдСрдмреНрдЬреЗрдХреНрдЯ рдорд┐рд▓рддрд╛ рд╣реИред

рддрд╛рд░реАрдЦреЛрдВ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░реЗрдВ


Symfony2 рдореЗрдВ рдПрдХ рдЕрдВрддрд░реНрдирд┐рд╣рд┐рдд рддрд┐рдерд┐ рдкреНрд░рдХрд╛рд░ рд╣реИред рдЗрд╕рдореЗрдВ рдХрдИ рд╡рд┐рдЬреЗрдЯ рд╣реИрдВ рдФрд░ рджрд┐рдирд╛рдВрдХ, рдорд╛рд╣ рдФрд░ рд╡рд░реНрд╖, рдпрд╛ рдПрдХ рд╕рд╛рдзрд╛рд░рдг рдкрд╛рда рдлрд╝реАрд▓реНрдб рдЪреБрдирдиреЗ рдХреЗ рд▓рд┐рдП рдХрдИ рдбреНрд░реЙрдк-рдбрд╛рдЙрди рд╕реВрдЪрд┐рдпреЛрдВ рдХреА рддрд░рд╣ рджрд┐рдЦ рд╕рдХрддреЗ рд╣реИрдВ, рдЬрд╣рд╛рдБ рджрд┐рдирд╛рдВрдХ рдПрдХ рд╡рд┐рд╢рд┐рд╖реНрдЯ рдкреНрд░рд╛рд░реВрдк рдореЗрдВ рдкреНрд░рджрд░реНрд╢рд┐рдд рд╣реЛрддреА рд╣реИред рдкрд░рд┐рдгрд╛рдорд╕реНрд╡рд░реВрдк, рдЖрдкрдХреЛ рдПрдХ DateTime рдСрдмреНрдЬреЗрдХреНрдЯ рдорд┐рд▓рддрд╛ рд╣реИред рдкреЙрдк-рдЕрдк рдХреИрд▓реЗрдВрдбрд░ рдХреЛ рдЗрд╕ рдХреНрд╖реЗрддреНрд░ рд╕реЗ рдЬреЛрдбрд╝рдирд╛ рдореБрд╢реНрдХрд┐рд▓ рдирд╣реАрдВ рд╣реИред рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ рдмрд╕ рдХреНрд▓рд╛рд╕ рдПрдЯреНрд░рд┐рдмреНрдпреВрдЯ рдХреЛ рдлреЙрд░реНрдо рдПрд▓рд┐рдореЗрдВрдЯ рдореЗрдВ рдкрд╛рд╕ рдХрд░рдирд╛ рд╣реЛрдЧрд╛, рдФрд░ рдлрд┐рд░ jQuery UI, рдпрд╛ рдХрд┐рд╕реА рдЕрдиреНрдп рдХреИрд▓реЗрдВрдбрд░ рдХреЛ рдЬреЛрдбрд╝рдиреЗ рдХреЗ рдмрд╛рдж, рдЯреЗрдореНрдкреНрд▓реЗрдЯ рдХреЛ рдЗрд╕рдХреЗ рд▓рд┐рдП рдЯреЗрдореНрдкрд▓реЗрдЯ рдореЗрдВ рд╕реЗрдЯ рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред

DATERANGE


рдХрдо рдЕрдХреНрд╕рд░, рд▓реЗрдХрд┐рди рдлрд┐рд░ рднреА рдлреЙрд░реНрдо рдореЗрдВ рдПрдХ рддрд┐рдерд┐ рд╕реАрдорд╛ рдЪреБрдирдирд╛ рдЖрд╡рд╢реНрдпрдХ рд╣реИред рдпрд╣рд╛рдВ рдХреЛрдИ рдорд╛рдирдХ рд╕рд░рд▓ рд╕рдорд╛рдзрд╛рди рдирд╣реАрдВ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдореИрдВрдиреЗ рдЗрд╕рдХреЗ рд▓рд┐рдП рдПрдХ рд╕рд╛рд░реНрд╡рднреМрдорд┐рдХ рд╕рдорд╛рдзрд╛рди рд╡рд┐рдХрд╕рд┐рдд рдХрд┐рдпрд╛ред ShtumiUsefulBundle рдореЗрдВ рдПрдХ shtumi_daterange рдкреНрд░рдХрд╛рд░ рд╣реИред рдЗрд╕ рдкреНрд░рдХрд╛рд░ рдХрд╛ рдлрд╝реАрд▓реНрдб рдбреЗрдЯреНрд░реЗрдВрдЬ рдХреНрд▓рд╛рд╕ рдХреА рд╡рд╕реНрддреБрдУрдВ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ, рдЬрд┐рд╕реЗ рдмрдВрдбрд▓ рдХреЗ рдЕрдВрджрд░ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред DateRange рдореЗрдВ рдЕрд╡рдзрд┐ рдХреА рд╢реБрд░реБрдЖрдд рдФрд░ рд╕рдорд╛рдкреНрддрд┐ рддрд┐рдерд┐рдпрд╛рдВ рд╣реЛрддреА рд╣реИрдВ, рддрд┐рдерд┐рдпреЛрдВ рдХрд╛ рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкреНрд░рд╛рд░реВрдк, рд╕рд╛рде рд╣реА рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЛ рд╕реНрдЯреНрд░рд┐рдВрдЧ рдФрд░ рдЗрд╕рдХреЗ рд╡рд┐рдкрд░реАрдд рдкрд░рд┐рд╡рд░реНрддрд┐рдд рдХрд░рдиреЗ рдХреЗ рддрд░реАрдХреЗред

рдЫрд╡рд┐

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

//app/config/config.yml
 shtumi_useful: date_range: date_format: d/m/Y default_interval: P30D 


DateRange рдСрдмреНрдЬреЗрдХреНрдЯ рдмрдирд╛рдиреЗ рдХреА рд╕реБрд╡рд┐рдзрд╛ рдХреЗ рд▓рд┐рдП, рдПрдХ рдЕрд▓рдЧ рд╕реЗрд╡рд╛ ShtumiUsefulBundle рдореЗрдВ рдкрдВрдЬреАрдХреГрдд рд╣реИред

DateRange рдСрдмреНрдЬреЗрдХреНрдЯ рдмрдирд╛рдиреЗ рдХреЗ рддреАрди рддрд░реАрдХреЗ рд╣реИрдВ:

1. shtumi_daterange рд╕реЗрд╡рд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛


 // public function createToDate($dateEnd="now", $date_format = null, $date_interval=null) $dateRange1 = $this->container->get('shtumi_daterange')->createToDate(); $dateRange2 = $this->container->get('shtumi_daterange')->createToDate(new \DateTime('2012-01-11'), 'd/m/Y', 'P14D'); 


2. рдХрдХреНрд╖рд╛ рд╕реЗ рд╕реАрдзреЗ рдХрд┐рд╕реА рд╡рд╕реНрддреБ рдХрд╛ рдирд┐рд░реНрдорд╛рдг рдХрд░рдирд╛


 use Shtumi\UsefulBundle\Model\DateRange; ... $date_format = 'Ym-d'; $dateRange3 = new DateRange($date_format); $dateRange3->createToDate(new \DateTime(), 'P3D'); 


3. рдЦрдЬреВрд░ рдХреЗ рдЕрдВрддрд░рд╛рд▓ рд╕реЗ рдпреБрдХреНрдд рдПрдХ рд╕реНрдЯреНрд░рд┐рдВрдЧ рдХреЛ рдкрд╛рд░реНрд╕ рдХрд░рдирд╛ред


 use Shtumi\UsefulBundle\Model\DateRange; ... $dateRange4 = new DateRange('m/d/Y'); $dateRange4->parseData('03/27/2012 - 04/05/2012'); 


DateRange рдСрдмреНрдЬреЗрдХреНрдЯ рд╣реА, рдЬреИрд╕рд╛ рдХрд┐ рдкрд╣рд▓реЗ рдЙрд▓реНрд▓реЗрдЦ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдореЗрдВ рджреЛ рдореБрдЦреНрдп рдЧреБрдг рд╣реИрдВ - рдбреЗрдЯрд╕реНрдЯрд╛рд░реНрдЯ рдХреА рд╢реБрд░реБрдЖрдд рдХреА рддрд╛рд░реАрдЦ рдФрд░ рддрд╛рд░реАрдЦ рдХреЗ рдЕрдВрдд рдХрд╛ рдЕрдВрддрд░рд╛рд▓ред рдпреЗ рдЧреБрдг DateTime рд╕рд┐рд╕реНрдЯрдо рдХреНрд▓рд╛рд╕ рдХреА рд╡рд╕реНрддреБрдПрдБ рд╣реИрдВред

 echo $dateRange->dateEnd->format('dmY'); //23.03.2012 $x = (string)$dateRange3; // 2012-03-20 - 2012-03-23 


Shtumi_daterange рдлрд╝реЙрд░реНрдо рдлрд╝реАрд▓реНрдб рдкреНрд░рдХрд╛рд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдлрд┐рд░ рд╕реЗ рд╕рд░рд▓ рдФрд░ рд╕рд╣рдЬ рд╣реИ:
 $formBuilder ->add('point1', "shtumi_daterange", array('required'=>false , 'default'=>$dateRange1)) 


рдЕрддрд┐рд░рд┐рдХреНрдд DQL рдХрд╛рд░реНрдп


рд╣рд░ рдХреЛрдИ рдЬрд╛рдирддрд╛ рд╣реИ рдХрд┐ Symfony2 Doctrine ORM рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ, рдЬрд┐рд╕рдХреА рдЕрдкрдиреА DQL рдХреНрд╡реЗрд░реА рднрд╛рд╖рд╛ рд╣реИред DQL рд╕рд┐рдВрдЯреИрдХреНрд╕ SQL тАЛтАЛрдХреЗ рд╕рдорд╛рди рд╣реИ, рд▓реЗрдХрд┐рди рдЗрд╕рдореЗрдВ MySQL рдХреЗ рд╕рднреА рдлрд╝рдВрдХреНрд╢рди рдирд╣реАрдВ рд╣реИрдВред рдореБрдЭреЗ рдЕрдХреНрд╕рд░ IFNULL, ROUND рдФрд░ DATE_DIFF рдлрд╝рдВрдХреНрд╢рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдкрдбрд╝рддрд╛ рд╣реИ, рдЬреЛ рдорд╛рдирдХ рдбреЙрдХреНрдЯреНрд░рд┐рди рдкреИрдХреЗрдЬ рдореЗрдВ рд╢рд╛рдорд┐рд▓ рдирд╣реАрдВ рд╣реИрдВред
ShtumiUsefulBundle DQL рдореЗрдВ MySQL рдХреЗ рд╕рдорд╛рди рд╕рд┐рдВрдЯреИрдХреНрд╕ рдХреЗ рд╕рд╛рде рдЗрди рдлрд╝рдВрдХреНрд╢рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рдХреНрд╖рдорддрд╛ рдЬреЛрдбрд╝рддрд╛ рд╣реИред

рдЕрддрд┐рд░рд┐рдХреНрдд DQL рдХрд╛рд░реНрдпреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ рдмрд╕ рдЙрдиреНрд╣реЗрдВ рдбреЙрдХреНрдЯреНрд░рд┐рди рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдореЗрдВ рдЬреЛрдбрд╝рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ:

 doctrine: ... orm: entity_managers: default: dql: datetime_functions: datediff: Shtumi\UsefulBundle\DQL\DateDiff numeric_functions: ifnull: Shtumi\UsefulBundle\DQL\IfNull round: Shtumi\UsefulBundle\DQL\Round 


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


рдмреЗрд╢рдХ, рдкреНрд░рд╕реНрддреБрдд рдмрдВрдбрд▓ рд╡реИрд╢реНрд╡рд┐рдХ рд╕рдорд╕реНрдпрд╛рдУрдВ рдХреЛ рд╣рд▓ рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИред рд▓реЗрдХрд┐рди рдлрд┐рд░ рднреА, рд╕рд┐рдореНрдлрдиреА рдореЗрдВ рдбреЗрд╡рд▓рдкрд░реНрд╕ рдХреЗ рд╕рд╛рдордиреЗ рдЖрдиреЗ рд╡рд╛рд▓реА рдХреБрдЫ рдЫреЛрдЯреА рд╕рдорд╕реНрдпрд╛рдПрдВ рд╣рд▓ рд╣реЛ рдЧрдИрдВ рдФрд░ рдХрдИ рдкрд░рд┐рдпреЛрдЬрдирд╛рдУрдВ рдкрд░ рдореЗрд░рд╛ рдЬреАрд╡рди рдЖрд╕рд╛рди рд╣реЛ рдЧрдпрд╛ред рдореБрдЭреЗ рдЙрдореНрдореАрдж рд╣реИ рдХрд┐ рдореЗрд░рд╛ рдХрд╛рдо рдХрд┐рд╕реА рдФрд░ рдХреЛ рджрд┐рд▓рдЪрд╕реНрдк рд▓рдЧреЗрдЧрд╛ рдФрд░ рдХрдо рд╕реЗ рдХрдо рдЙрд╕рдХреЗ рдЬреАрд╡рди рдХреЛ рдереЛрдбрд╝рд╛ рдЖрд╕рд╛рди рдмрдирд╛ рджреЗрдЧрд╛ред рд╕реНрд╡рд╛рднрд╛рд╡рд┐рдХ рд░реВрдк рд╕реЗ, рдЬреИрд╕рд╛ рдХрд┐ рд╣рдо рд░реВрдкрд░реЗрдЦрд╛ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдирд╛ рдЬрд╛рд░реА рд░рдЦрддреЗ рд╣реИрдВ, ShtumiUsefulBundle рдХреЛ рдирдП рдкреНрд░рдХрд╛рд░ рдХреЗ рд░реВрдкреЛрдВ, DQL рдлрд╝рдВрдХреНрд╢рди, TWIG рдПрдХреНрд╕рдЯреЗрдВрд╢рди рдХреЗ рд╕рд╛рде рдлрд┐рд░ рд╕реЗ рдЬреЛрдбрд╝рд╛ рдЬрд╛рдПрдЧрд╛, рдЖрджрд┐ред рдЗрд╕ рдмрдВрдбрд▓ рдХреЛ рд╡рд┐рдХрд╕рд┐рдд рдХрд░рддреЗ рд╕рдордп, рдореИрдВрдиреЗ рд╕рд╛рд░реНрд╡рднреМрдорд┐рдХ рдФрд░ рдЖрд╕рд╛рдиреА рд╕реЗ рд╡рд┐рдиреНрдпрд╛рд╕ рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХреА, рдореИрдВрдиреЗ рдкреНрд░рд▓реЗрдЦрди рдореЗрдВ рд╡рд┐рд╕реНрддрд╛рд░ рд╕реЗ рд╕рдм рдХреБрдЫ рд╡рд░реНрдгрди рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХреАред рдореБрдЭреЗ рдЗрд╕рдХреЗ рдЙрдкрдпреЛрдЧ, рдЖрд▓реЛрдЪрдирд╛, рдЯрд┐рдкреНрдкрдгрд┐рдпреЛрдВ рдФрд░ рд╕реБрдЭрд╛рд╡реЛрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╕рдореАрдХреНрд╖рд╛ рд╕реБрдирдиреЗ рдореЗрдВ рдмрд╣реБрдд рдЦреБрд╢реА рд╣реЛрдЧреАред

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


All Articles