Symfony 4 рдЪрд░рдг рдХреЗ рд▓рд┐рдП рдПрдХ рдмрдВрдбрд▓ рдмрдирд╛рдПрдВ

рд▓рдЧрднрдЧ рдПрдХ рд╕рд╛рд▓ рдкрд╣рд▓реЗ, рд╣рдорд╛рд░реА рдХрдВрдкрдиреА рдореИрдЧреНрдиреЗрдЯреЛ 1 рдореЗрдВ рд╡рд┐рд╢рд╛рд▓ рдореЛрдиреЛрд▓рд┐рде рдХреЛ рдорд╛рдЗрдХреНрд░реЛрд╕рд░реНрд╡рд┐рд╕ рдореЗрдВ рдЕрд▓рдЧ рдХрд░рдиреЗ рдХреА рдУрд░ рдЕрдЧреНрд░рд╕рд░ рд╣реБрдИред рдЖрдзрд╛рд░ рдХреЗ рд░реВрдк рдореЗрдВ, рдЙрдиреНрд╣реЛрдВрдиреЗ рдХреЗрд╡рд▓ рд╕рд┐рдореНрдлрдиреА 4 рдХреЛ рдЪреБрдирд╛, рдЬреЛ рд░рд┐рд▓реАрдЬ рдореЗрдВ рдЬрд╛рд░реА рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред рдЗрд╕ рд╕рдордп рдХреЗ рджреМрд░рд╛рди рдореИрдВрдиреЗ рдЗрд╕ рд░реВрдкрд░реЗрдЦрд╛ рдкрд░ рдХрдИ рдкрд░рд┐рдпреЛрдЬрдирд╛рдПрдВ рд╡рд┐рдХрд╕рд┐рдд рдХреАрдВ, рд▓реЗрдХрд┐рди рдореИрдВрдиреЗ рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рд╕рд┐рдореНрдлрдиреА рдХреЗ рд▓рд┐рдП рдмрдВрдбрд▓, рдкреБрди: рдЙрдкрдпреЛрдЧ рдХрд┐рдП рдЧрдП рдШрдЯрдХреЛрдВ рдХреЛ рд╡рд┐рдХрд╕рд┐рдд рдХрд░рдирд╛ рджрд┐рд▓рдЪрд╕реНрдк рдкрд╛рдпрд╛ред рдмрд┐рд▓реНрд▓реА рдХреЗ рдиреАрдЪреЗ, рд╕рд╛рдЗрдлрд╝рдореЛрдиреА 4.1 рдХреЗ рддрд╣рдд рдПрдХ рдорд╛рдЗрдХреНрд░реЛрд╕реИрд╕ рдХреА рд╕реНрдерд┐рддрд┐ / рд╕реНрд╡рд╛рд╕реНрдереНрдп рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╣реЗрд▓реНрдердЪреЗрдХ рдмрдВрдбрд▓ рд╡рд┐рдХрд╕рд┐рдд рдХрд░рдиреЗ рдкрд░ рдПрдХ рдХрджрдо-рджрд░-рдЪрд░рдг рдорд╛рд░реНрдЧрджрд░реНрд╢рд┐рдХрд╛, рдЬрд┐рд╕рдореЗрдВ рдореИрдВрдиреЗ рд╕рдмрд╕реЗ рджрд┐рд▓рдЪрд╕реНрдк рдФрд░ рдЬрдЯрд┐рд▓ (рдореЗрд░реЗ рд▓рд┐рдП рдПрдХ рдмрд╛рд░) рдХреНрд╖рдгреЛрдВ рдХреЛ рдЫреВрдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХреАред


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


рдПрдХ рдмрдВрдбрд▓ рдХрдВрдХрд╛рд▓ рдмрдирд╛рдПрдБ


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


composer create-project symfony/skeleton health-check 

рдХреГрдкрдпрд╛ рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ рд╕рд┐рдореНрдлрдиреА 4 PHP 7.1+ рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рддрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдпрджрд┐ рдЖрдк рдиреАрдЪреЗ рджрд┐рдП рдЧрдП рд╕рдВрд╕реНрдХрд░рдг рдкрд░ рдЗрд╕ рдХрдорд╛рдВрдб рдХреЛ рдЪрд▓рд╛рддреЗ рд╣реИрдВ, рддреЛ рдЖрдкрдХреЛ рд╕рд┐рдореНрдлрдиреА 3 рдХреЗ рд▓рд┐рдП рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдХрдВрдХрд╛рд▓ рдорд┐рд▓реЗрдЧрд╛ред


рдпрд╣ рдХрдорд╛рдВрдб рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рд╕рдВрд░рдЪрдирд╛ рдХреЗ рд╕рд╛рде рдПрдХ рдирдпрд╛ рд╕рд┐рдореНрдлрдиреА 4.1 рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдмрдирд╛рддрд╛ рд╣реИ:


рдЫрд╡рд┐


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


composer.json


рдЕрдЧрд▓рд╛ рдХрджрдо composer.json рдХреЛ рд╣рдорд╛рд░реА рдЬрд░реВрд░рддреЛрдВ рдХреЛ рд╕рдВрдкрд╛рджрд┐рдд рдХрд░рдирд╛ рд╣реИред рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рдЖрдкрдХреЛ рдкреНрд░реЛрдЬреЗрдХреНрдЯ type рдХреЛ symfony-bundle рдмрджрд▓рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ symfony-bundle рдпрд╣ рд╕рд┐рдореНрдлрдиреА рдлреНрд▓реЗрдХреНрд╕ рдХреЛ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдореЗрдВ рдПрдХ рдмрдВрдбрд▓ рдЬреЛрдбрд╝рддреЗ рд╕рдордп рдпрд╣ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░рдиреЗ рдореЗрдВ рдорджрдж рдХрд░реЗрдЧрд╛ рдХрд┐ рдпрд╣ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдПрдХ рд╕рд┐рдореНрдлрдиреА рдмрдВрдбрд▓ рд╣реИ, рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ рдЗрд╕реЗ рдХрдиреЗрдХреНрдЯ рдХрд░реЗрдВ рдФрд░ рдиреБрд╕реНрдЦрд╛ рд╕реНрдерд╛рдкрд┐рдд рдХрд░реЗрдВ (рд▓реЗрдХрд┐рди рдмрд╛рдж рдореЗрдВ рдЙрд╕ рдкрд░ рдФрд░ рдЕрдзрд┐рдХ)ред рдЕрдЧрд▓рд╛, name рдФрд░ description рдлрд╝реАрд▓реНрдб рдЬреЛрдбрд╝рдирд╛ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░реЗрдВред name рдЗрд╕рд▓рд┐рдП рднреА рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░рддрд╛ рд╣реИ рдХрд┐ vendor рдЕрдВрджрд░ рдХреМрди рд╕рд╛ рдлрд╝реЛрд▓реНрдбрд░ рдмрдВрдбрд▓ рд░рдЦрд╛ рдЬрд╛рдПрдЧрд╛ред


 "name": "niklesh/health-check", "description": "Health check bundle", 

рдЕрдЧрд▓рд╛ рдорд╣рддреНрд╡рдкреВрд░реНрдг рдХрджрдо autoload рдЕрдиреБрднрд╛рдЧ рдХреЛ рд╕рдВрдкрд╛рджрд┐рдд рдХрд░рдирд╛ рд╣реИ, рдЬреЛ рдмрдВрдбрд▓ рдХрдХреНрд╖рд╛рдУрдВ рдХреЛ рд▓реЛрдб рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЬрд┐рдореНрдореЗрджрд╛рд░ рд╣реИред рдХрд╛рдо рдХреЗ рдорд╛рд╣реМрд▓ рдХреЗ рд▓рд┐рдП autoload , рдХрд╛рдо рдХреЗ рдорд╛рд╣реМрд▓ рдХреЗ рд▓рд┐рдП autoload-dev ред


 "autoload": { "psr-4": { "niklesh\\HealthCheckBundle\\": "src" } }, "autoload-dev": { "psr-4": { "niklesh\\HealthCheckBundle\\Tests\\": "tests" } }, 

scripts рдЕрдиреБрднрд╛рдЧ рдХреЛ рд╣рдЯрд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдЗрд╕рдореЗрдВ рд╕рдВрдкрддреНрддрд┐рдпреЛрдВ рдХреЛ рдЗрдХрдЯреНрдард╛ composer install рдФрд░ composer install рдФрд░ composer update рдХрдорд╛рдВрдб рдХреЛ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж рдХреИрд╢ рдХреЛ рд╕рд╛рдлрд╝ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕реНрдХреНрд░рд┐рдкреНрдЯ рд╣реЛрддреА рд╣реИ, рд╣рд╛рд▓рд╛рдВрдХрд┐, рд╣рдорд╛рд░реЗ рдмрдВрдбрд▓ рдореЗрдВ рдХреЛрдИ рднреА рд╕рдВрдкрддреНрддрд┐ рдпрд╛ рдХреИрд╢ рдирд╣реАрдВ рд╣реЛрддрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдпреЗ рдХрдорд╛рдВрдб рдмреЗрдХрд╛рд░ рд╣реИрдВред


рдЕрдВрддрд┐рдо рдЪрд░рдг require рдФрд░ require-dev рд╡рд░реНрдЧреЛрдВ рдХреЛ рд╕рдВрдкрд╛рджрд┐рдд рдХрд░рдирд╛ require ред рдкрд░рд┐рдгрд╛рдорд╕реНрд╡рд░реВрдк, рд╣рдореЗрдВ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдорд┐рд▓рддреЗ рд╣реИрдВ:


 "require": { "php": "^7.1.3", "ext-ctype": "*", "ext-iconv": "*", "symfony/flex": "^1.0", "symfony/framework-bundle": "^4.1", "sensio/framework-extra-bundle": "^5.2", "symfony/lts": "^4@dev", "symfony/yaml": "^4.1" } 

рдореИрдВ рдзреНрдпрд╛рди рджреЗрддрд╛ рд╣реВрдВ рдХрд┐ рдЬрдм рдмрдВрдбрд▓ рдХрд╛рд░реНрдпрд╢реАрд▓ рдорд╕реМрджреЗ рд╕реЗ рдЬреБрдбрд╝рд╛ рд╣реЛрддрд╛ рд╣реИ, рддреЛ require рд╕реЗ рдирд┐рд░реНрднрд░рддрд╛ рд╕реНрдерд╛рдкрд┐рдд require рдЬрд╛рдПрдЧреАред


рд╣рдо composer update рд╢реБрд░реВ рдХрд░рддреЗ рд╣реИрдВ - рдирд┐рд░реНрднрд░рддрд╛рдПрдВ рд╕реНрдерд╛рдкрд┐рдд рдХреА рдЬрд╛рддреА рд╣реИрдВред


рдЕрдирд╛рд╡рд╢реНрдпрдХ рд╕рдлрд╛рдИ


рддреЛ, рдкреНрд░рд╛рдкреНрдд рдлрд╝рд╛рдЗрд▓реЛрдВ рд╕реЗ рдЖрдк рдирд┐рдореНрди рдлрд╝реЛрд▓реНрдбрд░реЛрдВ рдХреЛ рд╕реБрд░рдХреНрд╖рд┐рдд рд░реВрдк рд╕реЗ рд╣рдЯрд╛ рд╕рдХрддреЗ рд╣реИрдВ:


  • рдмрд┐рди - рд╕рд┐рдореНрдлрдиреА рдХрдорд╛рдВрдб рдЪрд▓рд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдЖрд╡рд╢реНрдпрдХ console рдлрд╝рд╛рдЗрд▓ рд╣реИ
  • рдХреЙрдиреНрдлрд┐рдЧрд░реЗрд╢рди - рд░рд╛рдЙрдЯрд┐рдВрдЧ, рдХрдиреЗрдХреНрдЯреЗрдб рдмрдВрдбрд▓реЛрдВ рдХреЗ рд▓рд┐рдП рдХрдВрдлрд┐рдЧрд░реЗрд╢рди рдлрд╛рдЗрд▓реНрд╕,
    рд╕реЗрд╡рд╛рдУрдВ, рдЖрджрд┐
  • рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ - рдЗрд╕рдореЗрдВ index.php - рдЕрдиреБрдкреНрд░рдпреЛрдЧ рдХрд╛ рдкреНрд░рд╡реЗрд╢ рдмрд┐рдВрджреБ рд╣реЛрддрд╛ рд╣реИ
  • var - рд▓реЙрдЧ рдФрд░ cache рдпрд╣рд╛рдБ рд╕рдВрдЧреНрд░рд╣реАрдд рд╣реИрдВ

рд╣рдо src/Kernel.php , .env , .env.dist рднреА рд╣рдЯрд╛рддреЗ рд╣реИрдВ
рд╣рдореЗрдВ рдпрд╣ рд╕рдм рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рд╣рдо рдПрдХ рдЖрд╡реЗрджрди рдирд╣реАрдВ рдмрд▓реНрдХрд┐ рдПрдХ рдмрдВрдбрд▓ рд╡рд┐рдХрд╕рд┐рдд рдХрд░ рд░рд╣реЗ рд╣реИрдВред


рдПрдХ рдмрдВрдбрд▓ рд╕рдВрд░рдЪрдирд╛ рдмрдирд╛рдирд╛


рдЗрд╕рд▓рд┐рдП, рд╣рдордиреЗ рдЖрд╡рд╢реНрдпрдХ рдирд┐рд░реНрднрд░рддрд╛ рдХреЛ рдЬреЛрдбрд╝рд╛ рдФрд░ рд╣рдорд╛рд░реЗ рдмрдВрдбрд▓ рд╕реЗ рдЬрд░реВрд░реА рд╕рдм рдХреБрдЫ рд╕рд╛рдл рдХрд┐рдпрд╛ред рдпрд╣ рдмрдВрдбрд▓ рдФрд░ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдХреЛ рд╕рдлрд▓рддрд╛рдкреВрд░реНрд╡рдХ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рд╕реЗ рдХрдиреЗрдХреНрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЖрд╡рд╢реНрдпрдХ рдлрд╝рд╛рдЗрд▓реЗрдВ рдФрд░ рдлрд╝реЛрд▓реНрдбрд░реНрд╕ рдмрдирд╛рдиреЗ рдХрд╛ рд╕рдордп рд╣реИред


рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, src рдлреЛрд▓реНрдбрд░ рдореЗрдВ, HealthCheckBundle.php рдлрд╝рд╛рдЗрд▓ рдХреЛ рдирд┐рдореНрди рд╕рд╛рдордЧреНрд░реА рдХреЗ рд╕рд╛рде рдмрдирд╛рдПрдБ:


 <?php namespace niklesh\HealthCheckBundle; use Symfony\Component\HttpKernel\Bundle\Bundle; class HealthCheckBundle extends Bundle { } 

рдРрд╕реА рдХрдХреНрд╖рд╛ рд╣рд░ рдмрдВрдбрд▓ рдореЗрдВ рд╣реЛрдиреА рдЪрд╛рд╣рд┐рдП рдЬреЛ рдЖрдк рдмрдирд╛рддреЗ рд╣реИрдВред рд╡рд╣ рдореБрдЦреНрдп рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХреЗ config/bundles.php рдореЗрдВ config/bundles.php рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рд╡рд╣ рдмрдВрдбрд▓ рдХреЗ "рдирд┐рд░реНрдорд╛рдг" рдХреЛ рдкреНрд░рднрд╛рд╡рд┐рдд рдХрд░ рд╕рдХрддрд╛ рд╣реИред


рдЕрдЧрд▓реЗ рдмрдВрдбрд▓ рдШрдЯрдХ рдХреА рдЬрд░реВрд░рдд рд╣реИ DependencyInjection рдЦрдВрдбред 2 рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЗ рд╕рд╛рде рдПрдХ рд╣реА рдирд╛рдо рдХрд╛ рдлрд╝реЛрд▓реНрдбрд░ рдмрдирд╛рдПрдБ:


  • src/DependencyInjection/Configuration.php

 <?php namespace niklesh\HealthCheckBundle\DependencyInjection; use Symfony\Component\Config\Definition\Builder\TreeBuilder; use Symfony\Component\Config\Definition\ConfigurationInterface; class Configuration implements ConfigurationInterface { public function getConfigTreeBuilder() { $treeBuilder = new TreeBuilder(); $treeBuilder->root('health_check'); return $treeBuilder; } } 

рдпрд╣ рдлрд╝рд╛рдЗрд▓ рдпрдорд▓ рдпрд╛ xml рдлрд╝рд╛рдЗрд▓реЛрдВ рд╕реЗ рдмрдВрдбрд▓ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдХреЛ рдкрд╛рд░реНрд╕ рдХрд░рдиреЗ рдФрд░ рдорд╛рдиреНрдп рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЬрд╝рд┐рдореНрдореЗрджрд╛рд░ рд╣реИред рд╣рдо рдЗрд╕реЗ рдмрд╛рдж рдореЗрдВ рд╕рдВрд╢реЛрдзрд┐рдд рдХрд░реЗрдВрдЧреЗред


  • src/DependencyInjection/HealthCheckExtension.php

 <?php namespace niklesh\HealthCheckBundle\DependencyInjection; use Symfony\Component\Config\FileLocator; use Symfony\Component\DependencyInjection\ContainerBuilder; use Symfony\Component\HttpKernel\DependencyInjection\Extension; use Symfony\Component\DependencyInjection\Loader; class HealthCheckExtension extends Extension { /** * {@inheritdoc} */ public function load(array $configs, ContainerBuilder $container) { $configuration = new Configuration(); $this->processConfiguration($configuration, $configs); $loader = new Loader\YamlFileLoader($container, new FileLocator(__DIR__ . '/../Resources/config')); $loader->load('services.yaml'); } } 

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


рдФрд░ рдЗрд╕ рд╕реНрддрд░ рдкрд░ рдЕрдВрддрд┐рдо рдЪрд░рдг src/Resources/services.yaml рдлрд╝рд╛рдЗрд▓ рдХреЛ рдЬреЛрдбрд╝рдирд╛ рд╣реИ, рдЬрд┐рд╕рдореЗрдВ рд╣рдорд╛рд░реА рдмрдВрдбрд▓ рд╕реЗрд╡рд╛рдУрдВ рдХрд╛ рд╡рд┐рд╡рд░рдг рд╣реЛрдЧрд╛ред рдЗрд╕реЗ рдЕрднреА рдХреЗ рд▓рд┐рдП рдЦрд╛рд▓реА рдЫреЛрдбрд╝ рджреЗрдВред


HealthInterface


рд╣рдорд╛рд░реЗ рдмрдВрдбрд▓ рдХрд╛ рдореБрдЦреНрдп рдХрд╛рд░реНрдп рдЙрд╕ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдбреЗрдЯрд╛ рд╡рд╛рдкрд╕ рдХрд░рдирд╛ рд╣реЛрдЧрд╛ рдЬрд┐рд╕рдореЗрдВ рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рд▓реЗрдХрд┐рди рд╕реВрдЪрдирд╛ рдХрд╛ рд╕рдВрдЧреНрд░рд╣ рд╕реНрд╡рдпрдВ рд╕реЗрд╡рд╛ рдХрд╛ рдХрд╛рдо рд╣реИ, рд╣рдорд╛рд░рд╛ рдмрдВрдбрд▓ рдХреЗрд╡рд▓ рдЙрд╕ рдЬрд╛рдирдХрд╛рд░реА рдХреЗ рдкреНрд░рд╛рд░реВрдк рдХреЛ рдЗрдВрдЧрд┐рдд рдХрд░ рд╕рдХрддрд╛ рд╣реИ рдЬрд┐рд╕реЗ рд╕реЗрд╡рд╛ рдХреЛ рдкреНрд░реЗрд╖рд┐рдд рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП, рдФрд░ рдЬрд┐рд╕ рд╡рд┐рдзрд┐ рд╕реЗ рдпрд╣ рдЬрд╛рдирдХрд╛рд░реА рдкреНрд░рд╛рдкреНрдд рд╣реЛрдЧреАред рдореЗрд░реЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдореЗрдВ, рд╕рднреА рд╕реЗрд╡рд╛рдПрдВ (рдФрд░ рдХрдИ рд╣реЛ рд╕рдХрддреА рд╣реИрдВ) рдЬреЛ рдЬрд╛рдирдХрд╛рд░реА рдПрдХрддреНрд░ рдХрд░рддреА рд╣реИрдВ рдЙрдиреНрд╣реЗрдВ HealthInterface рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдХреЛ 2 рддрд░реАрдХреЛрдВ рд╕реЗ рд▓рд╛рдЧреВ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП: getName рдФрд░ getHealthInfo ред рдмрд╛рдж рд╡рд╛рд▓реЗ рдХреЛ HealthDataInterface рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рд╡рд╛рд▓реА рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЛ рд╡рд╛рдкрд╕ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдПред


рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, src/Entity/HealthDataInterface.php рдбреЗрдЯрд╛ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдмрдирд╛рдПрдБ:


 <?php namespace niklesh\HealthCheckBundle\Entity; interface HealthDataInterface { public const STATUS_OK = 1; public const STATUS_WARNING = 2; public const STATUS_DANGER = 3; public const STATUS_CRITICAL = 4; public function getStatus(): int; public function getAdditionalInfo(): array; } 

рдбреЗрдЯрд╛ рдореЗрдВ рдПрдХ рдкреВрд░реНрдгрд╛рдВрдХ рд╕реНрдерд┐рддрд┐ рдФрд░ рдЕрддрд┐рд░рд┐рдХреНрдд рдЬрд╛рдирдХрд╛рд░реА рд╣реЛрдиреА рдЪрд╛рд╣рд┐рдП (рдЬреЛ, рд╡реИрд╕реЗ, рдЦрд╛рд▓реА рд╣реЛ рд╕рдХрддреА рд╣реИ)ред


рдЪреВрдБрдХрд┐ рдЗрд╕ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдХреЗ рд▓рд╛рдЧреВ рд╣реЛрдиреЗ рдХреА рд╕рдмрд╕реЗ рдЕрдзрд┐рдХ рд╕рдВрднрд╛рд╡рдирд╛ рд╣реИ, рдЕрдзрд┐рдХрд╛рдВрд╢ рд╡рдВрд╢рдЬ, рдореИрдВрдиреЗ рдЗрд╕реЗ src/Entity/CommonHealthData.php рдЬреЛрдбрд╝рдиреЗ рдХрд╛ рдирд┐рд░реНрдгрдп рд▓рд┐рдпрд╛:


 <?php namespace niklesh\HealthCheckBundle\Entity; class CommonHealthData implements HealthDataInterface { private $status; private $additionalInfo = []; public function __construct(int $status) { $this->status = $status; } public function setStatus(int $status) { $this->status = $status; } public function setAdditionalInfo(array $additionalInfo) { $this->additionalInfo = $additionalInfo; } public function getStatus(): int { return $this->status; } public function getAdditionalInfo(): array { return $this->additionalInfo; } } 

рдЕрдВрдд рдореЗрдВ, src/Service/HealthInterface.php рдбреЗрдЯрд╛ рд╕рдВрдЧреНрд░рд╣ рд╕реЗрд╡рд╛рдУрдВ рдХреЗ рд▓рд┐рдП рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдЬреЛрдбрд╝реЗрдВ:


 <?php namespace niklesh\HealthCheckBundle\Service; use niklesh\HealthCheckBundle\Entity\HealthDataInterface; interface HealthInterface { public function getName(): string; public function getHealthInfo(): HealthDataInterface; } 

рдирд┐рдпрдВрддреНрд░рдХ


рдХрдВрдЯреНрд░реЛрд▓рд░ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╕рд┐рд░реНрдл рдПрдХ рд░реВрдЯ рдореЗрдВ рдбреЗрдЯрд╛ рджреЗрдЧрд╛ред рд▓реЗрдХрд┐рди рдпрд╣ рдорд╛рд░реНрдЧ рдЗрд╕ рдмрдВрдбрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рд╡рд╛рд▓реА рд╕рднреА рдкрд░рд┐рдпреЛрдЬрдирд╛рдУрдВ рдХреЗ рд▓рд┐рдП рд╕рдорд╛рди рд╣реЛрдЧрд╛: /health


рд╣рд╛рд▓рд╛рдБрдХрд┐, рд╣рдорд╛рд░реЗ рдХрдВрдЯреНрд░реЛрд▓рд░ рдХрд╛ рдХрд╛рд░реНрдп рдХреЗрд╡рд▓ рдбреЗрдЯрд╛ рджреЗрдирд╛ рдирд╣реАрдВ рд╣реИ, рдмрд▓реНрдХрд┐ рдпрд╣ рдЙрди рд╕реЗрд╡рд╛рдУрдВ рд╕реЗ рдмрд╛рд╣рд░ рдирд┐рдХрд▓рдирд╛ рднреА рд╣реИ рдЬреЛ HealthInterface рдХрд╛рд░реНрдпрд╛рдиреНрд╡рд┐рдд HealthInterface ; рддрджрдиреБрд╕рд╛рд░, рдирд┐рдпрдВрддреНрд░рдХ рдХреЛ рдЗрдирдореЗрдВ рд╕реЗ рдкреНрд░рддреНрдпреЗрдХ рд╕реЗрд╡рд╛ рдХреЗ рд▓рд┐рдВрдХ рдХреЛ рд╕реНрдЯреЛрд░ рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред рдирд┐рдпрдВрддреНрд░рдХ рдХреЗ рд▓рд┐рдП рд╕реЗрд╡рд╛рдУрдВ рдХреЛ рдЬреЛрдбрд╝рдиреЗ рдХреЗ рд▓рд┐рдП addHealthService рд╡рд┐рдзрд┐ рдЬрд┐рдореНрдореЗрджрд╛рд░ рд╣реЛрдЧреА


рдирд┐рдпрдВрддреНрд░рдХ рдЬреЛрдбрд╝реЗрдВ src/Controller/HealthController.php :


 <?php namespace niklesh\HealthCheckBundle\Controller; use niklesh\HealthCheckBundle\Service\HealthInterface; use Symfony\Bundle\FrameworkBundle\Controller\AbstractController; use Symfony\Component\HttpFoundation\JsonResponse; use Symfony\Component\Routing\Annotation\Route; class HealthController extends AbstractController { /** @var HealthInterface[] */ private $healthServices = []; public function addHealthService(HealthInterface $healthService) { $this->healthServices[] = $healthService; } /** * @Route("/health") * @return JsonResponse */ public function getHealth(): JsonResponse { return $this->json(array_map(function (HealthInterface $healthService) { $info = $healthService->getHealthInfo(); return [ 'name' => $healthService->getName(), 'info' => [ 'status' => $info->getStatus(), 'additional_info' => $info->getAdditionalInfo() ] ]; }, $this->healthServices)); } } 

рд╕рдВрдХрд▓рди


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


рд╣рдо HealthInterface рдЯреИрдЧ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдиреЗ HealthInterface рдЕрдкрдиреА рдкреНрд░рддреНрдпреЗрдХ HealthInterface рдореЗрдВ HealthInterface ред


рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдореЗрдВ TAG рд╕реНрдерд┐рд░рд╛рдВрдХ рдЬреЛрдбрд╝реЗрдВ:


 interface HealthInterface { public const TAG = 'health.service'; } 

рдЗрд╕рдХреЗ рдмрд╛рдж, рдЖрдкрдХреЛ рдЗрд╕ рдЯреИрдЧ рдХреЛ рдкреНрд░рддреНрдпреЗрдХ рд╕реЗрд╡рд╛ рдореЗрдВ рдЬреЛрдбрд╝рдирд╛ рд╣реЛрдЧрд╛ред рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдХреЗ рдорд╛рдорд▓реЗ рдореЗрдВ, рдпрд╣ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ
_instanceof рдЕрдиреБрднрд╛рдЧ рдореЗрдВ config/services.yaml рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рд▓рд╛рдЧреВ рдХрд░реЗрдВред рд╣рдорд╛рд░реЗ рдорд╛рдорд▓реЗ рдореЗрдВ, рдпрд╣
рдкреНрд░рд╡рд┐рд╖реНрдЯрд┐ рдЗрд╕ рддрд░рд╣ рджрд┐рдЦрд╛рдИ рджреЗрдЧреА:


 serivces: _instanceof: niklesh\HealthCheckBundle\Service\HealthInterface: tags: - !php/const niklesh\HealthCheckBundle\Service\HealthInterface::TAG 

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


src/HealthCheckBundle.php рдФрд░ build рд╡рд┐рдзрд┐ рдХреЛ рдлрд┐рд░ рд╕реЗ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░реЗрдВ:


 <?php namespace niklesh\HealthCheckBundle; use niklesh\HealthCheckBundle\Service\HealthInterface; use Symfony\Component\DependencyInjection\ContainerBuilder; use Symfony\Component\HttpKernel\Bundle\Bundle; class HealthCheckBundle extends Bundle { public function build(ContainerBuilder $container) { parent::build($container); $container->registerForAutoconfiguration(HealthInterface::class)->addTag(HealthInterface::TAG); } } 

рдЕрдм HealthInterface рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рд╣рд░ рд╡рд░реНрдЧ рдХреЛ рдЯреИрдЧ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред


рдирд┐рдпрдВрддреНрд░рдХ рдХреЛ рд╕реЗрд╡рд╛ рдХреЗ рд░реВрдк рдореЗрдВ рдкрдВрдЬреАрдХреГрдд рдХрд░рдирд╛


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


src/Resources/config/services.yaml рдлрд╝рд╛рдЗрд▓ рдЦреЛрд▓реЗрдВ рдФрд░ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рд╕рд╛рдордЧреНрд░реА рдЬреЛрдбрд╝реЗрдВ


 services: niklesh\HealthCheckBundle\Controller\HealthController: autoconfigure: true 

рд╣рдордиреЗ рдирд┐рдпрдВрддреНрд░рдХ рдХреЛ рд╕реЗрд╡рд╛ рдХреЗ рд░реВрдк рдореЗрдВ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рдкрдВрдЬреАрдХреГрдд рдХрд┐рдпрд╛ рд╣реИ, рдЕрдм рдЗрд╕реЗ рд╕рдВрдХрд▓рди рдЪрд░рдг рдкрд░ рдкрд╣реБрдБрдЪрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред


рдирд┐рдпрдВрддреНрд░рдХ рдореЗрдВ рд╕реЗрд╡рд╛рдУрдВ рдХреЛ рдЬреЛрдбрд╝рдирд╛ред


рдХрдВрдЯреЗрдирд░ рдФрд░ рдмрдВрдбрд▓реЛрдВ рдХреЗ рд╕рдВрдХрд▓рди рдХреЗ рдЪрд░рдг рдореЗрдВ, рд╣рдо рдХреЗрд╡рд▓ рд╕реЗрд╡рд╛ рдкрд░рд┐рднрд╛рд╖рд╛рдУрдВ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдЗрд╕ рд╕реНрддрд░ рдкрд░, рд╣рдореЗрдВ HealthController рдХреА рдкрд░рд┐рднрд╛рд╖рд╛ рд▓реЗрдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ рдФрд░ рд╕рдВрдХреЗрдд рдорд┐рд▓рддрд╛ рд╣реИ рдХрд┐ рдЗрд╕рдХреЗ рдирд┐рд░реНрдорд╛рдг рдХреЗ рдмрд╛рдж рдпрд╣ рдЖрд╡рд╢реНрдпрдХ рд╣реИ рдХрд┐ рдЗрд╕рдореЗрдВ рдЙрди рд╕рднреА рд╕реЗрд╡рд╛рдУрдВ рдХреЛ рдЬреЛрдбрд╝рд╛ рдЬрд╛рдП рдЬреЛ рд╣рдорд╛рд░реЗ рдЯреИрдЧ рдХреЗ рд╕рд╛рде рдЪрд┐рд╣реНрдирд┐рдд рд╣реИрдВред рдмрдВрдбрд▓реЛрдВ рдореЗрдВ рдЗрд╕ рддрд░рд╣ рдХреЗ рд╕рдВрдЪрд╛рд▓рди рдХреЗ рд▓рд┐рдП, рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рд╡рд░реНрдЧ рдЬрд┐рдореНрдореЗрджрд╛рд░ рд╣реИрдВ
Symfony\Component\DependencyInjection\Compiler\CompilerPassInterface


рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд src/DependencyInjection/Compiler/HealthServicePath.php рдмрдирд╛рдПрдБ:


 <?php namespace niklesh\HealthCheckBundle\DependencyInjection\Compiler; use niklesh\HealthCheckBundle\Controller\HealthController; use niklesh\HealthCheckBundle\Service\HealthInterface; use Symfony\Component\DependencyInjection\Compiler\CompilerPassInterface; use Symfony\Component\DependencyInjection\ContainerBuilder; use Symfony\Component\DependencyInjection\Reference; class HealthServicesPath implements CompilerPassInterface { public function process(ContainerBuilder $container) { if (!$container->has(HealthController::class)) { return; } $controller = $container->findDefinition(HealthController::class); foreach (array_keys($container->findTaggedServiceIds(HealthInterface::TAG)) as $serviceId) { $controller->addMethodCall('addHealthService', [new Reference($serviceId)]); } } } 

рдЬреИрд╕рд╛ рдХрд┐ рдЖрдк рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ, рд╣рдо рдкрд╣рд▓реЗ findDefinition рдкрджреНрдзрддрд┐ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдирд┐рдпрдВрддреНрд░рдХ рд▓реЗрддреЗ рд╣реИрдВ, рдлрд┐рд░ - рдЯреИрдЧ рджреНрд╡рд╛рд░рд╛ рд╕рднреА рд╕реЗрд╡рд╛рдПрдБ рдФрд░ рдлрд┐рд░, рдПрдХ рд▓реВрдк рдореЗрдВ, рдкреНрд░рддреНрдпреЗрдХ рд╕реЗрд╡рд╛ рдХреЗ рд▓рд┐рдП addHealthService рд╡рд┐рдзрд┐ рдореЗрдВ рдПрдХ рдХреЙрд▓ рдЬреЛрдбрд╝рддреЗ рд╣реИрдВ, рдЬрд╣рд╛рдВ рд╣рдо рдЗрд╕ рд╕реЗрд╡рд╛ рдХреЗ рд▓рд┐рдВрдХ рдХреЛ рдкрд╛рд╕ рдХрд░рддреЗ рд╣реИрдВред


CompilerPath рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛


рдЕрдВрддрд┐рдо рдЪрд░рдг рд╣рдорд╛рд░реЗ HealthServicePath рдХреЛ рдмрдВрдбрд▓ рд╕рдВрдХрд▓рди рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдореЗрдВ рдЬреЛрдбрд╝рдирд╛ рд╣реИред рдЪрд▓рд┐рдП HealthCheckBundle рдХреНрд▓рд╛рд╕ рдореЗрдВ рд╡рд╛рдкрд╕ HealthCheckBundle рд╣реИрдВ рдФрд░ build рд╡рд┐рдзрд┐ рдХреЛ рдереЛрдбрд╝рд╛ рдФрд░ рдмрджрд▓рддреЗ рд╣реИрдВред рдирддреАрдЬрддрди, рд╣рдо рдкреНрд░рд╛рдкреНрдд рдХрд░рддреЗ рд╣реИрдВ:


 <?php namespace niklesh\HealthCheckBundle; use niklesh\HealthCheckBundle\DependencyInjection\Compiler\HealthServicesPath; use niklesh\HealthCheckBundle\Service\HealthInterface; use Symfony\Component\DependencyInjection\ContainerBuilder; use Symfony\Component\HttpKernel\Bundle\Bundle; class HealthCheckBundle extends Bundle { public function build(ContainerBuilder $container) { parent::build($container); $container->addCompilerPass(new HealthServicesPath()); $container->registerForAutoconfiguration(HealthInterface::class)->addTag(HealthInterface::TAG); } } 

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


HealthSenderInterface


рдЗрд╕ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдХрд╛ рдЙрджреНрджреЗрд╢реНрдп рдХрд╣реАрдВ рди рдХрд╣реАрдВ рдбреЗрдЯрд╛ рднреЗрдЬрдиреЗ рдХреЗ рд▓рд┐рдП рдЬрд┐рдореНрдореЗрджрд╛рд░ рд╡рд░реНрдЧреЛрдВ рдХрд╛ рд╡рд░реНрдгрди рдХрд░рдирд╛ рд╣реИред рдЗрд╕реЗ src/Service/HealthSenderInterface рдореЗрдВ рдмрдирд╛рдПрдБ


 <?php namespace niklesh\HealthCheckBundle\Service; use niklesh\HealthCheckBundle\Entity\HealthDataInterface; interface HealthSenderInterface { /** * @param HealthDataInterface[] $data */ public function send(array $data): void; public function getDescription(): string; public function getName(): string; } 

рдЬреИрд╕рд╛ рдХрд┐ рдЖрдк рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ, send рд╡рд┐рдзрд┐ рдХрд┐рд╕реА рднреА рддрд░рд╣ рд╕реЗ HealthInterface рд▓рд╛рдЧреВ рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рд╕рднреА рд╡рд░реНрдЧреЛрдВ рд╕реЗ рдкреНрд░рд╛рдкреНрдд рдбреЗрдЯрд╛ рд╕рд░рдгреА рдХреЛ HealthInterface рдФрд░ рдлрд┐рд░ рдЗрд╕реЗ рдЙрд╕ рд╕реНрдерд╛рди рдкрд░ рднреЗрдЬ HealthInterface рдЬрд╣рд╛рдВ рдЗрд╕рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред
рдХрдВрд╕реЛрд▓ рдХрдорд╛рдВрдб рдЪрд▓рд╛рддреЗ рд╕рдордп рдЬрд╛рдирдХрд╛рд░реА рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП getName рдФрд░ getName рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИред


SendDataCommand


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


 <?php namespace niklesh\HealthCheckBundle\Command; use niklesh\HealthCheckBundle\Entity\HealthDataInterface; use niklesh\HealthCheckBundle\Service\HealthInterface; use niklesh\HealthCheckBundle\Service\HealthSenderInterface; use Symfony\Component\Console\Command\Command; use Symfony\Component\Console\Input\InputInterface; use Symfony\Component\Console\Output\OutputInterface; use Symfony\Component\Console\Style\SymfonyStyle; use Throwable; class SendDataCommand extends Command { public const COMMAND_NAME = 'health:send-info'; private $senders; /** @var HealthInterface[] */ private $healthServices; /** @var SymfonyStyle */ private $io; public function __construct(HealthSenderInterface... $senders) { parent::__construct(self::COMMAND_NAME); $this->senders = $senders; } public function addHealthService(HealthInterface $healthService) { $this->healthServices[] = $healthService; } protected function configure() { parent::configure(); $this->setDescription('Send health data by senders'); } protected function initialize(InputInterface $input, OutputInterface $output) { parent::initialize($input, $output); $this->io = new SymfonyStyle($input, $output); } protected function execute(InputInterface $input, OutputInterface $output) { $this->io->title('Sending health info'); try { $data = array_map(function (HealthInterface $service): HealthDataInterface { return $service->getHealthInfo(); }, $this->healthServices); foreach ($this->senders as $sender) { $this->outputInfo($sender); $sender->send($data); } $this->io->success('Data is sent by all senders'); } catch (Throwable $exception) { $this->io->error('Exception occurred: ' . $exception->getMessage()); $this->io->text($exception->getTraceAsString()); } } private function outputInfo(HealthSenderInterface $sender) { if ($name = $sender->getName()) { $this->io->writeln($name); } if ($description = $sender->getDescription()) { $this->io->writeln($description); } } } 

HealthServicesPath , рдЯреАрдо рдХреЛ рдбреЗрдЯрд╛ рд╕рдВрдЧреНрд░рд╣ рд╕реЗрд╡рд╛рдУрдВ рдХреЗ рдЕрд▓рд╛рд╡рд╛ рд▓рд┐рдЦрддреЗ рд╣реИрдВред


 <?php namespace niklesh\HealthCheckBundle\DependencyInjection\Compiler; use niklesh\HealthCheckBundle\Command\SendDataCommand; use niklesh\HealthCheckBundle\Controller\HealthController; use niklesh\HealthCheckBundle\Service\HealthInterface; use Symfony\Component\DependencyInjection\Compiler\CompilerPassInterface; use Symfony\Component\DependencyInjection\ContainerBuilder; use Symfony\Component\DependencyInjection\Reference; class HealthServicesPath implements CompilerPassInterface { public function process(ContainerBuilder $container) { if (!$container->has(HealthController::class)) { return; } $controller = $container->findDefinition(HealthController::class); $commandDefinition = $container->findDefinition(SendDataCommand::class); foreach (array_keys($container->findTaggedServiceIds(HealthInterface::TAG)) as $serviceId) { $controller->addMethodCall('addHealthService', [new Reference($serviceId)]); $commandDefinition->addMethodCall('addHealthService', [new Reference($serviceId)]); } } } 

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


 health_check: senders: - '@sender.service1' - '@sender.service2' 

рд╣рдорд╛рд░реЗ рдмрдВрдбрд▓ рдЕрднреА рднреА рдирд╣реАрдВ рдЬрд╛рдирддреЗ рдХрд┐ рдЗрд╕ рддрд░рд╣ рдХреЗ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдХреЛ рдХреИрд╕реЗ рд╕рдВрднрд╛рд▓рдирд╛ рд╣реИ, рд╣рдо рдЗрд╕реЗ рд╕рд┐рдЦрд╛рдПрдВрдЧреЗред Configuration.php рдЬрд╛рдПрдБред рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдЯреНрд░реА рдЬреЛрдбрд╝реЗрдВ рдФрд░ рдЬреЛрдбрд╝реЗрдВ:


 <?php namespace niklesh\HealthCheckBundle\DependencyInjection; use Symfony\Component\Config\Definition\Builder\TreeBuilder; use Symfony\Component\Config\Definition\ConfigurationInterface; class Configuration implements ConfigurationInterface { public function getConfigTreeBuilder() { $treeBuilder = new TreeBuilder(); $rootNode = $treeBuilder->root('health_check'); $rootNode ->children() ->arrayNode('senders') ->scalarPrototype()->end() ->end() ->end() ; return $treeBuilder; } } 

рдпрд╣ рдХреЛрдб рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░рддрд╛ рд╣реИ рдХрд┐ рд░реВрдЯ рдиреЛрдб health_check рдиреЛрдб рд╣реЛрдЧрд╛, рдЬрд┐рд╕рдореЗрдВ senders рд╕рд░рдгреА senders , рдЬрд┐рд╕рдореЗрдВ рдмрджрд▓реЗ рдореЗрдВ рдПрдХ рдирд┐рд╢реНрдЪрд┐рдд рд╕рдВрдЦреНрдпрд╛ рдореЗрдВ рд▓рд╛рдЗрдиреЗрдВ рд╣реЛрдВрдЧреАред рдпрд╣реА рд╣реИ, рдЕрдм рд╣рдорд╛рд░рд╛ рдмрдВрдбрд▓ рдЬрд╛рдирддрд╛ рд╣реИ рдХрд┐ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдХреЛ рдХреИрд╕реЗ рд╕рдВрднрд╛рд▓рдирд╛ рд╣реИ, рдЬрд┐рд╕реЗ рд╣рдордиреЗ рдКрдкрд░ рдЙрд▓реНрд▓рд┐рдЦрд┐рдд рдХрд┐рдпрд╛ рд╣реИред рдЯреАрдо рдХреЛ рдкрдВрдЬреАрдХреГрдд рдХрд░рдиреЗ рдХрд╛ рд╕рдордп рдЖ рдЧрдпрд╛ рд╣реИред рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, HealthCheckExtension рдФрд░ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдХреЛрдб рдЬреЛрдбрд╝реЗрдВ:


 <?php namespace niklesh\HealthCheckBundle\DependencyInjection; use niklesh\HealthCheckBundle\Command\SendDataCommand; use Symfony\Component\Config\FileLocator; use Symfony\Component\DependencyInjection\ContainerBuilder; use Symfony\Component\DependencyInjection\Definition; use Symfony\Component\HttpKernel\DependencyInjection\Extension; use Symfony\Component\DependencyInjection\Loader; use Symfony\Component\DependencyInjection\Reference; class HealthCheckExtension extends Extension { /** * {@inheritdoc} */ public function load(array $configs, ContainerBuilder $container) { $configuration = new Configuration(); $config = $this->processConfiguration($configuration, $configs); $loader = new Loader\YamlFileLoader($container, new FileLocator(__DIR__ . '/../Resources/config')); $loader->load('services.yaml'); //    $commandDefinition = new Definition(SendDataCommand::class); //        foreach ($config['senders'] as $serviceId) { $commandDefinition->addArgument(new Reference($serviceId)); } //       $commandDefinition->addTag('console.command', ['command' => SendDataCommand::COMMAND_NAME]); //     $container->setDefinition(SendDataCommand::class, $commandDefinition); } } 

рдпрд╣реА рд╣реИ, рд╣рдорд╛рд░реА рдЯреАрдо рдирд┐рд░реНрдзрд╛рд░рд┐рдд рд╣реИред рдЕрдм, рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдХреЛ рдмрдВрдбрд▓ рдХреЛ рдЬреЛрдбрд╝рдиреЗ рдХреЗ рдмрд╛рдж, рдЬрдм рдмреБрд▓рд╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ
bin/console рд╣рдо рдХрдорд╛рдВрдб рдХреА рдПрдХ рд╕реВрдЪреА рджреЗрдЦреЗрдВрдЧреЗ, рдЬрд┐рд╕рдореЗрдВ рд╣рдорд╛рд░рд╛ health:send-info , рдЖрдк рдЗрд╕реЗ рдЙрд╕реА рддрд░рд╣ рд╕реЗ рдХреЙрд▓ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ: bin/console health:send-info


рд╣рдорд╛рд░реА рдкреЛрдЯрд▓реА рддреИрдпрд╛рд░ рд╣реИред рдпрд╣ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдкрд░ рдЗрд╕рдХрд╛ рдкрд░реАрдХреНрд╖рдг рдХрд░рдиреЗ рдХрд╛ рд╕рдордп рд╣реИред рдПрдХ рдЦрд╛рд▓реА рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдмрдирд╛рдПрдВ:


 composer create-project symfony/skeleton health-test-project 

рдЗрд╕рдореЗрдВ рд╣рдорд╛рд░реЗ рддрд╛рдЬреЗ рдкрдХреЗ рд╣реБрдП рдмрдВрдбрд▓ рдХреЛ рдорд┐рд▓рд╛рдПрдВ, рдЗрд╕рдХреЗ рд▓рд┐рдП рд╣рдо composer.json рдЦрдВрдб рдХреЛ composer.json рдореЗрдВ рдЬреЛрдбрд╝рддреЗ рд╣реИрдВред repositories :


 "repositories": [ { "type": "vcs", "url": "https://github.com/HEKET313/health-check" } ] 

рдФрд░ рдХрдорд╛рдВрдб рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░реЗрдВ:


 composer require niklesh/health-check 

рдФрд░ рднреА, рд╕рдмрд╕реЗ рддреЗрдЬ рд╢реБрд░реБрдЖрдд рдХреЗ рд▓рд┐рдП, рд╣рдорд╛рд░реА рдкрд░рд┐рдпреЛрдЬрдирд╛ рдореЗрдВ рдПрдХ рд╕рд┐рдореНрдлрдиреА рд╕рд░реНрд╡рд░ рдЬреЛрдбрд╝реЗрдВ:


 composer req --dev server 

рдмрдВрдбрд▓ рдЬреБрдбрд╝рд╛ рд╣реБрдЖ рд╣реИ, рд╕рд┐рдореНрдлрдиреА рдлреНрд▓реЗрдХреНрд╕ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ рдЗрд╕реЗ config/bundles.php рд╕реЗ рдЬреЛрдбрд╝рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЛ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ рдПрдХ рдиреБрд╕реНрдЦрд╛ рдмрдирд╛рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рд╡реНрдпрдВрдЬрдиреЛрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдпрд╣рд╛рдВ рдПрдХ рдФрд░ рд▓реЗрдЦ рдореЗрдВ рдЦреВрдмрд╕реВрд░рддреА рд╕реЗ рдЪрд┐рддреНрд░рд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ: https://habr.com/post/345382/ - рдЗрд╕рд▓рд┐рдП рд╡реНрдпрдВрдЬрдиреЛрдВ рдХреЛ рдХреИрд╕реЗ рдмрдирд╛рдПрдВ рдЖрджрд┐ рдкреЗрдВрдЯ рдХрд░реЗрдВред рдореИрдВ рдпрд╣рд╛рдВ рдирд╣реАрдВ рд░рд╣реВрдВрдЧрд╛, рдФрд░ рдЗрд╕ рдмрдВрдбрд▓ рдХреЗ рд▓рд┐рдП рдЕрднреА рддрдХ рдХреЛрдИ рдиреБрд╕реНрдЦрд╛ рдирд╣реАрдВ рд╣реИред


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


  • config/routes/niklesh_health.yaml

 health_check: resource: "@HealthCheckBundle/Controller/HealthController.php" prefix: / type: annotation 

  • config/packages/hiklesh_health.yaml

 health_check: senders: - 'App\Service\Sender' 

рдЕрдм рдЖрдкрдХреЛ рдЯреАрдо рдФрд░ рд╕реВрдЪрдирд╛ рд╕рдВрдЧреНрд░рд╣ рд╡рд░реНрдЧ рдХреЗ рд▓рд┐рдП рд╕реВрдЪрдирд╛ рднреЗрдЬрдиреЗ рдХреА рдХрдХреНрд╖рд╛рдУрдВ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ


  • src/Service/DataCollector.php

рдпрд╣рд╛рдВ рд╕рдм рдХреБрдЫ рдмреЗрд╣рдж рд╕рд░рд▓ рд╣реИред


 <?php namespace App\Service; use niklesh\HealthCheckBundle\Entity\CommonHealthData; use niklesh\HealthCheckBundle\Entity\HealthDataInterface; use niklesh\HealthCheckBundle\Service\HealthInterface; class DataCollector implements HealthInterface { public function getName(): string { return 'Data collector'; } public function getHealthInfo(): HealthDataInterface { $data = new CommonHealthData(HealthDataInterface::STATUS_OK); $data->setAdditionalInfo(['some_data' => 'some_value']); return $data; } } 

  • src/Service/Sender.php

рдФрд░ рдпрд╣рд╛рдБ рдпрд╣ рдФрд░ рднреА рдЖрд╕рд╛рди рд╣реИ


 <?php namespace App\Service; use niklesh\HealthCheckBundle\Entity\HealthDataInterface; use niklesh\HealthCheckBundle\Service\HealthSenderInterface; class Sender implements HealthSenderInterface { /** * @param HealthDataInterface[] $data */ public function send(array $data): void { print "Data sent\n"; } public function getDescription(): string { return 'Sender description'; } public function getName(): string { return 'Sender name'; } } 

рд╣реЛ рдЧрдпрд╛! рдХреИрд╢ рд╕рд╛рдлрд╝ рдХрд░реЗрдВ рдФрд░ рд╕рд░реНрд╡рд░ рд╢реБрд░реВ рдХрд░реЗрдВ


 bin/console cache:clear bin/console server:start 

рдЕрдм рдЖрдк рд╣рдорд╛рд░реА рдЯреАрдо рдХреЛ рдЖрдЬрдорд╛ рд╕рдХрддреЗ рд╣реИрдВ:


 bin/console health:send-info 

рд╣рдореЗрдВ рдРрд╕рд╛ рд╕реБрдВрджрд░ рдирд┐рд╖реНрдХрд░реНрд╖ рдорд┐рд▓рддрд╛ рд╣реИ:


рдЫрд╡рд┐


рдЕрдВрдд рдореЗрдВ, рд╣рдо рдЕрдкрдиреЗ рдорд╛рд░реНрдЧ http://127.0.0.1:8000/health рдкрд░ рджрд╕реНрддрдХ рджреЗрддреЗ рд╣реИрдВ рдФрд░ рдПрдХ рдХрдо рд╕реБрдВрджрд░, рд▓реЗрдХрд┐рди рдпрд╣ рднреА рдирд┐рд╖реНрдХрд░реНрд╖ рдирд┐рдХрд╛рд▓рддреЗ рд╣реИрдВ:


 [{"name":"Data collector","info":{"status":1,"additional_info":{"some_data":"some_value"}}}] 

рд╡рд╣ рд╕рдм рд╣реИ! рдореБрдЭреЗ рдЙрдореНрдореАрдж рд╣реИ рдХрд┐ рдпрд╣ рд╕реАрдзрд╛ рдЯреНрдпреВрдЯреЛрд░рд┐рдпрд▓ рдХрд┐рд╕реА рдХреЛ рд╕рд┐рдореНрдлрдиреА 4 рдХреЗ рд▓рд┐рдП рдмрдВрдбрд▓ рд▓рд┐рдЦрдиреЗ рдХреА рдореВрд▓ рдмрд╛рддреЗрдВ рд╕рдордЭрдиреЗ рдореЗрдВ рдорджрдж рдХрд░рддрд╛ рд╣реИред


PS рд╕реНрд░реЛрдд рдХреЛрдб рдпрд╣рд╛рдВ рдЙрдкрд▓рдмреНрдз рд╣реИ ред

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


All Articles