{"id":248055,"date":"2015-01-17T14:15:02","date_gmt":"2015-01-17T10:15:02","guid":{"rendered":"http:\/\/savepearlharbor.com\/?p=248055"},"modified":"-0001-11-30T00:00:00","modified_gmt":"-0001-11-29T21:00:00","slug":"","status":"publish","type":"post","link":"https:\/\/savepearlharbor.com\/?p=248055","title":{"rendered":"<span class=\"post_title\">\u0421\u043e\u0437\u0434\u0430\u043d\u0438\u0435 \u0441\u043e\u0431\u0441\u0442\u0432\u0435\u043d\u043d\u043e\u0433\u043e \u0432\u0435\u043d\u0434\u043e\u0440\u043d\u043e\u0433\u043e \u0431\u0430\u043d\u0434\u043b\u0430 \u0432 Symfony2<\/span>"},"content":{"rendered":"<div class=\"content html_format\">     \t\u0427\u0430\u0441\u0442\u043e \u0432\u043e\u0437\u043d\u0438\u043a\u0430\u0435\u0442 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e\u0441\u0442\u044c \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u043e\u0434\u0438\u043d\u0430\u043a\u043e\u0432\u044b\u0439 \u043a\u043e\u0434 \u0432 \u0440\u0430\u0437\u043d\u044b\u0445 \u043f\u0440\u043e\u0435\u043a\u0442\u0430\u0445. \u0427\u0442\u043e\u0431\u044b \u043d\u0435 \u0431\u044b\u043b\u043e \u043f\u043e\u0432\u0442\u043e\u0440\u0435\u043d\u0438\u044f \u043a\u043e\u0434\u0430, \u0442\u0430\u043a\u043e\u0439 \u043a\u043e\u0434 \u043e\u0431\u044b\u0447\u043d\u043e \u043f\u043e\u043c\u0435\u0449\u0430\u044e\u0442 \u0432 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0443. \u0412 \u0444\u0440\u0435\u0439\u043c\u0432\u043e\u0440\u043a\u0435 Symfony2 \u0432\u0435\u0441\u044c \u043a\u043e\u0434 \u0434\u043e\u043b\u0436\u0435\u043d \u0431\u044b\u0442\u044c \u043f\u043e\u043c\u0435\u0449\u0451\u043d \u0432 \u0442\u0430\u043a \u043d\u0430\u0437\u044b\u0432\u0430\u0435\u043c\u044b\u0435 \u0431\u0430\u043d\u0434\u043b\u044b (bundle). \u0423\u0436\u0435 \u0441\u0435\u0439\u0447\u0430\u0441 \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u0435\u0442 \u043e\u0433\u0440\u043e\u043c\u043d\u043e\u0435 \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u0431\u0430\u043d\u0434\u043b\u043e\u0432, \u0440\u0435\u0448\u0430\u044e\u0449\u0438\u0445 \u0441\u043e\u0432\u0435\u0440\u0448\u0435\u043d\u043d\u043e \u0440\u0430\u0437\u043d\u044b\u0435 \u0437\u0430\u0434\u0430\u0447\u0438, \u043d\u043e \u0432\u0441\u0451-\u0442\u0430\u043a\u0438 \u0447\u0430\u0441\u0442\u043e \u0432\u043e\u0437\u043d\u0438\u043a\u0430\u0435\u0442 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e\u0441\u0442\u044c \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u044f \u0441\u0432\u043e\u0435\u0433\u043e \u0431\u0430\u043d\u0434\u043b\u0430, \u0440\u0435\u0448\u0430\u044e\u0449\u0435\u0433\u043e \u0440\u0443\u0442\u0438\u043d\u043d\u0443\u044e \u0437\u0430\u0434\u0430\u0447\u0443. <\/p>\n<p>  \u042d\u0442\u043e \u043c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c \u043e\u0431\u044b\u0447\u043d\u044b\u0439 \u0431\u0430\u043d\u0434\u043b, \u043d\u0430\u0445\u043e\u0434\u044f\u0449\u0438\u0439\u0441\u044f \u0432 \u043f\u0430\u043f\u043a\u0435 src, \u0438 \u0442\u043e\u0433\u0434\u0430 \u043f\u0440\u0438 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e\u0441\u0442\u0438 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0435\u0433\u043e \u0432 \u043d\u043e\u0432\u043e\u043c \u043f\u0440\u043e\u0435\u043a\u0442\u0435 \u043d\u0443\u0436\u043d\u043e \u0441\u043a\u043e\u043f\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0435\u0433\u043e \u0432 \u043d\u043e\u0432\u044b\u0439 \u043f\u0440\u043e\u0435\u043a\u0442. \u041d\u043e \u0432 \u0442\u0430\u043a\u043e\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u0432\u043e\u0437\u043d\u0438\u043a\u0430\u0435\u0442 \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u0430 \u0441 \u043e\u0431\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u0435\u043c \u043a\u043e\u0434\u0430, \u0432\u0435\u0434\u044c, \u043a\u043e\u0433\u0434\u0430 \u043a\u043e\u0434 \u0434\u043e\u0441\u0442\u0443\u043f\u0435\u043d \u0434\u043b\u044f \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u044f, \u0442\u043e \u043e\u043d \u0431\u0443\u0434\u0435\u0442 \u0438\u0437\u043c\u0435\u043d\u0451\u043d (\u043e\u0441\u043e\u0431\u044b\u0435 \u0438\u0437\u0432\u0440\u0430\u0449\u0435\u043d\u0446\u044b \u0438\u0437\u043c\u0435\u043d\u044f\u044e\u0442 \u0434\u0430\u0436\u0435 \u043a\u043e\u0434 \u0432 \u043f\u0430\u043f\u043a\u0435 vendor). \u0414\u043b\u044f \u0443\u0434\u043e\u0431\u0441\u0442\u0432\u0430 \u043f\u0440\u043e\u0446\u0435\u0434\u0443\u0440\u044b \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u044f \u0441\u0432\u043e\u0435\u0433\u043e \u043a\u043e\u0434\u0430 \u0432 \u0434\u0440\u0443\u0433\u0438\u0445 \u043f\u0440\u043e\u0435\u043a\u0442\u0430\u0445 \u043c\u043e\u0436\u043d\u043e \u043e\u0444\u043e\u0440\u043c\u0438\u0442\u044c \u0431\u0430\u043d\u0434\u043b \u043a\u0430\u043a \u0432\u043d\u0435\u0448\u043d\u0438\u0439, \u0432\u0435\u043d\u0434\u043e\u0440\u043d\u044b\u0439 \u0431\u0430\u043d\u0434\u043b, \u0438 \u0443\u043f\u0440\u0430\u0432\u043b\u044f\u0442\u044c \u0438\u043c \u0447\u0435\u0440\u0435\u0437 composer \u043d\u0430\u0440\u0430\u0432\u043d\u0435 \u0441 \u043e\u0441\u0442\u0430\u043b\u044c\u043d\u044b\u043c\u0438 \u0441\u0442\u043e\u0440\u043e\u043d\u043d\u0438\u043c\u0438 \u0431\u0430\u043d\u0434\u043b\u0430\u043c\u0438. <\/p>\n<p>  \u042d\u0442\u0430 \u0441\u0442\u0430\u0442\u044c\u044f \u043f\u043e\u0448\u0430\u0433\u043e\u0432\u043e \u043f\u043e\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u0442, \u043a\u0430\u043a \u043c\u043e\u0436\u043d\u043e \u0441 \u043d\u0443\u043b\u044f \u0441\u043e\u0437\u0434\u0430\u0442\u044c \u0431\u0430\u043d\u0434\u043b, \u0434\u043e\u0441\u0442\u0443\u043f\u043d\u044b\u0439 \u043a \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0435 \u0447\u0435\u0440\u0435\u0437 composer.<\/p>\n<p>  \u0421\u043e\u0434\u0435\u0440\u0436\u0430\u043d\u0438\u0435:<\/p>\n<ol>\n<li>\u0421\u043e\u0437\u0434\u0430\u043d\u0438\u0435 \u043d\u043e\u0432\u043e\u0433\u043e \u0431\u0430\u043d\u0434\u043b\u0430<\/li>\n<li>\u0414\u043e\u0431\u0430\u0432\u043b\u0435\u043d\u0438\u0435 \u043d\u0430\u0441\u0442\u0440\u043e\u0435\u043a \u0432 \u0431\u0430\u043d\u0434\u043b<\/li>\n<li>\u041f\u043e\u0434\u0433\u043e\u0442\u043e\u0432\u043a\u0430 \u0431\u0430\u043d\u0434\u043b\u0430 \u043a \u043f\u0443\u0431\u043b\u0438\u043a\u0430\u0446\u0438\u0438<\/li>\n<li>\u041f\u0443\u0431\u043b\u0438\u043a\u0430\u0446\u0438\u044f \u0431\u0430\u043d\u0434\u043b\u0430<\/li>\n<\/ol>\n<p>  \u0411\u0443\u0434\u0435\u0442 \u0440\u0430\u0441\u0441\u043c\u043e\u0442\u0440\u0435\u043d\u043e \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u0435 \u0431\u0430\u043d\u0434\u043b\u0430 \u0434\u043b\u044f \u0443\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u044f \u0441\u0442\u0430\u0442\u0438\u0447\u043d\u044b\u043c\u0438 \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u0430\u043c\u0438 \u0441\u0430\u0439\u0442\u0430. \u041c\u043e\u0436\u043d\u043e \u043d\u0430\u0439\u0442\u0438 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0433\u043e\u0442\u043e\u0432\u044b\u0445 \u043f\u043e\u0434\u043e\u0431\u043d\u044b\u0445 \u0431\u0430\u043d\u0434\u043b\u043e\u0432, \u043d\u043e \u043e\u043d\u0438 \u043b\u0438\u0431\u043e \u0441\u043b\u0438\u0448\u043a\u043e\u043c \u043f\u0440\u043e\u0441\u0442\u044b\u0435, \u043b\u0438\u0431\u043e \u0441\u043b\u0438\u0448\u043a\u043e\u043c \u0441\u043b\u043e\u0436\u043d\u044b\u0435 (\u0442\u0438\u043f\u0430 SonataPageBundle). \u0423\u0440\u043e\u0432\u0435\u043d\u044c \u0441\u0442\u0430\u0442\u044c\u0438 \u2014 \u043f\u0440\u043e\u0434\u0432\u0438\u043d\u0443\u0442\u044b\u0439 \u043d\u043e\u0432\u0438\u0447\u043e\u043a. \u041f\u043e\u0434\u0440\u0430\u0437\u0443\u043c\u0435\u0432\u0430\u0435\u0442\u0441\u044f, \u0447\u0442\u043e \u0447\u0438\u0442\u0430\u0442\u0435\u043b\u044c \u0443\u0436\u0435 \u0443\u043c\u0435\u0435\u0442 \u0441\u043e\u0437\u0434\u0430\u0432\u0430\u0442\u044c \u0431\u0430\u043d\u0434\u043b\u044b \u0432 \u043f\u0440\u043e\u0435\u043a\u0442\u0435, \u0430 \u0442\u0430\u043a\u0436\u0435 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c\u0441\u044f \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440\u0430\u043c\u0438 \u0438 \u0448\u0430\u0431\u043b\u043e\u043d\u0430\u043c\u0438.<a name=\"habracut\"><\/a><\/p>\n<h1>1. \u0421\u043e\u0437\u0434\u0430\u043d\u0438\u0435 \u043d\u043e\u0432\u043e\u0433\u043e \u0431\u0430\u043d\u0434\u043b\u0430<\/h1>\n<p>  <\/p>\n<h2>1.1. \u0413\u0435\u043d\u0435\u0440\u0430\u0446\u0438\u044f \u0431\u0430\u043d\u0434\u043b\u0430 \u0438 \u0435\u0433\u043e \u043f\u0435\u0440\u0432\u043e\u043d\u0430\u0447\u0430\u043b\u044c\u043d\u0430\u044f \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0430<\/h2>\n<p>  <\/p>\n<div class=\"spoiler\"><b class=\"spoiler_title\">\u0423\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0430 Symfony<\/b><\/p>\n<div class=\"spoiler_text\">\u0412 \u044d\u0442\u043e\u0439 \u0441\u0442\u0430\u0442\u044c\u0435 \u044f \u0431\u0443\u0434\u0443 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u043d\u043e\u0432\u0443\u044e \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0443 Symfony 2.6, \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u043d\u0443\u044e \u043a\u043e\u043c\u0430\u043d\u0434\u043e\u0439 &#8216;composer create-project symfony\/framework-standard-edition path\/&#8217; \u0432 \u043a\u043e\u043c\u0430\u043d\u0434\u043d\u043e\u0439 \u0441\u0442\u0440\u043e\u043a\u0435. \u041d\u043e \u0432\u044b \u0441\u0432\u043e\u0431\u043e\u0434\u043d\u044b \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0443\u0436\u0435 \u0433\u043e\u0442\u043e\u0432\u044b\u0439 \u043f\u0440\u043e\u0435\u043a\u0442, \u0432 \u044d\u0442\u043e\u0439 \u0441\u0442\u0430\u0442\u044c\u0435 \u043e\u043d \u0438\u0437\u043c\u0435\u043d\u044f\u0442\u044c\u0441\u044f \u043d\u0435 \u0431\u0443\u0434\u0435\u0442, \u0442\u043e\u043b\u044c\u043a\u043e \u0431\u0443\u0434\u0443\u0442 \u0434\u043e\u0431\u0430\u0432\u043b\u0435\u043d\u044b \u0434\u0432\u0430 \u043d\u043e\u0432\u044b\u0445 \u0431\u0430\u043d\u0434\u043b\u0430.  <\/div>\n<\/div>\n<p>  \u0421\u043e\u0437\u0434\u0430\u043d\u0438\u0435 \u0432\u0435\u043d\u0434\u043e\u0440\u043d\u043e\u0433\u043e \u0431\u0430\u043d\u0434\u043b\u0430 \u043f\u0440\u043e\u0449\u0435 \u0432\u0441\u0435\u0433\u043e \u043d\u0430\u0447\u0430\u0442\u044c \u0441 \u043e\u0431\u044b\u0447\u043d\u043e\u0433\u043e \u0431\u0430\u043d\u0434\u043b\u0430. \u041f\u043e\u044d\u0442\u043e\u043c\u0443 \u0432\u043e\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c\u0441\u044f \u043a\u043e\u043c\u0430\u043d\u0434\u043e\u0439 generate:bundle \u0434\u043b\u044f \u0435\u0433\u043e \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u044f. \u0422\u0443\u0442 \u043d\u0443\u0436\u043d\u043e \u0432\u043d\u0438\u043c\u0430\u0442\u0435\u043b\u044c\u043d\u043e \u043e\u0442\u043d\u0435\u0441\u0442\u0438\u0441\u044c \u043a \u043f\u0440\u0430\u0432\u0438\u043b\u044c\u043d\u043e\u043c\u0443 \u0438\u043c\u0435\u043d\u043e\u0432\u0430\u043d\u0438\u044e, \u0432\u0435\u0434\u044c \u0438\u043c\u0435\u043d\u043d\u043e \u043f\u043e\u0434 \u044d\u0442\u0438\u043c \u043d\u0430\u0437\u0432\u0430\u043d\u0438\u0435\u043c \u0432\u0430\u0448 \u0431\u0430\u043d\u0434\u043b \u0441\u0442\u0430\u043d\u0435\u0442 \u043f\u0443\u0431\u043b\u0438\u0447\u043d\u043e \u0434\u043e\u0441\u0442\u0443\u043f\u0435\u043d. \u041e\u0431\u044b\u0447\u043d\u043e \u0431\u0430\u043d\u0434\u043b\u044b \u043d\u0430\u0437\u044b\u0432\u0430\u044e\u0442\u0441\u044f \u043f\u043e \u0438\u043c\u0435\u043d\u0438 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u0430 \u0438\u043b\u0438 \u043a\u043e\u043c\u043f\u0430\u043d\u0438\u0438 \u0438 \u043f\u043e \u0438\u043c\u0435\u043d\u0438 \u0441\u0430\u043c\u043e\u0433\u043e \u0431\u0430\u043d\u0434\u043b\u0430. \u041f\u043e\u044d\u0442\u043e\u043c\u0443 \u043f\u0440\u0438 \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u0438 \u0431\u0430\u043d\u0434\u043b\u0430 \u044f \u0443\u043a\u0430\u0437\u0430\u043b \u043f\u0440\u043e\u0441\u0442\u0440\u0430\u043d\u0441\u0442\u0432\u043e \u0438\u043c\u0451\u043d Lexxpavlov\/PageBundle \u2014 \u043c\u043e\u0451 \u0438\u043c\u044f \u0438 \u043f\u0440\u043e\u0441\u0442\u043e\u0435 \u043f\u043e\u043d\u044f\u0442\u043d\u043e\u0435 \u043d\u0430\u0437\u0432\u0430\u043d\u0438\u0435. \u041d\u0430 \u043e\u0441\u043d\u043e\u0432\u0430\u043d\u0438\u0438 \u043f\u0440\u043e\u0441\u0442\u0440\u0430\u043d\u0441\u0442\u0432\u0430 \u0438\u043c\u0451\u043d \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438 \u043f\u0440\u0435\u0434\u043b\u0430\u0433\u0430\u0435\u0442\u0441\u044f \u0438\u043c\u044f \u0441\u0430\u043c\u043e\u0433\u043e \u0431\u0430\u043d\u0434\u043b\u0430, \u0432 \u043c\u043e\u0451\u043c \u0441\u043b\u0443\u0447\u0430\u0435 LexxpavlovPageBundle. \u042d\u0442\u043e \u0438\u043c\u044f \u043c\u043e\u0436\u043d\u043e \u0438\u0437\u043c\u0435\u043d\u0438\u0442\u044c, \u043d\u043e \u043c\u0435\u043d\u044f \u043e\u043d\u043e \u0443\u0441\u0442\u0440\u0430\u0438\u0432\u0430\u0435\u0442, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u043c\u043e\u0436\u043d\u043e \u043e\u0441\u0442\u0430\u0432\u0438\u0442\u044c \u0442\u0430\u043a. \u041f\u043e\u0434\u0440\u043e\u0431\u043d\u0435\u0435 \u043f\u0440\u043e \u0438\u043c\u0435\u043d\u043e\u0432\u0430\u043d\u0438\u0435 \u0431\u0430\u043d\u0434\u043b\u0430 \u043c\u043e\u0436\u043d\u043e \u043f\u043e\u0447\u0438\u0442\u0430\u0442\u044c <a href=\"https:\/\/packagist.org\/about\">\u0442\u0443\u0442<\/a>.<\/p>\n<blockquote><p>\u041f\u0440\u0438 \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u0438 \u0431\u0430\u043d\u0434\u043b\u0430 \u043e\u0441\u043e\u0431\u043e\u0435 \u0432\u043d\u0438\u043c\u0430\u043d\u0438\u0435 \u043d\u0443\u0436\u043d\u043e \u0443\u0434\u0435\u043b\u0438\u0442\u044c \u043e\u0434\u043d\u043e\u043c\u0443 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u0443 \u2014 \u0432\u044b\u0431\u043e\u0440\u0443 \u0442\u0438\u043f\u0430 \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u0438. \u0421\u0438\u043c\u0444\u043e\u043d\u0438\u044f \u043f\u0440\u0435\u0434\u043b\u0430\u0433\u0430\u0435\u0442 \u0447\u0435\u0442\u044b\u0440\u0435 \u0440\u0430\u0437\u043d\u044b\u0445 \u0432\u0430\u0440\u0438\u0430\u043d\u0442\u0430 \u2014 yml, xml, php, \u0438\u043b\u0438 annotation. \u041d\u043e \u0440\u0435\u0430\u043b\u044c\u043d\u044b\u0439 \u0432\u044b\u0431\u043e\u0440 \u043f\u0440\u043e\u0438\u0441\u0445\u043e\u0434\u0438\u0442 \u043c\u0435\u0436\u0434\u0443 yml \u0438 annotation, \u0442\u043e \u0435\u0441\u0442\u044c \u043c\u0435\u0436\u0434\u0443 \u0432\u044b\u0431\u043e\u0440\u043e\u043c \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u0438 \u0432 \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u044b\u0445 \u0444\u0430\u0439\u043b\u0430\u0445 \u0444\u043e\u0440\u043c\u0430\u0442\u0430 YAML, \u043b\u0438\u0431\u043e \u0432 \u0444\u043e\u0440\u043c\u0430\u0442\u0435 \u0430\u043d\u043d\u043e\u0442\u0430\u0446\u0438\u0439, \u0440\u0430\u0437\u043c\u0435\u0449\u0430\u0435\u043c\u044b\u0445 \u043f\u0440\u044f\u043c\u043e \u0432 \u043a\u043e\u043c\u043c\u0435\u043d\u0442\u0430\u0440\u0438\u044f\u0445 \u0432 \u0441\u0430\u043c\u043e\u043c \u043a\u043e\u0434\u0435 \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440\u043e\u0432 \u0438 \u0441\u0443\u0449\u043d\u043e\u0441\u0442\u0435\u0439. \u041d\u0430 \u044d\u0442\u043e\u0442 \u0441\u0447\u0451\u0442 \u0431\u044b\u043b\u043e \u0441\u043b\u043e\u043c\u0430\u043d\u043e \u043c\u043d\u043e\u0433\u043e \u043a\u043e\u043f\u0438\u0439 \u0432 <a href=\"http:\/\/habrahabr.ru\/post\/240187\/\">\u044d\u0442\u043e\u043c \u0442\u043e\u043f\u0438\u043a\u0435<\/a>, \u0435\u0441\u0442\u044c \u0430\u0440\u0433\u0443\u043c\u0435\u043d\u0442\u044b \u0432 \u043e\u0431\u043e\u0438\u0445 \u0432\u0430\u0440\u0438\u0430\u043d\u0442\u0430\u0445. \u041c\u043e\u0439 \u0432\u044b\u0431\u043e\u0440 \u0432 \u0434\u0430\u043d\u043d\u043e\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u2014 \u0430\u043d\u043d\u043e\u0442\u0430\u0446\u0438\u0438, \u043f\u043e\u0442\u043e\u043c\u0443 \u0447\u0442\u043e \u043f\u0440\u043e\u0435\u043a\u0442 \u043e\u0447\u0435\u043d\u044c \u043c\u0430\u043b\u0435\u043d\u044c\u043a\u0438\u0439, \u0438 \u043f\u0440\u0435\u0438\u043c\u0443\u0449\u0435\u0441\u0442\u0432\u0430 \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u044b\u0445 \u0444\u0430\u0439\u043b\u043e\u0432 \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u0438 \u043d\u0438\u0432\u0435\u043b\u0438\u0440\u0443\u044e\u0442\u0441\u044f (\u043f\u043e \u0441\u0443\u0442\u0438, \u0442\u043e\u043b\u044c\u043a\u043e \u043e\u0434\u0438\u043d \u0444\u0430\u0439\u043b \u0431\u0443\u0434\u0435\u0442 \u0438\u043c\u0435\u0442\u044c \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u044e \u2014 \u0434\u043e\u043a\u0442\u0440\u0438\u043d\u043e\u0432\u0441\u043a\u0430\u044f \u0441\u0443\u0449\u043d\u043e\u0441\u0442\u044c). \u041d\u0430 \u0431\u044b\u0441\u0442\u0440\u043e\u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0435 \u0441\u0430\u043c\u043e\u0433\u043e \u0431\u0430\u043d\u0434\u043b\u0430 \u0432 production \u0442\u0438\u043f \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u0438 \u043d\u0435 \u0432\u043b\u0438\u044f\u0435\u0442 \u2014 \u0432 \u043b\u044e\u0431\u043e\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u0432\u0435\u0441\u044c \u043a\u043e\u043d\u0444\u0438\u0433 \u043a\u044d\u0448\u0438\u0440\u0443\u0435\u0442\u0441\u044f.<\/p><\/blockquote>\n<p>  \u0414\u0430\u043b\u0435\u0435 \u0441\u043b\u0435\u0434\u0443\u0435\u0442 \u043f\u043e\u0434\u0442\u0432\u0435\u0440\u0434\u0438\u0442\u044c \u0433\u043e\u0442\u043e\u0432\u043d\u043e\u0441\u0442\u044c \u0433\u0435\u043d\u0435\u0440\u0430\u0446\u0438\u0438 \u043d\u043e\u0432\u043e\u0433\u043e \u0431\u0430\u043d\u0434\u043b\u0430 \u0438 \u043f\u043e\u0441\u043b\u0435 \u044d\u0442\u043e\u0433\u043e \u0441\u043e\u0433\u043b\u0430\u0441\u0438\u0442\u044c\u0441\u044f \u0441 \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438\u043c \u043e\u0431\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u0435\u043c \u0444\u0430\u0439\u043b\u0430 AppKernel.php \u0438 \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u0438 \u0440\u043e\u0443\u0442\u043e\u0432 app\/config\/routes.yml.<\/p>\n<h2>1.2. \u0421\u043e\u0437\u0434\u0430\u043d\u0438\u0435 \u0441\u0443\u0449\u043d\u043e\u0441\u0442\u0438 \u0434\u043b\u044f \u0434\u043e\u043a\u0442\u0440\u0438\u043d\u044b<\/h2>\n<p>  \u041f\u0440\u0438\u0448\u043b\u043e \u0432\u0440\u0435\u043c\u044f \u0441\u043e\u0437\u0434\u0430\u0442\u044c \u0441\u0443\u0449\u043d\u043e\u0441\u0442\u044c, \u0432 \u043a\u043e\u0442\u043e\u0440\u043e\u0439 \u0431\u0443\u0434\u0443\u0442 \u043d\u0430\u0445\u043e\u0434\u0438\u0442\u044c\u0441\u044f \u0431\u0443\u0434\u0443\u0449\u0438\u0435 \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u044b. \u041e\u0447\u0435\u0432\u0438\u0434\u043d\u043e, \u0447\u0442\u043e \u0442\u0440\u0435\u0431\u0443\u044e\u0442\u0441\u044f \u043f\u043e\u043b\u044f id, title \u0438 content. \u0422\u0430\u043a\u0436\u0435 \u0431\u0443\u0434\u0435\u0442 \u043f\u043e\u043b\u0435\u0437\u043d\u044b\u043c \u0431\u0443\u043b\u0435\u0432\u043e\u0435 \u043f\u043e\u043b\u0435 published, \u0434\u043b\u044f \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u0438 \u0432\u0440\u0435\u043c\u0435\u043d\u043d\u043e \u043e\u0442\u043a\u043b\u044e\u0447\u0438\u0442\u044c \u043f\u043e\u043a\u0430\u0437 \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u044b, \u0430 \u0442\u0430\u043a\u0436\u0435 \u043f\u043e\u043b\u044f createdAt \u0438 updatedAt \u0441 \u0434\u0430\u0442\u043e\u0439 \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u044f \u0438 \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u0435\u0433\u043e \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u044f \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u044b. \u0412 \u0446\u0435\u043b\u044f\u0445 SEO \u043f\u043e\u043b\u0435\u0437\u043d\u043e \u0434\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u043f\u043e\u043b\u0435 \u0434\u043b\u044f \u0445\u0440\u0430\u043d\u0435\u043d\u0438\u044f \u043d\u0430\u0437\u0432\u0430\u043d\u0438\u044f \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u044b \u0432 \u00ab\u0443\u0440\u043b\u0438\u0444\u0438\u0446\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u043e\u043c\u00bb \u0432\u0438\u0434\u0435, \u043e\u0431\u044b\u0447\u043d\u043e \u0442\u0430\u043a\u043e\u0435 \u043f\u043e\u043b\u0435 \u043d\u0430\u0437\u044b\u0432\u0430\u0435\u0442\u0441\u044f slug, \u0430 \u0442\u0430\u043a\u0436\u0435 \u043f\u043e\u043b\u044f keywords \u0438 description. \u0421\u043e\u0437\u0434\u0430\u0451\u043c \u043f\u0430\u043f\u043a\u0443 Entity \u0432 \u043f\u0430\u043f\u043a\u0435 \u0431\u0430\u043d\u0434\u043b\u0430, \u0438 \u0432 \u043d\u0435\u0439 \u0441\u043e\u0437\u0434\u0430\u0451\u043c \u0444\u0430\u0439\u043b Page.php:  <\/p>\n<div class=\"spoiler\"><b class=\"spoiler_title\">\u041a\u043b\u0430\u0441\u0441 \u0441\u0443\u0449\u043d\u043e\u0441\u0442\u0438 \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u044b Page.php<\/b><\/p>\n<div class=\"spoiler_text\">\n<pre><code class=\"php\">&lt;?php namespace Lexxpavlov\\PageBundle\\Entity;  use Doctrine\\ORM\\Mapping as ORM; use Gedmo\\Mapping\\Annotation as Gedmo;  \/**  * @ORM\\Entity  *\/ class Page {     \/**      * @var integer      * @ORM\\Column(type=&quot;integer&quot;)      * @ORM\\Id      * @ORM\\GeneratedValue(strategy=&quot;AUTO&quot;)      *\/     protected $id;          \/**      * @var string      * @Gedmo\\Slug(fields={&quot;title&quot;}, updatable=false)      * @ORM\\Column(type=&quot;string&quot;, length=100, unique=true)      *\/     protected $slug;      \/**      * @var string      *      * @ORM\\Column(type=&quot;string&quot;, length=255)      *\/     protected $title;      \/**      * @var string      * @ORM\\Column(type=&quot;text&quot;)      *\/     protected $content;      \/**      * @var string      * @ORM\\Column(type=&quot;text&quot;, name=&quot;keywords&quot;, nullable=true)      *\/     protected $keywords;      \/**      * @var string      * @ORM\\Column(type=&quot;text&quot;, name=&quot;description&quot;, nullable=true)      *\/     protected $description;      \/**      * @var boolean      * @ORM\\Column(type=&quot;boolean&quot;, options={&quot;default&quot;:false})      *\/     protected $published = false;      \/**      * @var \\Datetime      * @Gedmo\\Timestampable(on=&quot;create&quot;)      * @ORM\\Column(type=&quot;datetime&quot;, name=&quot;created_at&quot;)      *\/     protected $createdAt;      \/**      * @var \\Datetime      * @Gedmo\\Timestampable(on=&quot;update&quot;)      * @ORM\\Column(type=&quot;datetime&quot;, name=&quot;updated_at&quot;)      *\/     protected $updatedAt;      public function __toString() {         return $this-&gt;title ?: 'n\/a';     }      \/**      * Get id      * @return integer       *\/     public function getId()     {         return $this-&gt;id;     }      \/**      * Set slug      * @param string $slug      * @return Page      *\/     public function setSlug($slug)     {         $this-&gt;slug = $slug;         return $this;     }      \/**      * Get slug      * @return string       *\/     public function getSlug()     {         return $this-&gt;slug;     }      \/**      * Set title      * @param string $title      * @return Page      *\/     public function setTitle($title)     {         $this-&gt;title = $title;         return $this;     }      \/**      * Get title      * @return string       *\/     public function getTitle()     {         return $this-&gt;title;     }      \/**      * Set content      * @param string $content      * @return Page      *\/     public function setContent($content)     {         $this-&gt;content = $content;         return $this;     }      \/**      * Get content      * @return string       *\/     public function getContent()     {         return $this-&gt;content;     }          \/**      * Set meta keywords      * @param string $keywords      * @return Page      *\/     public function setKeywords($mkeywords)     {         $this-&gt;keywords = $keywords;         return $this;     }          \/**      * Get meta keywords      * @return string      *\/     public function getKeywords()     {         return $this-&gt;keywords;     }          \/**      * Set meta description      * @param string $description      * @return Page      *\/     public function setDescription($description)     {         $this-&gt;description = $description;         return $this;     }          \/**      * Set meta description      * @return string      *\/     public function getDescription()     {         return $this-&gt;description;     }      \/**      * Set published      * @param boolean $published      * @return Page      *\/     public function setPublished($published)     {         $this-&gt;published = $published;         return $this;     }      \/**      * Toggle published      * @return Page      *\/     public function togglePublished()     {         $this-&gt;published = !$this-&gt;published;         return $this;     }      \/**      * Get published      * @return boolean       *\/     public function getPublished()     {         return $this-&gt;published;     }      \/**      * Sets created at      * @param  DateTime $createdAt      * @return Page      *\/     public function setCreatedAt(\\DateTime $createdAt)     {         $this-&gt;createdAt = $createdAt;         return $this;     }      \/**      * Returns created at      * @return DateTime      *\/     public function getCreatedAt()     {         return $this-&gt;createdAt;     }      \/**      * Sets updated at      * @param  DateTime $updatedAt      * @return Page      *\/     public function setUpdatedAt(\\DateTime $updatedAt)     {         $this-&gt;updatedAt = $updatedAt;         return $this;     }      \/**      * Returns updated at      * @return DateTime      *\/     public function getUpdatedAt()     {         return $this-&gt;updatedAt;     } } <\/code><\/pre>\n<p>  <\/div>\n<\/div>\n<p>  \u041f\u043e\u043c\u0438\u043c\u043e \u0438\u0437\u0432\u0435\u0441\u0442\u043d\u044b\u0445 \u0430\u043d\u043d\u043e\u0442\u0430\u0446\u0438\u0439 &#x0040;ORM, \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u0435\u043c\u044b\u0445 \u0434\u043e\u043a\u0442\u0440\u0438\u043d\u043e\u0439, \u0437\u0434\u0435\u0441\u044c \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u044b \u0430\u043d\u043d\u043e\u0442\u0430\u0446\u0438\u0438 @Gedmo, \u043f\u0440\u0435\u0434\u043e\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u043d\u044b\u0435 \u0431\u0430\u043d\u0434\u043b\u043e\u043c <a href=\"https:\/\/github.com\/stof\/StofDoctrineExtensionsBundle\">StofDoctrineExtensionsBundle<\/a>. \u0427\u0442\u043e\u0431\u044b \u044d\u0442\u0438 \u0430\u043d\u043d\u043e\u0442\u0430\u0446\u0438\u0438 \u0440\u0430\u0431\u043e\u0442\u0430\u043b\u0438, \u043d\u0443\u0436\u043d\u043e \u0434\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u044d\u0442\u043e\u0442 \u0431\u0430\u043d\u0434\u043b \u0432 \u0441\u0438\u0441\u0442\u0435\u043c\u0443. \u0414\u043b\u044f \u044d\u0442\u043e\u0433\u043e \u0432\u043e\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c\u0441\u044f \u0438\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u0435\u0439 \u0432 \u0435\u0433\u043e \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0430\u0446\u0438\u0438, \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0432 \u043f\u0430\u043a\u0435\u0442 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u0435\u043c composer.json \u043d\u0430\u0448\u0435\u0433\u043e \u043f\u0440\u043e\u0435\u043a\u0442\u0430. \u0414\u043b\u044f \u0440\u0430\u0431\u043e\u0442\u044b \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c\u044b\u0445 \u0430\u043d\u043d\u043e\u0442\u0430\u0446\u0438\u0439 \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u0442\u0430\u043a\u043e\u0439 \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u0438:  <\/p>\n<pre><code>stof_doctrine_extensions:     orm:         default:             sluggable: true             timestampable: true <\/code><\/pre>\n<p>  \u0421\u043e\u0437\u0434\u0430\u043d\u0438\u0435 \u0442\u0430\u0431\u043b\u0438\u0446\u044b \u0432 \u0431\u0430\u0437\u0443 \u0434\u0430\u043d\u043d\u044b\u0445 \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0435\u0442\u0441\u044f \u043a\u043e\u043c\u0430\u043d\u0434\u043e\u0439 &#8216;app\/console doctrine:schema:update &#8212;force&#8217; (\u0435\u0441\u043b\u0438 \u0441\u0430\u043c\u0430 \u0411\u0414 \u0435\u0449\u0451 \u043d\u0435 \u0441\u043e\u0437\u0434\u0430\u043d\u0430, \u0442\u043e \u043d\u0443\u0436\u043d\u043e \u0432\u043d\u0430\u0447\u0430\u043b\u0435 \u0432\u044b\u043f\u043e\u043b\u043d\u0438\u0442\u044c \u043a\u043e\u043c\u0430\u043d\u0434\u0443 &#8216;app\/console doctrine:database:create&#8217;). \u042d\u0442\u0430 \u043a\u043e\u043c\u0430\u043d\u0434\u0430 \u0441\u043e\u0437\u0434\u0430\u0441\u0442 \u0442\u0430\u0431\u043b\u0438\u0446\u0443 \u0441 \u0438\u043c\u0435\u043d\u0435\u043c Page \u0438\u043b\u0438 page, \u0432 \u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u0438 \u043e\u0442 \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438 \u0411\u0414. \u041d\u0430\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u044f \u0432\u0441\u0442\u0440\u0435\u0447\u0430\u043b \u0432 \u0434\u0440\u0443\u0433\u0438\u0445 \u0431\u0430\u043d\u0434\u043b\u0430\u0445, \u0447\u0430\u0449\u0435 \u0432\u0441\u0435\u0433\u043e \u0441\u0442\u043e\u0440\u043e\u043d\u043d\u0438\u0435 \u0431\u0430\u043d\u0434\u043b\u044b \u0441\u043e\u0437\u0434\u0430\u044e\u0442 \u0442\u0430\u0431\u043b\u0438\u0446\u044b \u0431\u0435\u0437 \u0437\u0430\u0433\u043b\u0430\u0432\u043d\u044b\u0445 \u0431\u0443\u043a\u0432, \u043f\u043e\u0442\u043e\u043c\u0443 \u0447\u0442\u043e \u0438\u043d\u0430\u0447\u0435 \u0432 \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u0441\u043b\u0443\u0447\u0430\u044f\u0445 \u043c\u043e\u0433\u0443\u0442 \u0432\u043e\u0437\u043d\u0438\u043a\u043d\u0443\u0442\u044c \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u044b. \u041d\u043e \u0432 \u0434\u0430\u043d\u043d\u043e\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u044d\u0442\u043e \u043d\u0435 \u0432\u0430\u0436\u043d\u043e, \u043f\u043e\u0437\u0436\u0435 \u044d\u0442\u043e\u0442 \u0441\u043a\u043e\u043b\u044c\u0437\u043a\u0438\u0439 \u043c\u043e\u043c\u0435\u043d\u0442 \u0431\u0443\u0434\u0435\u0442 \u0443\u0441\u0442\u0440\u0430\u043d\u0451\u043d.<\/p>\n<h2>1.3. \u0421\u043e\u0437\u0434\u0430\u043d\u0438\u0435 \u0438 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435 \u0444\u043e\u0440\u043c\u044b \u0434\u043b\u044f \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u044f \u043d\u043e\u0432\u044b\u0445 \u0441\u0442\u0440\u0430\u043d\u0438\u0446<\/h2>\n<p>  \u0421\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0439 \u0448\u0430\u0433 \u2014 \u043d\u0430\u043f\u0438\u0441\u0430\u043d\u0438\u0435 \u0442\u0438\u043f\u0430 \u0444\u043e\u0440\u043c\u044b \u0434\u043b\u044f \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u044f \u0441\u0442\u0440\u0430\u043d\u0438\u0446. \u0414\u043b\u044f \u044d\u0442\u043e\u0433\u043e \u0442\u0440\u0435\u0431\u0443\u0435\u0442\u0441\u044f \u0441\u043e\u0437\u0434\u0430\u0442\u044c \u043f\u0430\u043f\u043a\u0443 Form\/Type \u0432 \u0431\u0430\u043d\u0434\u043b\u0435 \u0438 \u0432 \u043d\u0435\u0439 \u0441\u043e\u0437\u0434\u0430\u0442\u044c \u0444\u0430\u0439\u043b PageType.php. \u0421\u043e\u0434\u0435\u0440\u0436\u0438\u043c\u043e\u0435 \u044d\u0442\u043e\u0433\u043e \u0444\u0430\u0439\u043b\u0430 \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u0442\u0440\u0438\u0432\u0438\u0430\u043b\u044c\u043d\u043e\u0435 \u2014 \u0441\u043e\u0437\u0434\u0430\u0451\u043c \u043a\u043b\u0430\u0441\u0441-\u043d\u0430\u0441\u043b\u0435\u0434\u043d\u0438\u043a AbstractType \u0438 \u0443\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u043c \u0432 \u043c\u0435\u0442\u043e\u0434\u0435 buildForm() \u0432\u0441\u0435 \u043f\u043e\u043b\u044f, \u0442\u0440\u0435\u0431\u0443\u0435\u043c\u044b\u0435 \u0434\u043b\u044f \u0437\u0430\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f:  <\/p>\n<pre><code class=\"php\">&lt;?php namespace Lexxpavlov\\PageBundle\\Form\\Type;  use Symfony\\Component\\Form\\AbstractType; use Symfony\\Component\\Form\\FormBuilderInterface;  class PageType extends AbstractType {     public function buildForm(FormBuilderInterface $builder, array $options)     {         $builder             -&gt;add('title', 'text')             -&gt;add('slug', 'text', array('required' =&gt; false))             -&gt;add('content', 'textarea')             -&gt;add('published', 'checkbox', array('required' =&gt; false))             -&gt;add('keywords', 'text', array('required' =&gt; false))             -&gt;add('description', 'text', array('required' =&gt; false))             -&gt;add('save', 'submit')            ;     }          public function getName()     {         return 'lexxpavlov_page';     } } <\/code><\/pre>\n<p>  \u041d\u0435 \u0441\u043b\u0435\u0434\u0443\u0435\u0442 \u0437\u0430\u0431\u044b\u0432\u0430\u0442\u044c \u0443\u043a\u0430\u0437\u0430\u0442\u044c \u0438\u043c\u044f \u0444\u043e\u0440\u043c\u044b, \u0438\u043c\u0435\u044e\u0449\u0435\u0435 \u0432 \u043f\u0440\u0435\u0444\u0438\u043a\u0441\u0435 \u043d\u0430\u0437\u0432\u0430\u043d\u0438\u0435 \u0431\u0430\u043d\u0434\u043b\u0430 \u2014 `lexxpavlov_page`. \u0418\u043c\u0435\u043d\u043d\u043e \u043f\u043e \u044d\u0442\u043e\u043c\u0443 \u0438\u043c\u0435\u043d\u0438 \u043d\u0443\u0436\u043d\u043e \u0438\u0437 \u0442\u0438\u043f\u0430 \u0444\u043e\u0440\u043c\u044b \u0441\u043e\u0437\u0434\u0430\u0442\u044c \u0441\u0435\u0440\u0432\u0438\u0441, \u0438 \u0443\u043a\u0430\u0437\u0430\u043d\u0438\u0435 \u0432\u0435\u043d\u0434\u043e\u0440\u043d\u043e\u0433\u043e \u043f\u0440\u0435\u0444\u0438\u043a\u0441\u0430 \u043f\u043e\u0437\u0432\u043e\u043b\u0438\u0442 \u0438\u0437\u0431\u0435\u0436\u0430\u0442\u044c \u043a\u043e\u043d\u0444\u043b\u0438\u043a\u0442\u043e\u0432 \u0432 \u043f\u0440\u043e\u0435\u043a\u0442\u0435. \u0414\u043b\u044f \u044d\u0442\u043e\u0433\u043e \u0441\u043e\u0437\u0434\u0430\u0434\u0438\u043c \u0444\u0430\u0439\u043b \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u0438 \u0431\u0430\u043d\u0434\u043b\u0430 Resources\/config\/services.yml \u0438 \u0434\u043e\u0431\u0430\u0432\u0438\u043c \u0432 \u043d\u0435\u0433\u043e \u0442\u0430\u043a\u043e\u0439 \u043a\u043e\u0434:  <\/p>\n<pre><code>services:     lexxpavlov_page.form.type.page:         class: Lexxpavlov\\PageBundle\\Form\\Type\\PageType         tags:             - { name: form.type, alias: lexxpavlov_page } <\/code><\/pre>\n<p>  \u0412 \u043f\u0430\u043f\u043a\u0435 Resources\/config \u0443\u0436\u0435 \u043d\u0430\u0445\u043e\u0434\u0438\u0442\u0441\u044f \u0444\u0430\u0439\u043b services.xml, \u043f\u0440\u0435\u0434\u043b\u0430\u0433\u0430\u044e\u0449\u0438\u0439 \u0441\u043e\u0437\u0434\u0430\u0432\u0430\u0442\u044c \u043e\u043f\u0438\u0441\u0430\u043d\u0438\u0435 \u0441\u0435\u0440\u0432\u0438\u0441\u043e\u0432 \u0432 \u043c\u043d\u043e\u0433\u043e\u0441\u043b\u043e\u0432\u043d\u043e\u043c \u0444\u043e\u0440\u043c\u0430\u0442\u0435 XML. \u0422\u0430\u043a \u043a\u0430\u043a \u043c\u044b \u043d\u0430\u043f\u0438\u0441\u0430\u043b\u0438 \u043e\u043f\u0438\u0441\u0430\u043d\u0438\u0435 \u0441\u0435\u0440\u0432\u0438\u0441\u0430 \u043d\u0430 YAML, \u0442\u043e \u043d\u0443\u0436\u043d\u043e \u0443\u0434\u0430\u043b\u0438\u0442\u044c \u0444\u0430\u0439\u043b services.xml \u0438 \u043d\u0430\u0441\u0442\u0440\u043e\u0438\u0442\u044c \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435 \u0444\u0430\u0439\u043b\u0430 services.yml. \u0414\u043b\u044f \u044d\u0442\u043e\u0433\u043e \u043e\u0442\u043a\u0440\u043e\u0435\u043c \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0443 \u0438\u043d\u044a\u0435\u043a\u0442\u043e\u0440\u0430 \u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u0435\u0439 \u0431\u0430\u043d\u0434\u043b\u0430 \u2014 \u0444\u0430\u0439\u043b DependencyInjector\/LexxpavlovPageExtension.php \u0438 \u0438\u0441\u043f\u0440\u0430\u0432\u0438\u043c \u0447\u0442\u0435\u043d\u0438\u0435 \u0444\u0430\u0439\u043b\u0430 XML \u043d\u0430 YAML:  <\/p>\n<pre><code class=\"php\">\/\/ ... $loader = new Loader\\YamlFileLoader($container, new FileLocator(__DIR__.'\/..\/Resources\/config')); $loader-&gt;load('services.yml'); <\/code><\/pre>\n<p>  \u0414\u043e\u0431\u0430\u0432\u0438\u043c \u0432 \u0441\u043e\u0437\u0434\u0430\u043d\u043d\u044b\u0439 \u0433\u0435\u043d\u0435\u0440\u0430\u0442\u043e\u0440\u043e\u043c \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440 DefaultController \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u044f \u0434\u043b\u044f \u043f\u0440\u043e\u0441\u043c\u043e\u0442\u0440\u0430 \u0441\u043f\u0438\u0441\u043a\u0430 \u0441\u0442\u0440\u0430\u043d\u0438\u0446, \u0434\u043b\u044f \u043f\u0440\u043e\u0441\u043c\u043e\u0442\u0440\u0430 \u043e\u0434\u043d\u043e\u0439 \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u044b \u0438 \u0434\u043b\u044f \u0434\u043e\u0431\u0430\u0432\u043b\u0435\u043d\u0438\u044f \u043d\u043e\u0432\u043e\u0439 \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u044b, \u043d\u0435 \u0437\u0430\u0431\u0443\u0434\u0435\u043c \u0434\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u0442\u0430\u043a\u0436\u0435 \u0438 \u0448\u0430\u0431\u043b\u043e\u043d\u044b \u0434\u043b\u044f \u043d\u0438\u0445:  <\/p>\n<pre><code class=\"php\">&lt;?php namespace AppBundle\\Controller;  use Symfony\\Bundle\\FrameworkBundle\\Controller\\Controller; use Sensio\\Bundle\\FrameworkExtraBundle\\Configuration\\Route; use Sensio\\Bundle\\FrameworkExtraBundle\\Configuration\\Template;  use Symfony\\Component\\HttpFoundation\\Request;  use Lexxpavlov\\PageBundle\\Entity\\Page;  \/**  * @Route(&quot;\/page&quot;)  *\/ class DefaultController extends Controller {     \/**      * @Route(&quot;\/&quot;, name=&quot;page&quot;)      * @Template()      *\/     public function indexAction()     {         $pages = $this-&gt;getDoctrine()-&gt;getManager()             -&gt;getRepository('LexxpavlovPageBundle:Page')             -&gt;findAll();                  return array(             'pages' =&gt; $pages,         );     }      \/**      * @Route(&quot;\/show\/{slug}&quot;, name=&quot;page_show&quot;)      * @Template()      *\/     public function showAction(Page $page)     {     }      \/**      * @Route(&quot;\/new&quot;, name=&quot;page_new&quot;)      * @Template()      *\/     public function newAction(Request $request)     {         $page = new Page();              $form = $this-&gt;createForm('lexxpavlov_page', $page);                  if ($request-&gt;isMethod('POST')) {             $form-&gt;handleRequest($request);             if ($form-&gt;isValid()) {                 $em = $this-&gt;getDoctrine()-&gt;getManager();                 $em-&gt;persist($page);                 $em-&gt;flush();                                  return $this-&gt;redirect($this-&gt;generateUrl('page'));             }         }                  return array(             'form' =&gt; $form-&gt;createView(),         );     } } <\/code><\/pre>\n<p>  <\/p>\n<pre><code>{# src\/Lexxpavlov\/PageBundle\/Resources\/views\/Default\/index.html.twig #} &lt;ul&gt; {% for page in pages %}     &lt;li&gt;&lt;a href=&quot;{{ path('page_show', {slug: page.slug}) }}&quot;&gt;{{ page.title }}&lt;\/a&gt;&lt;\/li&gt; {% endfor %} &lt;\/ul&gt; &lt;a href=&quot;{{ path('page_new') }}&quot;&gt;\u0414\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u043d\u043e\u0432\u0443\u044e \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u0443&lt;\/a&gt;  {# src\/Lexxpavlov\/PageBundle\/Resources\/views\/Default\/show.html.twig #} &lt;article&gt;     &lt;h1&gt;{{ page.title }}&lt;\/h1&gt;     &lt;div&gt;\u0414\u0430\u0442\u0430 \u043f\u0443\u0431\u043b\u0438\u043a\u0430\u0446\u0438\u0438: &lt;time datetime=&quot;{{ page.createdAt|date('Y-m-d') }}&quot; pubdate&gt;{{ page.createdAt|date('d.m.Y') }}&lt;\/time&gt;&lt;\/div&gt;     {{ page.content|raw }} &lt;\/article&gt;  {# src\/Lexxpavlov\/PageBundle\/Resources\/views\/Default\/new.html.twig #} &lt;h1&gt;\u0414\u043e\u0431\u0430\u0432\u043b\u0435\u043d\u0438\u0435 \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u044b&lt;\/h1&gt; {{ form(form) }} <\/code><\/pre>\n<p>  <\/p>\n<div class=\"spoiler\"><b class=\"spoiler_title\">Disclaimer \u043e \u043a\u043e\u0434\u0435 \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440\u0430<\/b><\/p>\n<div class=\"spoiler_text\">\u041e\u0442\u043c\u0435\u0447\u0443, \u0447\u0442\u043e \u0432 \u0434\u0430\u043b\u044c\u043d\u0435\u0439\u0448\u0435\u043c \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440 \u0431\u0443\u0434\u0435\u0442 \u0443\u0431\u0440\u0430\u043d \u0438\u0437 \u0431\u0430\u043d\u0434\u043b\u0430, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u044f \u043d\u0435 \u0441\u0442\u0430\u0440\u0430\u043b\u0441\u044f \u043d\u0430\u043f\u0438\u0441\u0430\u0442\u044c \u043a\u0440\u0430\u0441\u0438\u0432\u044b\u0439 \u0438 \u044d\u0444\u0444\u0435\u043a\u0442\u0438\u0432\u043d\u044b\u0439 \u043a\u043e\u0434. \u0422\u0435\u043a\u0443\u0449\u0438\u0439 \u043a\u043e\u0434 \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440\u0430 \u043d\u0435 \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u044d\u0442\u0430\u043b\u043e\u043d\u043d\u044b\u043c \u0434\u043b\u044f \u0442\u0430\u043a\u0438\u0445 \u0437\u0430\u0434\u0430\u0447. \u041f\u043e \u0445\u043e\u0440\u043e\u0448\u0435\u043c\u0443, \u0441\u043b\u0435\u0434\u043e\u0432\u0430\u043b\u043e \u0431\u044b \u043f\u0435\u0440\u0435\u043d\u0435\u0441\u0442\u0438 \u043a\u043e\u0434 \u0440\u0430\u0431\u043e\u0442\u044b \u0441 \u0431\u0430\u0437\u043e\u0439 \u0434\u0430\u043d\u043d\u044b\u0445 \u0432 \u0441\u0435\u0440\u0432\u0438\u0441\u044b. \u041d\u043e \u0441\u0442\u0430\u0442\u044c\u044f \u043d\u0435 \u043e \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440\u0430\u0445, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u044f \u043d\u0435 \u0441\u0442\u0430\u043b \u0440\u0430\u0437\u0434\u0443\u0432\u0430\u0442\u044c \u0438 \u0431\u0435\u0437 \u0442\u043e\u0433\u043e \u0434\u043b\u0438\u043d\u043d\u0443\u044e \u0441\u0442\u0430\u0442\u044c\u044e. \u0421\u043f\u0430\u0441\u0438\u0431\u043e <a href=\"http:\/\/habrahabr.ru\/users\/fesor\/\" class=\"user_link\">Fesor<\/a> \u0437\u0430 \u0437\u0430\u043c\u0435\u0447\u0430\u043d\u0438\u044f.  <\/div>\n<\/div>\n<h2>1.4. \u0421\u043e\u0437\u0434\u0430\u043d\u0438\u0435 \u043a\u043b\u0430\u0441\u0441\u0430 \u0434\u043b\u044f \u0421\u043e\u043d\u0430\u0442\u044b<\/h2>\n<p>  \u0422\u0430\u043a\u0436\u0435 \u0441\u043e\u0437\u0434\u0430\u0434\u0438\u043c \u043a\u043b\u0430\u0441\u0441 \u0434\u043b\u044f \u0430\u0434\u043c\u0438\u043d\u043a\u0438 <a href=\"http:\/\/sonata-project.org\/bundles\/admin\">SonataAdminBundle<\/a> \u2014 \u043f\u043e\u043f\u0443\u043b\u044f\u0440\u043d\u043e\u0439 \u0430\u0434\u043c\u0438\u043d\u0438\u0441\u0442\u0440\u0430\u0442\u0438\u0432\u043d\u043e\u0439 \u043f\u0430\u043d\u0435\u043b\u0438 \u043f\u0440\u043e\u0435\u043a\u0442\u043e\u0432 \u043d\u0430 Symfony2. \u0414\u043b\u044f \u044d\u0442\u043e\u0433\u043e, \u0432\u043e-\u043f\u0435\u0440\u0432\u044b\u0445, \u043d\u0443\u0436\u043d\u043e \u0434\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u0432 \u043f\u0440\u043e\u0435\u043a\u0442 \u0441\u0430\u043c\u0443 \u0430\u0434\u043c\u0438\u043d\u043a\u0443 SonataAdminBundle (\u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u0435\u0442 <a href=\"http:\/\/habrahabr.ru\/post\/136659\/\">\u0441\u0442\u0430\u0440\u0430\u044f \u0441\u0442\u0430\u0442\u044c\u044f<\/a> \u043f\u0440\u043e \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0443 SonataAdminBundle, \u044f \u043f\u043b\u0430\u043d\u0438\u0440\u0443\u044e \u043d\u0430\u043f\u0438\u0441\u0430\u0442\u044c \u043d\u043e\u0432\u0443\u044e \u043f\u043e \u044d\u0442\u043e\u0439 \u0442\u0435\u043c\u0435). \u0414\u0430\u043b\u0435\u0435 \u0442\u0440\u0435\u0431\u0443\u0435\u0442\u0441\u044f \u0441\u043e\u0437\u0434\u0430\u0442\u044c \u0444\u0430\u0439\u043b Admin\/Page.php:  <\/p>\n<div class=\"spoiler\"><b class=\"spoiler_title\">\u041a\u043b\u0430\u0441\u0441 \u0434\u043b\u044f \u0443\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u044f \u0441\u0443\u0449\u043d\u043e\u0441\u0442\u044c\u044e \u0432 SonataAdminBundle<\/b><\/p>\n<div class=\"spoiler_text\">\n<pre><code class=\"php\">&lt;?php namespace Lexxpavlov\\PageBundle\\Admin;  use Sonata\\AdminBundle\\Admin\\Admin; use Sonata\\AdminBundle\\Form\\FormMapper; use Sonata\\AdminBundle\\Datagrid\\DatagridMapper; use Sonata\\AdminBundle\\Datagrid\\ListMapper; use Sonata\\AdminBundle\\Show\\ShowMapper;  class PageAdmin extends Admin {     public function configureListFields(ListMapper $listMapper)     {         $listMapper             -&gt;addIdentifier('title')             -&gt;add('slug')             -&gt;add('published', null, array('editable' =&gt; true))             -&gt;add('createdAt', 'datetime')             -&gt;add('updatedAt', 'datetime')         ;     }      public function configureFormFields(FormMapper $formMapper)     {         $formMapper             -&gt;with('General')                 -&gt;add('slug', null, array('required' =&gt; false))                 -&gt;add('title')                 -&gt;add('content')                 -&gt;add('published', null, array('required' =&gt; false))             -&gt;end()             -&gt;with('SEO')                 -&gt;add('keywords', null, array('required' =&gt; false))                 -&gt;add('description', null, array('required' =&gt; false))             -&gt;end()         ;         $formMapper-&gt;setHelps(array(             'slug' =&gt; 'Leave blank for automatic filling from title field',         ));     }      public function configureDatagridFilters(DatagridMapper $datagridMapper)     {         $datagridMapper             -&gt;add('slug')             -&gt;add('title')             -&gt;add('published')         ;     }      public function configureShowFields(ShowMapper $showMapper)     {         $showMapper             -&gt;add('slug')             -&gt;add('title')             -&gt;add('content')             -&gt;add('published')             -&gt;add('publishedAt', 'datetime')             -&gt;add('createdAt', 'datetime')             -&gt;add('updatedAt', 'datetime')             -&gt;add('keywords')             -&gt;add('description')         ;     } } <\/code><\/pre>\n<p>  <\/div>\n<\/div>\n<p>  \u0422\u0435\u043f\u0435\u0440\u044c, \u0434\u043b\u044f \u0442\u043e\u0433\u043e, \u0447\u0442\u043e\u0431\u044b \u0421\u043e\u043d\u0430\u0442\u0430 \u0435\u0433\u043e \u0443\u0432\u0438\u0434\u0435\u043b\u0430, \u043d\u0443\u0436\u043d\u043e \u043e\u0431\u044a\u044f\u0432\u0438\u0442\u044c \u0441\u0435\u0440\u0432\u0438\u0441 \u0434\u043b\u044f \u043d\u0435\u0433\u043e. \u0421\u0435\u0440\u0432\u0438\u0441\u044b \u0434\u043b\u044f \u0421\u043e\u043d\u0430\u0442\u044b \u044f \u043e\u0431\u044b\u0447\u043d\u043e \u043e\u043f\u0438\u0441\u044b\u0432\u0430\u044e \u0432 \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u043e\u043c \u0444\u0430\u0439\u043b\u0435 \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u0438 \u2014 Resources\/config\/admin.yml:  <\/p>\n<pre><code>services:     sonata.admin.lexxpavlov_page:         class: Lexxpavlov\\PageBundle\\Admin\\Page         tags:             - { name: sonata.admin, manager_type: orm, group: &quot;Content&quot;, label: &quot;Pages&quot;, label_catalogue: &quot;messages&quot; }         arguments:             - ~             - Lexxpavlov\\PageBundle\\Entity\\Page             - ~         calls:             - [ setTranslationDomain, [messages]] <\/code><\/pre>\n<p>  \u0418 \u0442\u0435\u043f\u0435\u0440\u044c \u043d\u0443\u0436\u043d\u043e \u0434\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u0437\u0430\u0433\u0440\u0443\u0437\u043a\u0443 \u044d\u0442\u043e\u0433\u043e \u0444\u0430\u0439\u043b\u0430 \u0432 \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0442\u043e\u0440\u0435 DependencyInjector\/LexxpavlovPageExtension.php:  <\/p>\n<pre><code class=\"php\">$loader = new Loader\\YamlFileLoader($container, new FileLocator(__DIR__.'\/..\/Resources\/config')); $loader-&gt;load('services.yml'); $loader-&gt;load('admin.yml'); <\/code><\/pre>\n<h2>1.5. \u041f\u0440\u043e\u0432\u0435\u0440\u043a\u0430 \u0440\u0430\u0431\u043e\u0442\u044b \u0431\u0430\u043d\u0434\u043b\u0430<\/h2>\n<p>  \u041f\u043e\u0440\u0430 \u043f\u0440\u043e\u0432\u0435\u0440\u044f\u0442\u044c \u043f\u0440\u043e\u0434\u0435\u043b\u0430\u043d\u043d\u0443\u044e \u0440\u0430\u0431\u043e\u0442\u0443 \u2014 \u0437\u0430\u0439\u0442\u0438 \u043d\u0430 \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u0443 \u0441\u0430\u0439\u0442\u0430 \/page\/new, \u0434\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u043d\u0430 \u043d\u0435\u0439 \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u0443 \u0441 \u0437\u0430\u0433\u043e\u043b\u043e\u0432\u043a\u043e\u043c \u00ab\u0422\u0435\u0441\u0442\u00bb, \u0443\u0432\u0438\u0434\u0435\u0442\u044c \u044d\u0442\u0443 \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u0443 \u0432 \u0441\u043f\u0438\u0441\u043a\u0435 \u043d\u0430 \/page\/ \u0438 \u043f\u0440\u043e\u0441\u043c\u043e\u0442\u0440\u0435\u0442\u044c \u0435\u0451 \u043d\u0430 \/page\/show\/tiest, \u0437\u0430\u043e\u0434\u043d\u043e \u043f\u0440\u043e\u0432\u0435\u0440\u0438\u0432 \u0440\u0430\u0431\u043e\u0442\u0443 @Gedmo\/Slug. \u041d\u0430 \u043f\u0435\u0440\u0432\u043e\u0439 \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u0435 \u043d\u0443\u0436\u043d\u043e \u0434\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u0434\u043e\u0431\u0430\u0432\u043b\u0435\u043d\u0438\u0435 \u043d\u043e\u0432\u043e\u0439 \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u044b, \u043d\u0430 \u0432\u0442\u043e\u0440\u043e\u0439 \u2014 \u0443\u0432\u0438\u0434\u0435\u0442\u044c \u0432\u043d\u043e\u0432\u044c \u0441\u043e\u0437\u0434\u0430\u043d\u043d\u0443\u044e \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u0443 \u0432 \u0441\u043f\u0438\u0441\u043a\u0435, \u0438 \u043d\u0430 \u0442\u0440\u0435\u0442\u044c\u0435\u0439 \u2014 \u043e\u0442\u043a\u0440\u044b\u0442\u044c \u0438 \u043f\u043e\u0441\u043c\u043e\u0442\u0440\u0435\u0442\u044c \u043d\u0430 \u043d\u0435\u0451.  <\/p>\n<div class=\"spoiler\"><b class=\"spoiler_title\">\u041e\u0441\u043e\u0431\u0435\u043d\u043d\u043e\u0441\u0442\u0438 \u0442\u0440\u0430\u043d\u0441\u043b\u0438\u0442\u0435\u0440\u0430\u0446\u0438\u0438 \u0440\u0443\u0441\u0441\u043a\u0438\u0445 \u0441\u0438\u043c\u0432\u043e\u043b\u043e\u0432<\/b><\/p>\n<div class=\"spoiler_text\">\u041e\u0431\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a @Gedmo\/Slug \u0443\u043c\u0435\u0435\u0442 \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438 \u043f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u043e\u0432\u044b\u0432\u0430\u0442\u044c \u0440\u0443\u0441\u0441\u043a\u0438\u0435 \u0441\u043b\u043e\u0432\u0430 \u0432 \u0442\u0440\u0430\u043d\u0441\u043b\u0438\u0442. \u041d\u043e \u0434\u0435\u043b\u0430\u0435\u0442 \u044d\u0442\u043e \u043f\u043b\u043e\u0445\u043e \u2014 \u0434\u043e\u0431\u0430\u0432\u043b\u044f\u0435\u0442 \u043b\u0438\u0448\u043d\u0438\u0435 \u0433\u043b\u0430\u0441\u043d\u044b\u0435 \u0431\u0443\u043a\u0432\u044b, \u0442\u0430\u043a \u0447\u0442\u043e \u0441\u043b\u043e\u0432\u043e \u00ab\u0422\u0435\u0441\u0442\u00bb \u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u0441\u044f \u0441\u043b\u043e\u0432\u043e\u043c \u00abtiest\u00bb. \u041f\u043e\u044d\u0442\u043e\u043c\u0443 \u043d\u0443\u0436\u043d\u043e \u043d\u0430\u0443\u0447\u0438\u0442\u044c \u0435\u0433\u043e \u043f\u0440\u0430\u0432\u0438\u043b\u044c\u043d\u043e\u043c\u0443 \u043f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u043e\u0432\u0430\u043d\u0438\u044e. \u0414\u0435\u043b\u0430\u0435\u0442\u0441\u044f \u044d\u0442\u043e \u043e\u0447\u0435\u043d\u044c \u043f\u0440\u043e\u0441\u0442\u043e \u2014 \u0441\u043e\u0437\u0434\u0430\u0451\u0442\u0441\u044f \u0441\u043f\u0435\u0446\u0438\u0430\u043b\u044c\u043d\u044b\u0439 \u043a\u043b\u0430\u0441\u0441 Listener\\SluggableListener, \u0443\u043c\u0435\u044e\u0449\u0438\u0439 \u0441\u043e\u0432\u0435\u0440\u0448\u0430\u0442\u044c \u043f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u043e\u0432\u0430\u043d\u0438\u0435, \u0438 \u0443\u0441\u0442\u0430\u043d\u0430\u0432\u043b\u0438\u0432\u0430\u0435\u0442\u0441\u044f \u0432 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435 \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u0430 \u0441\u043e\u0431\u044b\u0442\u0438\u044f Sluggable:  <\/p>\n<pre><code class=\"php\">&lt;?php namespace Lexxpavlov\\PageBundle\\Listener;  use Gedmo\\Sluggable\\SluggableListener as BaseSluggableListener; use Gedmo\\Sluggable\\Util\\Urlizer;  class SluggableListener extends BaseSluggableListener {     public function __construct(){         $this-&gt;setTransliterator(array($this, 'transliterate'));     }          public function transliterate($text, $separator = '-')     {         $convertTable = array(             '\u0430' =&gt; 'a',  '\u0431' =&gt; 'b',   '\u0432' =&gt; 'v',  '\u0433' =&gt; 'g',  '\u0434' =&gt; 'd',             '\u0435' =&gt; 'e',  '\u0451' =&gt; 'e',   '\u0436' =&gt; 'zh', '\u0437' =&gt; 'z',  '\u0438' =&gt; 'i',             '\u0439' =&gt; 'j',  '\u043a' =&gt; 'k',   '\u043b' =&gt; 'l',  '\u043c' =&gt; 'm',  '\u043d' =&gt; 'n',             '\u043e' =&gt; 'o',  '\u043f' =&gt; 'p',   '\u0440' =&gt; 'r',  '\u0441' =&gt; 's',  '\u0442' =&gt; 't',             '\u0443' =&gt; 'u',  '\u0444' =&gt; 'f',   '\u0445' =&gt; 'h',  '\u0446' =&gt; 'ts', '\u0447' =&gt; 'ch',             '\u0448' =&gt; 'sh', '\u0449' =&gt; 'sch', '\u044c' =&gt; '',   '\u044b' =&gt; 'y',  '\u044a' =&gt; '',             '\u044d' =&gt; 'e',  '\u044e' =&gt; 'yu',  '\u044f' =&gt; 'ya'         );         $text = strtr(trim(mb_strtolower($text, 'UTF-8')), $convertTable);         return Urlizer::urlize($text, $separator);     } } <\/code><\/pre>\n<p>  <\/p>\n<pre><code>stof_doctrine_extensions:     orm:         default:             sluggable: true             timestampable: true     class:         sluggable: Lexxpavlov\\PageBundle\\Listener\\SluggableListener <\/code><\/pre>\n<p>  <\/div>\n<\/div>\n<p>  \u041d\u0430 \u044d\u0442\u043e\u043c \u043f\u0440\u0435\u0434\u0432\u0430\u0440\u0438\u0442\u0435\u043b\u044c\u043d\u0430\u044f \u043f\u043e\u0434\u0433\u043e\u0442\u043e\u0432\u043a\u0430 \u0437\u0430\u0432\u0435\u0440\u0448\u0435\u043d\u0430, \u0431\u0430\u043d\u0434\u043b \u0433\u043e\u0442\u043e\u0432 \u0434\u043b\u044f \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u044f, \u0432 \u0442\u043e\u043c \u0447\u0438\u0441\u043b\u0435, \u0433\u043e\u0442\u043e\u0432 \u043a \u043a\u043e\u043f\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044e \u0432 \u0434\u0440\u0443\u0433\u0438\u0435 \u043f\u0440\u043e\u0435\u043a\u0442\u044b. \u0415\u0441\u043b\u0438 \u0431\u044b \u044d\u0442\u043e \u0431\u044b\u043b \u043e\u0431\u044b\u0447\u043d\u044b\u0439 \u0431\u0430\u043d\u0434\u043b \u0434\u043b\u044f \u0440\u0430\u0431\u043e\u0442\u044b, \u043c\u043e\u0436\u043d\u043e \u0431\u044b\u043b\u043e \u0431\u044b \u043d\u0430 \u044d\u0442\u043e\u043c \u0438 \u043e\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u044c\u0441\u044f, \u043d\u043e \u043d\u0430\u043c \u043d\u0443\u0436\u043d\u043e \u0442\u0435\u043f\u0435\u0440\u044c \u043f\u0440\u0438\u0434\u0430\u0442\u044c \u0435\u043c\u0443 \u043f\u0440\u0438\u0441\u0443\u0449\u0443\u044e \u0432\u0435\u043d\u0434\u043e\u0440\u043d\u044b\u043c \u0431\u0430\u043d\u0434\u043b\u0430\u043c \u0433\u0438\u0431\u043a\u043e\u0441\u0442\u044c \u0432 \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0435 \u0438 \u043f\u043e\u0434\u0433\u043e\u0442\u043e\u0432\u0438\u0442\u044c \u0435\u0433\u043e \u0434\u043b\u044f \u043f\u0443\u0431\u043b\u0438\u043a\u0430\u0446\u0438\u0438.<\/p>\n<h1>2. \u0414\u043e\u0431\u0430\u0432\u043b\u0435\u043d\u0438\u0435 \u043d\u0430\u0441\u0442\u0440\u043e\u0435\u043a \u0432 \u0431\u0430\u043d\u0434\u043b<\/h1>\n<p>  <\/p>\n<h2>2.1. \u0412\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u044c \u0440\u0430\u0441\u0448\u0438\u0440\u0435\u043d\u0438\u044f \u0441\u0443\u0449\u043d\u043e\u0441\u0442\u0438 \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u044b<\/h2>\n<p>  \u0412\u0430\u0436\u043d\u044b\u043c \u043e\u0442\u043b\u0438\u0447\u0438\u0435\u043c \u0432\u0435\u043d\u0434\u043e\u0440\u043d\u044b\u0445 \u0431\u0430\u043d\u0434\u043b\u043e\u0432 \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0438\u0445 \u0441\u043f\u043e\u0441\u043e\u0431\u043d\u043e\u0441\u0442\u044c \u043f\u043e\u0434\u0441\u0442\u0440\u0430\u0438\u0432\u0430\u0442\u044c\u0441\u044f \u043f\u043e\u0434 \u043d\u0443\u0436\u0434\u044b \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e\u0449\u0435\u0433\u043e \u0435\u0433\u043e. \u041d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u0442\u0440\u0435\u0431\u0443\u0435\u0442\u0441\u044f, \u043f\u043e\u043c\u0438\u043c\u043e \u0443\u043a\u0430\u0437\u0430\u043d\u043d\u044b\u0445 \u0432 \u0431\u0430\u043d\u0434\u043b\u0435 \u043f\u043e\u043b\u0435\u0439 \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u044b, \u0434\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u043d\u043e\u0432\u043e\u0435 \u043f\u043e\u043b\u0435 \u0441 \u0438\u043c\u0435\u043d\u0435\u043c \u0430\u0432\u0442\u043e\u0440\u0430 \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u044b \u0438 \u043f\u043e\u043b\u0435, \u0445\u0440\u0430\u043d\u044f\u0449\u0435\u0435 \u0430\u0432\u0442\u043e\u0440\u0430 \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u0438\u0445 \u043f\u0440\u0430\u0432\u043e\u043a \u043d\u0430 \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u0435. \u041a\u0430\u043a \u044d\u0442\u043e \u0441\u0434\u0435\u043b\u0430\u0442\u044c? \u041d\u0430\u043f\u0438\u0441\u0430\u0442\u044c \u043d\u043e\u0432\u044b\u0439 \u043a\u043b\u0430\u0441\u0441 \u0441\u0443\u0449\u043d\u043e\u0441\u0442\u0438? \u0414\u043e\u043b\u0433\u043e \u0438 \u043d\u0443\u0434\u043d\u043e. \u0423\u043d\u0430\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u044c \u0435\u0433\u043e \u043e\u0442 \u0443\u0436\u0435 \u0433\u043e\u0442\u043e\u0432\u043e\u0433\u043e? \u0423\u0436\u0435 \u043b\u0443\u0447\u0448\u0435, \u043a \u0442\u043e\u043c\u0443 \u0436\u0435 \u043d\u0435 \u0437\u0440\u044f \u0432 \u043a\u043b\u0430\u0441\u0441\u0435 \u0441\u0443\u0449\u043d\u043e\u0441\u0442\u0438 \u043f\u043e\u043b\u044f \u043e\u0442\u043c\u0435\u0447\u0435\u043d\u044b \u043a\u0430\u043a protected, \u0430 \u043d\u0435 private.  <\/p>\n<div class=\"spoiler\"><b class=\"spoiler_title\">Doctrine \u0438 \u043f\u0440\u0438\u0432\u0430\u0442\u043d\u044b\u0435 \u043f\u043e\u043b\u044f \u0432 \u0441\u0443\u0449\u043d\u043e\u0441\u0442\u0438<\/b><\/p>\n<div class=\"spoiler_text\">\u041d\u0430 \u0441\u0430\u043c\u043e\u043c \u0434\u0435\u043b\u0435, \u043e\u0442\u043c\u0435\u0442\u043a\u0430 protected \u043d\u0443\u0436\u043d\u0430 \u0442\u043e\u043b\u044c\u043a\u043e \u0434\u043b\u044f \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u0438 \u0434\u043e\u0441\u0442\u0443\u043f\u0430 \u043a \u043f\u043e\u043b\u044f\u043c \u0441\u0443\u043f\u0435\u0440\u043a\u043b\u0430\u0441\u0441\u0430 \u0438\u0437 \u043c\u0435\u0442\u043e\u0434\u043e\u0432 \u043a\u043b\u0430\u0441\u0441\u0430-\u043d\u0430\u0441\u043b\u0435\u0434\u043d\u0438\u043a\u0430. \u0415\u0441\u043b\u0438 \u043f\u043e\u043b\u044f \u0432 \u0441\u0443\u043f\u0435\u0440\u043a\u043b\u0430\u0441\u0441\u0435 \u043e\u0442\u043c\u0435\u0442\u0438\u0442\u044c \u043a\u0430\u043a private, \u0442\u043e \u0414\u043e\u043a\u0442\u0440\u0438\u043d\u0443 \u0432\u0441\u0451 \u0440\u0430\u0432\u043d\u043e \u043c\u043e\u0436\u043d\u043e \u043d\u0430\u0441\u0442\u0440\u043e\u0438\u0442\u044c \u043d\u0430 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435 \u0442\u0430\u043a\u0438\u0445 \u043f\u043e\u043b\u0435\u0439 \u0432 \u043a\u043b\u0430\u0441\u0441\u0435-\u043d\u0430\u0441\u043b\u0435\u0434\u043d\u0438\u043a\u0435, \u0434\u043b\u044f \u044d\u0442\u043e\u0433\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f \u0430\u043d\u043d\u043e\u0442\u0430\u0446\u0438\u044f <a href=\"http:\/\/doctrine-orm.readthedocs.org\/en\/latest\/reference\/inheritance-mapping.html\">MappedSuperclass<\/a>. \u0415\u0441\u043b\u0438 \u0441\u0443\u043f\u0435\u0440\u043a\u043b\u0430\u0441\u0441 \u043e\u0442\u043c\u0435\u0447\u0435\u043d \u044d\u0442\u043e\u0439 \u0430\u043d\u043d\u043e\u0442\u0430\u0446\u0438\u0435\u0439, \u0442\u043e \u0432 \u043a\u043b\u0430\u0441\u0441\u044b-\u043d\u0430\u0441\u043b\u0435\u0434\u043d\u0438\u043a\u0438 \u043f\u043e\u043f\u0430\u0434\u0443\u0442 \u0434\u0430\u0436\u0435 \u043f\u0440\u0438\u0432\u0430\u0442\u043d\u044b\u0435 \u043f\u043e\u043b\u044f. \u0422\u0443\u0442 \u0435\u0441\u0442\u044c \u043e\u0434\u043d\u0430 \u043e\u0441\u043e\u0431\u0435\u043d\u043d\u043e\u0441\u0442\u044c. \u0427\u0430\u0441\u0442\u043e \u0441\u0432\u0435\u0436\u0435\u043d\u0430\u043f\u0438\u0441\u0430\u043d\u043d\u0443\u044e \u0441\u0443\u0449\u043d\u043e\u0441\u0442\u044c \u043e\u0441\u0442\u0430\u0432\u043b\u044f\u044e\u0442 \u0431\u0435\u0437 \u0433\u0435\u0442\u0442\u0435\u0440\u043e\u0432 \u0438 \u0441\u0435\u0442\u0442\u0435\u0440\u043e\u0432, \u0441 \u0442\u0435\u043c, \u0447\u0442\u043e\u0431\u044b \u043f\u043e\u043f\u0440\u043e\u0441\u0438\u0442\u044c \u0434\u043e\u043a\u0442\u0440\u0438\u043d\u0443 \u0441\u043e\u0437\u0434\u0430\u0442\u044c \u0438\u0445 \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438 \u043a\u043e\u043d\u0441\u043e\u043b\u044c\u043d\u043e\u0439 \u043a\u043e\u043c\u0430\u043d\u0434\u043e\u0439 doctrine:generate:entities. \u041d\u043e \u0435\u0441\u043b\u0438 \u044d\u0442\u0438 \u0433\u0435\u0442\u0442\u0435\u0440\u044b\/\u0441\u0435\u0442\u0442\u0435\u0440\u044b \u0443\u0436\u0435 \u0438\u043c\u0435\u044e\u0442\u0441\u044f \u0432 \u0441\u0443\u043f\u0435\u0440\u043a\u043b\u0430\u0441\u0441\u0435, \u0442\u043e \u0434\u043e\u043a\u0442\u0440\u0438\u043d\u0430 \u0432\u0441\u0451 \u0440\u0430\u0432\u043d\u043e \u0431\u0443\u0434\u0435\u0442 \u043f\u044b\u0442\u0430\u0442\u044c\u0441\u044f \u0441\u043e\u0437\u0434\u0430\u0442\u044c \u0432 \u043d\u0430\u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0435\u043c \u043a\u043b\u0430\u0441\u0441\u0435 \u0433\u0435\u0442\u0442\u0435\u0440\u044b \u0434\u043b\u044f protected-\u043f\u043e\u043b\u0435\u0439 \u0438\u0437 \u0441\u0443\u043f\u0435\u0440\u043a\u043b\u0430\u0441\u0441\u0430.  <\/div>\n<\/div>\n<p>  \u0425\u043e\u0440\u043e\u0448\u0435\u0435 \u0440\u0435\u0448\u0435\u043d\u0438\u0435 \u0440\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u043d\u043e \u0432 \u043f\u043e\u043f\u0443\u043b\u044f\u0440\u043d\u043e\u043c \u0431\u0430\u043d\u0434\u043b\u0435 FOSUserBundle \u2014 \u0432 \u0441\u0430\u043c\u043e\u043c \u0431\u0430\u043d\u0434\u043b\u0435 \u043d\u0435\u0442 \u0441\u0443\u0449\u043d\u043e\u0441\u0442\u0435\u0439, \u0442\u043e \u0435\u0441\u0442\u044c, \u043a\u043b\u0430\u0441\u0441\u043e\u0432, \u043e\u0442\u043c\u0435\u0447\u0435\u043d\u043d\u044b\u0445 \u0430\u043d\u043d\u043e\u0442\u0430\u0446\u0438\u0435\u0439 &#x0040;ORM\\Entity. \u0421\u0434\u0435\u043b\u0430\u0435\u043c \u044d\u0442\u043e\u0442 \u0436\u0435 \u043f\u0440\u0438\u0451\u043c \u0438 \u0432 \u043d\u0430\u0448\u0435\u043c \u0431\u0430\u043d\u0434\u043b\u0435. \u041d\u0443\u0436\u043d\u043e \u0443\u0434\u0430\u043b\u0438\u0442\u044c \u0430\u043d\u043d\u043e\u0442\u0430\u0446\u0438\u044e &#x0040;ORM\\Entity \u043f\u0435\u0440\u0435\u0434 \u043a\u043b\u0430\u0441\u0441\u043e\u043c Lexxpavlov\/PageBundle\/Entity\/Page.php. \u0410 \u0434\u043b\u044f \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u044f \u0441\u0443\u0449\u043d\u043e\u0441\u0442\u0438 \u043d\u0443\u0436\u043d\u043e \u0441\u043e\u0437\u0434\u0430\u0442\u044c \u043a\u043b\u0430\u0441\u0441-\u043d\u0430\u0441\u043b\u0435\u0434\u043d\u0438\u043a \u044d\u0442\u043e\u0433\u043e \u043a\u043b\u0430\u0441\u0441\u0430, \u043e\u0442\u043c\u0435\u0442\u0438\u0442\u044c \u0435\u0433\u043e \u043a\u0430\u043a &#x0040;ORM\\Entity, \u0438 \u0432 \u043d\u0435\u0433\u043e \u0436\u0435 \u043c\u043e\u0436\u043d\u043e \u0434\u043e\u0431\u0430\u0432\u043b\u044f\u0442\u044c \u0442\u0440\u0435\u0431\u0443\u0435\u043c\u044b\u0435 \u043a\u0430\u0441\u0442\u043e\u043c\u043d\u044b\u0435 \u0434\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u0435 \u043f\u043e\u043b\u044f. \u042d\u0442\u043e\u0442 \u043a\u043b\u0430\u0441\u0441 \u0431\u0443\u0434\u0435\u0442 \u0445\u043e\u0440\u043e\u0448\u0438\u043c \u043c\u0435\u0441\u0442\u043e\u043c \u0434\u043b\u044f \u0442\u043e\u0433\u043e, \u0447\u0442\u043e\u0431\u044b \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c \u043c\u043e\u0433 \u0432\u044b\u0431\u0440\u0430\u0442\u044c \u0441\u0432\u043e\u0439 \u0441\u043e\u0431\u0441\u0442\u0432\u0435\u043d\u043d\u044b\u0439 \u0441\u0442\u0438\u043b\u044c \u0438\u043c\u0435\u043d\u043e\u0432\u0430\u043d\u0438\u044f \u0442\u0430\u0431\u043b\u0438\u0446\u044b \u2014 \u043b\u0438\u0431\u043e \u0440\u0430\u0437\u0440\u0435\u0448\u0438\u0442\u044c \u0434\u043e\u043a\u0442\u0440\u0438\u043d\u0435 \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438 \u0432\u044b\u0431\u0440\u0430\u0442\u044c \u0438\u043c\u044f \u0442\u0430\u0431\u043b\u0438\u0446\u044b \u0434\u043b\u044f \u043d\u043e\u0432\u043e\u0439 \u0441\u0443\u0449\u043d\u043e\u0441\u0442\u0438, \u043b\u0438\u0431\u043e \u0443\u043a\u0430\u0437\u0430\u0442\u044c \u0441\u0432\u043e\u0451 \u0438\u043c\u044f \u0432 \u0430\u043d\u043d\u043e\u0442\u0430\u0446\u0438\u0438 &#x0040;ORM\\Table.<\/p>\n<p>  \u0414\u043b\u044f \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u044f \u043d\u043e\u0432\u043e\u0439 \u0441\u0443\u0449\u043d\u043e\u0441\u0442\u0438 \u043b\u0443\u0447\u0448\u0435 \u0441\u043e\u0437\u0434\u0430\u0442\u044c \u043d\u043e\u0432\u044b\u0439 \u0431\u0430\u043d\u0434\u043b. \u0412\u043e\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c\u0441\u044f \u0433\u0435\u043d\u0435\u0440\u0430\u0442\u043e\u0440\u043e\u043c \u0438 \u0440\u0430\u0437\u043c\u0435\u0441\u0442\u0438\u043c \u0431\u0430\u043d\u0434\u043b \u0432 \u043f\u0440\u043e\u0441\u0442\u0440\u0430\u043d\u0441\u0442\u0432\u043e \u0438\u043c\u0451\u043d AppBundle (\u0435\u0441\u043b\u0438 \u0432\u044b \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u043b\u0438 \u043d\u043e\u0432\u044b\u0439 \u043f\u0440\u043e\u0435\u043a\u0442 Symfony2, \u0442\u043e \u0443 \u0432\u0430\u0441 \u0443\u0436\u0435 \u0434\u043e\u043b\u0436\u0435\u043d \u0431\u044b\u0442\u044c \u0431\u0430\u043d\u0434\u043b \u0441 \u0442\u0430\u043a\u0438\u043c \u043d\u0430\u0437\u0432\u0430\u043d\u0438\u0435\u043c). \u041f\u0435\u0440\u0435\u043d\u0435\u0441\u0451\u043c \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440 DefaultController \u0438\u0437 \u043d\u0430\u0448\u0435\u0433\u043e \u0431\u0430\u043d\u0434\u043b\u0430 (\u0432 \u043d\u0451\u043c \u0432\u043e\u043e\u0431\u0449\u0435 \u0431\u043e\u043b\u044c\u0448\u0435 \u043d\u0435 \u043d\u0443\u0436\u0435\u043d \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440) \u0432\u043e \u0432\u043d\u043e\u0432\u044c \u0441\u043e\u0437\u0434\u0430\u043d\u043d\u044b\u0439, \u043f\u0435\u0440\u0435\u043d\u0435\u0441\u0451\u043c \u0448\u0430\u0431\u043b\u043e\u043d\u044b (Resources\/views), \u0443\u0434\u0430\u043b\u0438\u043c \u043b\u0438\u0448\u043d\u044e\u044e \u0441\u0441\u044b\u043b\u043a\u0443 \u043d\u0430 \u0431\u0430\u043d\u0434\u043b \u0432 \u0444\u0430\u0439\u043b\u0435 app\/config\/routing.yml, \u0430 \u0442\u0430\u043a\u0436\u0435 \u043d\u0435 \u0437\u0430\u0431\u0443\u0434\u044c\u0442\u0435 \u0438\u0437\u043c\u0435\u043d\u0438\u0442\u044c \u043d\u043e\u0432\u044b\u0439 \u043a\u043b\u0430\u0441\u0441 \u0432 \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440\u0435 DefaultController (\u0432 \u043a\u043e\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u0438 use \u0438 \u0432 \u0432\u044b\u0437\u043e\u0432\u0435 \u043c\u0435\u0442\u043e\u0434\u0430 getRepository()). \u0421\u043e\u0437\u0434\u0430\u0434\u0438\u043c \u043d\u043e\u0432\u0443\u044e \u0441\u0443\u0449\u043d\u043e\u0441\u0442\u044c \u0434\u043b\u044f \u0441\u0442\u0440\u0430\u043d\u0438\u0446:  <\/p>\n<pre><code class=\"php\">&lt;?php namespace AppBundle\\Entity;  use Doctrine\\ORM\\Mapping as ORM; use Lexxpavlov\\PageBundle\\Entity\\Page as BasePage;  \/**  * @ORM\\Entity  *\/ class Page extends BasePage { } <\/code><\/pre>\n<p>  \u0422\u0430\u043a \u043a\u0430\u043a \u043d\u043e\u0432\u044b\u0439 \u043a\u043b\u0430\u0441\u0441 \u0438\u043c\u0435\u0435\u0442 \u0442\u043e \u0436\u0435 \u0438\u043c\u044f, \u0447\u0442\u043e \u0438 \u043f\u0440\u0435\u0434\u044b\u0434\u0443\u0449\u0438\u0439, \u0442\u043e \u043f\u0435\u0440\u0435\u0441\u043e\u0437\u0434\u0430\u0432\u0430\u0442\u044c \u0442\u0430\u0431\u043b\u0438\u0446\u0443 \u0432 \u0431\u0430\u0437\u0435 \u0434\u0430\u043d\u043d\u044b\u0445 \u043d\u0435 \u0442\u0440\u0435\u0431\u0443\u0435\u0442\u0441\u044f, \u0438 \u0432 \u044d\u0442\u043e\u0442 \u043c\u043e\u043c\u0435\u043d\u0442 \u0443\u0436\u0435 \u0441\u043e\u0437\u0434\u0430\u043d\u043d\u044b\u0435 \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u044b \u0434\u043e\u043b\u0436\u043d\u044b \u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c \u043a\u0430\u043a \u043f\u0440\u0435\u0436\u0434\u0435.<\/p>\n<p>  \u041d\u043e \u0443 \u043d\u0430\u0441 \u0431\u044b\u043b\u0430 \u0437\u0430\u0434\u0430\u0447\u0430 \u0440\u0430\u0441\u0448\u0438\u0440\u0438\u0442\u044c \u0441\u0443\u0449\u043d\u043e\u0441\u0442\u044c \u043d\u043e\u0432\u044b\u043c\u0438 \u043f\u043e\u043b\u044f\u043c\u0438 \u2014 \u043f\u043e\u043b\u044f\u043c\u0438 \u0434\u043b\u044f \u0445\u0440\u0430\u043d\u0435\u043d\u0438\u044f \u0430\u0432\u0442\u043e\u0440\u0430 \u0438 \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u0435\u0433\u043e \u0440\u0435\u0434\u0430\u043a\u0442\u043e\u0440\u0430. \u0414\u043b\u044f \u044d\u0442\u043e\u0433\u043e \u0445\u043e\u0440\u043e\u0448\u043e \u043f\u043e\u0434\u043e\u0439\u0434\u0451\u0442 \u043f\u043e\u0432\u0435\u0434\u0435\u043d\u0438\u0435 Blameable \u0438\u0437 \u0443\u0436\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c\u043e\u0433\u043e \u0431\u0430\u043d\u0434\u043b\u0430 StofDoctrineExtensionsBundle. \u0414\u043e\u0431\u0430\u0432\u0438\u043c \u0438\u0445 \u0432\u043e \u0432\u043d\u043e\u0432\u044c \u0441\u043e\u0437\u0434\u0430\u043d\u043d\u044b\u0439 \u043a\u043b\u0430\u0441\u0441:  <\/p>\n<div class=\"spoiler\"><b class=\"spoiler_title\">\u041e\u0431\u043d\u043e\u0432\u043b\u0451\u043d\u043d\u044b\u0439 \u043a\u043b\u0430\u0441\u0441 AppBundle\\Entity\\Page<\/b><\/p>\n<div class=\"spoiler_text\">\n<pre><code class=\"php\">&lt;?php namespace AppBundle\\Entity;  use Doctrine\\ORM\\Mapping as ORM; use Gedmo\\Mapping\\Annotation as Gedmo; use Lexxpavlov\\PageBundle\\Entity\\Page as BasePage;  use AppBundle\\Entity\\User;  \/**  * @ORM\\Entity  *\/ class Page extends BasePage {     \/**      * @var User      * @ORM\\ManyToOne(targetEntity=&quot;User&quot;)      * @Gedmo\\Blameable(on=&quot;create&quot;)      *\/     protected $createdBy;      \/**      * @var User      * @ORM\\ManyToOne(targetEntity=&quot;User&quot;)      * @Gedmo\\Blameable(on=&quot;update&quot;)      *\/     protected $updatedBy;          \/**      * Set user, that updated entity      * @param User $updatedBy      * @return Page      *\/     public function setUpdatedBy($updatedBy)     {         $this-&gt;updatedBy = $updatedBy;         return $this;     }      \/**      * Get user, that updated entity      * @return User       *\/     public function getUpdatedBy()     {         return $this-&gt;updatedBy;     }          \/**      * Set user, that created entity      * @param User $createdBy      * @return Page      *\/     public function setCreatedBy($createdBy)     {         $this-&gt;createdby = $createdBy;         return $this;     }      \/**      * Get user, that created entity      * @return User       *\/     public function getCreatedBy()     {         return $this-&gt;createdBy;     }     } <\/code><\/pre>\n<p>  <\/div>\n<\/div>\n<p>  \u0422\u0430\u043a\u0436\u0435 \u043d\u0430\u043c \u043f\u043e\u043d\u0430\u0434\u043e\u0431\u0438\u0442\u0441\u044f \u043d\u043e\u0432\u044b\u0439 \u043a\u043b\u0430\u0441\u0441 User \u2014 \u0434\u043b\u044f \u0445\u0440\u0430\u043d\u0435\u043d\u0438\u044f \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u0435\u0439. \u041b\u0443\u0447\u0448\u0435 \u0432\u0441\u0435\u0433\u043e \u0432\u0437\u044f\u0442\u044c \u0435\u0433\u043e \u0438\u0437 \u0431\u0430\u043d\u0434\u043b\u0430 <a href=\"https:\/\/github.com\/FriendsOfSymfony\/FOSUserBundle\">FOSUserBundle<\/a>. \u0423\u0441\u0442\u0430\u043d\u0430\u0432\u043b\u0438\u0432\u0430\u0435\u043c \u044d\u0442\u043e\u0442 \u0431\u0430\u043d\u0434\u043b \u0438 \u0440\u0430\u0441\u0448\u0438\u0440\u044f\u0435\u043c \u043f\u0440\u0435\u0434\u043b\u043e\u0436\u0435\u043d\u043d\u044b\u0439 \u0432 \u043d\u0451\u043c \u043a\u043b\u0430\u0441\u0441 \u0434\u043b\u044f \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u0435\u0439:  <\/p>\n<pre><code class=\"php\">&lt;?php namespace AppBundle\\Entity;  use FOS\\UserBundle\\Model\\User as BaseUser; use Doctrine\\ORM\\Mapping as ORM;  \/**  * @ORM\\Entity  * @ORM\\Table(name=&quot;users&quot;)  *\/ class User extends BaseUser {     \/**      * @ORM\\Id      * @ORM\\Column(type=&quot;integer&quot;)      * @ORM\\GeneratedValue(strategy=&quot;AUTO&quot;)      *\/     protected $id;      \/**      * Get id      * @return integer       *\/     public function getId()     {         return $this-&gt;id;     } } <\/code><\/pre>\n<p>  \u0422\u0435\u043f\u0435\u0440\u044c \u043d\u0443\u0436\u043d\u043e \u0432\u043a\u043b\u044e\u0447\u0438\u0442\u044c \u043f\u043e\u0432\u0435\u0434\u0435\u043d\u0438\u0435 Blameable \u0432 \u043a\u043e\u043d\u0444\u0438\u0433 StofDoctrineExtensionsBundle:  <\/p>\n<pre><code>stof_doctrine_extensions:     orm:         default:             sluggable: true             timestampable: true             blameable: true <\/code><\/pre>\n<p>  \u0438 \u043e\u0431\u043d\u043e\u0432\u0438\u0442\u044c \u0442\u0430\u0431\u043b\u0438\u0446\u044b \u0432 \u0431\u0430\u0437\u0435 \u0434\u0430\u043d\u043d\u044b\u0445 \u043a\u043e\u043d\u0441\u043e\u043b\u044c\u043d\u043e\u0439 \u043a\u043e\u043c\u0430\u043d\u0434\u043e\u0439 &#8216;app\/console doctrine:schema:update &#8212;force&#8217;.  <\/p>\n<div class=\"spoiler\"><b class=\"spoiler_title\">\u041d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0430 \u0431\u0430\u043d\u0434\u043b\u0430 FOSUserBundle<\/b><\/p>\n<div class=\"spoiler_text\">\u041f\u043e\u0441\u043b\u0435 \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0438 \u0431\u0430\u043d\u0434\u043b\u0430 FOSUserBundle \u0438 \u0435\u0433\u043e \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438 (\u0432 \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0438\u0438 \u0441 \u0435\u0433\u043e <a href=\"https:\/\/github.com\/FriendsOfSymfony\/FOSUserBundle\/blob\/master\/Resources\/doc\/index.md\">\u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0430\u0446\u0438\u0435\u0439<\/a>) \u043d\u0443\u0436\u043d\u043e \u0434\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u043d\u0430\u0448\u0438 \u0437\u0430\u0449\u0438\u0449\u0451\u043d\u043d\u044b\u0435 \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u044b \u0432 \u0444\u0430\u0439\u0440\u0432\u043e\u043b. \u0423 \u043d\u0430\u0441 \u043e\u0434\u043d\u0430 \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u0430, \u0434\u043e\u0441\u0442\u0443\u043f \u043a \u043a\u043e\u0442\u043e\u0440\u043e\u0439 \u0442\u0440\u0435\u0431\u0443\u0435\u0442\u0441\u044f \u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0438\u0442\u044c \u2014 \u044d\u0442\u043e \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u0430 \u0434\u043e\u0431\u0430\u0432\u043b\u0435\u043d\u0438\u044f \u043d\u043e\u0432\u043e\u0439 \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u044b \/page\/new. \u041d\u0443\u0436\u043d\u043e \u0434\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u0435\u0451 \u0432 \u0441\u043f\u0438\u0441\u043e\u043a access_control \u0432 \u0444\u0430\u0439\u043b\u0435 app\/config\/security.yml:  <\/p>\n<pre><code>security: # ...     access_control:         - { path: ^\/login$, role: IS_AUTHENTICATED_ANONYMOUSLY }         - { path: ^\/register, role: IS_AUTHENTICATED_ANONYMOUSLY }         - { path: ^\/resetting, role: IS_AUTHENTICATED_ANONYMOUSLY }         - { path: ^\/page\/new, role: ROLE_ADMIN } <\/code><\/pre>\n<p>  \u0422\u0435\u043f\u0435\u0440\u044c \u0442\u0440\u0435\u0431\u0443\u0435\u0442\u0441\u044f \u0434\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f \u0432 \u0431\u0430\u0437\u0443 \u0434\u0430\u043d\u043d\u044b\u0445. \u041f\u0440\u043e\u0449\u0435 \u0432\u0441\u0435\u0433\u043e \u044d\u0442\u043e \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u043a\u043e\u043d\u0441\u043e\u043b\u044c\u043d\u043e\u0439 \u043a\u043e\u043c\u0430\u043d\u0434\u043e\u0439 &#8216;app\/console fos:user:create&#8217;, \u0434\u043e\u0431\u0430\u0432\u043b\u0435\u043d\u0438\u0435\u043c \u0435\u043c\u0443 \u043f\u0440\u0430\u0432 \u0430\u0434\u043c\u0438\u043d\u0438\u0441\u0442\u0440\u0430\u0442\u043e\u0440\u0430 (ROLE_ADMIN) \u043a\u043e\u043c\u0430\u043d\u0434\u043e\u0439 &#8216;app\/console fos:user:promote&#8217;, \u0430 \u0437\u0430\u0442\u0435\u043c \u0430\u043a\u0442\u0438\u0432\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0435\u0433\u043e \u043a\u043e\u043c\u0430\u043d\u0434\u043e\u0439 &#8216;app\/console fos:user:activate&#8217;.  <\/div>\n<\/div>\n<h2>2.2. \u041d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0430 \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u0438 \u0431\u0430\u043d\u0434\u043b\u0430<\/h2>\n<p>  \u041f\u043e\u0441\u043b\u0435 \u0432\u043d\u0435\u0441\u0451\u043d\u043d\u044b\u0445 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u0439 \u0438 \u043f\u0435\u0440\u0435\u043d\u043e\u0441\u0435 \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u044f \u0441\u0443\u0449\u043d\u043e\u0441\u0442\u0438 \u0432 \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u044b\u0439 \u0431\u0430\u043d\u0434\u043b, \u043f\u0435\u0440\u0435\u0441\u0442\u0430\u043b \u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c \u043a\u043b\u0430\u0441\u0441 \u0434\u043b\u044f \u0421\u043e\u043d\u0430\u0442\u044b, \u0432\u0435\u0434\u044c \u0432 \u043a\u043e\u043d\u0444\u0438\u0433\u0435 \u0435\u0433\u043e \u0441\u0435\u0440\u0432\u0438\u0441\u0430 \u0431\u044b\u043b \u044f\u0432\u043d\u043e \u043f\u0440\u043e\u043f\u0438\u0441\u0430\u043d \u043a\u043b\u0430\u0441\u0441 Lexxpavlov\\PageBundle\\Entity\\Page. \u041d\u043e \u0442\u0435\u043f\u0435\u0440\u044c \u043d\u0435\u043b\u044c\u0437\u044f \u0442\u043e\u0447\u043d\u043e \u0441\u043a\u0430\u0437\u0430\u0442\u044c, \u0432 \u043a\u0430\u043a\u043e\u043c \u043c\u0435\u0441\u0442\u0435 \u0438 \u043f\u043e\u0434 \u043a\u0430\u043a\u0438\u043c \u043d\u0430\u0437\u0432\u0430\u043d\u0438\u0435\u043c \u0431\u0443\u0434\u0435\u0442 \u0441\u043e\u0437\u0434\u0430\u043d \u043a\u043b\u0430\u0441\u0441 \u0441\u0443\u0449\u043d\u043e\u0441\u0442\u0438. \u0414\u043b\u044f \u044d\u0442\u043e\u0433\u043e \u043b\u0443\u0447\u0448\u0435 \u0432\u0441\u0435\u0433\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043d\u044b\u0439 \u0441\u043f\u043e\u0441\u043e\u0431 \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u044f \u043d\u0430\u0441\u0442\u0440\u043e\u0435\u043a \u0432 \u0421\u0438\u043c\u0444\u043e\u043d\u0438\u0438 \u2014 \u043e\u043f\u0438\u0441\u0430\u043d\u0438\u0435 \u0441\u0435\u0440\u0432\u0438\u0441\u043e\u0432 \u0443\u043a\u0430\u0437\u0430\u0442\u044c \u0432 \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0430\u0445 \u0431\u0430\u043d\u0434\u043b\u0430, \u0430 \u0441\u0430\u043c\u0443 \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u044e, \u043e\u0442\u043d\u043e\u0441\u044f\u0449\u0443\u044e\u0441\u044f \u043a \u043a\u043e\u043d\u043a\u0440\u0435\u0442\u043d\u043e\u043c\u0443 \u043f\u0440\u043e\u0435\u043a\u0442\u0443, \u043f\u043e\u043c\u0435\u0441\u0442\u0438\u0442\u044c \u0432 app\/config\/config.yml.<\/p>\n<p>  \u041f\u0435\u0440\u0432\u044b\u043c \u0434\u0435\u043b\u043e\u043c \u0442\u0440\u0435\u0431\u0443\u0435\u0442\u0441\u044f \u0441\u043e\u0437\u0434\u0430\u0442\u044c \u043e\u043f\u0438\u0441\u0430\u043d\u0438\u0435 \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u0438 \u043d\u0430\u0448\u0435\u0433\u043e \u0431\u0430\u043d\u0434\u043b\u0430. \u0414\u043b\u044f \u044d\u0442\u043e\u0433\u043e \u0441\u043b\u0443\u0436\u0438\u0442 \u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043d\u044b\u0439 \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442 <a href=\"http:\/\/symfony.com\/doc\/current\/components\/config\/definition.html\">Config<\/a>. \u0412\u0441\u0451 \u043e\u043f\u0438\u0441\u0430\u043d\u0438\u0435 \u043a\u043e\u043d\u0444\u0438\u0433\u0430 \u0437\u0430\u043a\u043b\u044e\u0447\u0430\u0435\u0442\u0441\u044f \u0432 \u043f\u043e\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u043d\u043e\u043c \u0432\u044b\u0437\u043e\u0432\u0435 \u043f\u0440\u0435\u0434\u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0451\u043d\u043d\u044b\u0445 \u043c\u0435\u0442\u043e\u0434\u043e\u0432, \u043e\u043f\u0438\u0441\u044b\u0432\u0430\u044e\u0449\u0438\u0445 \u0434\u043e\u0441\u0442\u0443\u043f\u043d\u044b\u0435 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u044b \u043a\u043e\u043d\u0444\u0438\u0433\u0430. \u041f\u043e\u0432\u0442\u043e\u0440\u044f\u0442\u044c \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0430\u0446\u0438\u044e \u0437\u0434\u0435\u0441\u044c \u0431\u0443\u0434\u0435\u0442 \u0438\u0437\u043b\u0438\u0448\u043d\u0435, \u0442\u043e\u043b\u044c\u043a\u043e \u043f\u0440\u0438\u0432\u0435\u0434\u0443 \u0441\u0441\u044b\u043b\u043a\u0443 \u043d\u0430 \u0435\u0451 <a href=\"http:\/\/devacademy.ru\/posts\/opredelenie-i-proverka-parametrov-konfiguratsii-dlya-bandla-v-symfony-2\/\">\u043f\u0435\u0440\u0435\u0432\u043e\u0434 \u043d\u0430 \u0440\u0443\u0441\u0441\u043a\u0438\u0439<\/a>.   <\/p>\n<pre><code class=\"php\">&lt;?php namespace Lexxpavlov\\PageBundle\\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-&gt;root('lexxpavlov_page');          $rootNode             -&gt;children()                 -&gt;scalarNode('entity_class')                     -&gt;cannotBeEmpty()                 -&gt;end()             -&gt;end()         ;                  return $treeBuilder;     } } <\/code><\/pre>\n<p>  \u0422\u0435\u043f\u0435\u0440\u044c \u043d\u0443\u0436\u043d\u043e \u0434\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0443 \u0432 \u043a\u043e\u043d\u0444\u0438\u0433:  <\/p>\n<pre><code>lexxpavlov_page:     entity_class: AppBundle\\Entity\\Page <\/code><\/pre>\n<p>  \u0438 \u043d\u0430\u0441\u0442\u0440\u043e\u0438\u0442\u044c \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435 \u044d\u0442\u043e\u0433\u043e \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u0430 \u0432 \u0442\u0435\u0445 \u043c\u0435\u0441\u0442\u0430\u0445, \u0433\u0434\u0435 \u043e\u043d \u043d\u0443\u0436\u0435\u043d \u2014 \u0432 \u0441\u0435\u0440\u0432\u0438\u0441\u0435 \u0430\u0434\u043c\u0438\u043d\u043a\u0438 \u0441\u043e\u043d\u0430\u0442\u044b \u0438 \u0442\u0438\u043f\u0435 \u0444\u043e\u0440\u043c\u044b. \u0427\u0442\u043e\u0431\u044b \u043c\u043e\u0436\u043d\u043e \u0431\u044b\u043b\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u0438\u043c\u0435\u043d\u0438 \u043a\u043b\u0430\u0441\u0441\u0430, \u0442\u0440\u0435\u0431\u0443\u0435\u0442\u0441\u044f \u0441\u043e\u0445\u0440\u0430\u043d\u0438\u0442\u044c \u0435\u0433\u043e \u0432 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440 DI-\u043a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440\u0430, \u044d\u0442\u043e \u043d\u0443\u0436\u043d\u043e \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u0432 \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0442\u043e\u0440\u0435 DependencyInjection\/LexxpavlovPageExtension.php, \u0434\u043e\u0431\u0430\u0432\u0438\u0432 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0443\u044e \u0441\u0442\u0440\u043e\u0447\u043a\u0443 \u0432 \u043a\u043e\u043d\u0435\u0446 \u043c\u0435\u0442\u043e\u0434\u0430 load():  <\/p>\n<pre><code class=\"php\">$container-&gt;setParameter('lexxpavlov_page.entity_class', $config['entity_class']); <\/code><\/pre>\n<p>  \u0422\u0435\u043f\u0435\u0440\u044c \u0441\u043e\u0445\u0440\u0430\u043d\u0451\u043d\u043d\u044b\u0439 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440 \u043c\u043e\u0436\u043d\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0432 \u043e\u0431\u044a\u044f\u0432\u043b\u0435\u043d\u0438\u044f\u0445 \u0441\u0435\u0440\u0432\u0438\u0441\u043e\u0432. \u0421\u0435\u0440\u0432\u0438\u0441 \u0430\u0434\u043c\u0438\u043d\u043a\u0438 \u0442\u0440\u0435\u0431\u0443\u0435\u0442 \u0443\u043a\u0430\u0437\u0430\u0442\u044c \u0438\u043c\u044f \u043a\u043b\u0430\u0441\u0441\u0430 \u0432\u0442\u043e\u0440\u044b\u043c \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u043e\u043c \u043a\u043e\u043d\u0441\u0442\u0440\u0443\u043a\u0442\u043e\u0440\u0430:  <\/p>\n<pre><code>services:     sonata.admin.lexxpavlov_page:         class: Lexxpavlov\\PageBundle\\Admin\\Page         tags:             - { name: sonata.admin, manager_type: orm, group: &quot;Content&quot;, label: &quot;Pages&quot;, label_catalogue: &quot;messages&quot; }         arguments:             - ~             - %lexxpavlov_page.entity_class%             - ~         calls:             - [ setTranslationDomain, [messages]] <\/code><\/pre>\n<p>  \u0412 \u0441\u0435\u0440\u0432\u0438\u0441\u0435 \u0444\u043e\u0440\u043c\u044b \u043d\u0443\u0436\u043d\u043e \u043d\u0435 \u0442\u043e\u043b\u044c\u043a\u043e \u043f\u0435\u0440\u0435\u0434\u0430\u0442\u044c \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440, \u043d\u043e \u0438 \u0441\u043e\u0437\u0434\u0430\u0442\u044c \u043a\u043e\u043d\u0441\u0442\u0440\u0443\u043a\u0442\u043e\u0440 \u0432 \u043a\u043b\u0430\u0441\u0441\u0435 \u0444\u043e\u0440\u043c\u044b:  <\/p>\n<pre><code>services:     lexxpavlov_page.form.type.page:         class: Lexxpavlov\\PageBundle\\Form\\Type\\PageType         arguments: [ %lexxpavlov_page.entity_class% ]         tags:             - { name: form.type, alias: lexxpavlov_page } <\/code><\/pre>\n<p>  <\/p>\n<div class=\"spoiler\"><b class=\"spoiler_title\">\u0414\u043e\u0431\u0430\u0432\u043b\u0435\u043d\u0438\u0435 \u043a\u043e\u043d\u0441\u0442\u0440\u0443\u043a\u0442\u043e\u0440\u0430 \u0438 \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0430 \u043a\u0430\u0441\u0442\u043e\u043c\u043d\u044b\u0445 \u043e\u043f\u0446\u0438\u0439 \u0444\u043e\u0440\u043c\u044b<\/b><\/p>\n<div class=\"spoiler_text\">\n<pre><code class=\"php\">&lt;?php namespace Lexxpavlov\\PageBundle\\Form\\Type;  use Symfony\\Component\\Form\\AbstractType; use Symfony\\Component\\Form\\FormBuilderInterface; use Symfony\\Component\\OptionsResolver\\OptionsResolverInterface;  class PageType extends AbstractType {      private $dataClass;      public function __construct($dataClass)     {         $this-&gt;dataClass = $dataClass;     }      public function buildForm(FormBuilderInterface $builder, array $options)     {         $builder             -&gt;add('title', 'text')             -&gt;add('slug', 'text', array('required' =&gt; false))             -&gt;add('content', 'textarea')             -&gt;add('published', 'checkbox')             -&gt;add('keywords', 'text')             -&gt;add('description', 'text')             -&gt;add('save', 'submit')             ;     }      public function setDefaultOptions(OptionsResolverInterface $resolver)     {         $resolver-&gt;setDefaults(array(             'data_class' =&gt; $this-&gt;dataClass,         ));     }          public function getName()     {         return 'lexxpavlov_page';     } } <\/code><\/pre>\n<p>  <\/div>\n<\/div>\n<h2>2.3. \u0414\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u0435 \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438 \u0431\u0430\u043d\u0434\u043b\u0430<\/h2>\n<p>  \u0421\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u043c \u0448\u0430\u0433\u043e\u043c \u0431\u0443\u0434\u0435\u0442 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u044c \u043e\u0442\u043a\u043b\u044e\u0447\u0438\u0442\u044c \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0430\u0446\u0438\u044e \u0441\u0435\u0440\u0432\u0438\u0441\u0430 \u0434\u043b\u044f \u0441\u043e\u043d\u0430\u0442\u044b, \u0434\u043b\u044f \u0442\u0435\u0445, \u043a\u043e\u043c\u0443 \u044d\u0442\u043e\u0442 \u0441\u0435\u0440\u0432\u0438\u0441 \u043d\u0435 \u043d\u0443\u0436\u0435\u043d, \u0438\u043b\u0438 \u0434\u043b\u044f \u0442\u0435\u0445, \u043a\u0442\u043e \u0437\u0430\u0445\u043e\u0447\u0435\u0442 \u0438\u0437\u043c\u0435\u043d\u0438\u0442\u044c \u044d\u0442\u043e\u0442 \u0441\u0435\u0440\u0432\u0438\u0441 (\u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u0434\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u0432 \u0430\u0434\u043c\u0438\u043d\u043a\u0443 \u0441\u0432\u043e\u0438 \u043f\u043e\u043b\u044f \u0441\u0443\u0449\u043d\u043e\u0441\u0442\u0438). \u0414\u043b\u044f \u044d\u0442\u043e\u0433\u043e \u043d\u0443\u0436\u043d\u043e \u0434\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u043d\u043e\u0432\u044b\u0439 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440 \u0432 \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u044e \u0431\u0430\u043d\u0434\u043b\u0430. \u0417\u0430\u043e\u0434\u043d\u043e \u0434\u043e\u0431\u0430\u0432\u0438\u043c \u0435\u0449\u0451 \u043e\u0434\u043d\u0443 \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0443 \u2014 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435 \u0432 \u0444\u043e\u0440\u043c\u0430\u0445 \u0434\u043e\u0431\u0430\u0432\u043b\u0435\u043d\u0438\u044f \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u044b wysiwyg-\u0440\u0435\u0434\u0430\u043a\u0442\u043e\u0440\u0430 CKEditor \u0432\u043c\u0435\u0441\u0442\u043e \u043e\u0431\u044b\u0447\u043d\u043e\u0433\u043e \u043f\u043e\u043b\u044f textarea (\u0434\u043b\u044f \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u044f \u044d\u0442\u043e\u0433\u043e \u0442\u0438\u043f\u0430 \u043f\u043e\u043b\u044f \u0444\u043e\u0440\u043c\u044b \u043f\u043e\u0442\u0440\u0435\u0431\u0443\u0435\u0442\u0441\u044f \u0431\u0430\u043d\u0434\u043b IvoryCKEditorBundle, \u043f\u043e\u0437\u0436\u0435 \u043c\u044b \u043e\u0442\u043c\u0435\u0442\u0438\u043c \u0435\u0433\u043e \u0440\u0435\u043a\u043e\u043c\u0435\u043d\u0434\u0443\u0435\u043c\u044b\u043c \u0434\u043b\u044f \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0438). <\/p>\n<p>  \u0414\u043e\u0431\u0430\u0432\u0438\u043c \u0434\u0432\u0430 \u043d\u043e\u0432\u044b\u0445 \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u0430 \u0432 \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u044e \u0431\u0430\u043d\u0434\u043b\u0430 (DependencyInjection\/Configuration.php):  <\/p>\n<pre><code class=\"php\">$rootNode     -&gt;children()         -&gt;scalarNode('entity_class')             -&gt;cannotBeEmpty()         -&gt;end()         -&gt;scalarNode('admin_class')             -&gt;defaultValue('Lexxpavlov\\PageBundle\\Admin\\PageAdmin')         -&gt;end()         -&gt;scalarNode('content_type')             -&gt;defaultValue('ckeditor')         -&gt;end()     -&gt;end() ; <\/code><\/pre>\n<p>  \u042d\u0442\u0438 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u044b \u043e\u0442\u043c\u0435\u0447\u0435\u043d\u044b \u043d\u0435\u043e\u0431\u044f\u0437\u0430\u0442\u0435\u043b\u044c\u043d\u044b\u043c\u0438, \u0438 \u0435\u0441\u043b\u0438 \u043e\u043d\u0438 \u043d\u0435 \u0443\u043a\u0430\u0437\u0430\u043d\u044b \u0432 \u043a\u043e\u043d\u0444\u0438\u0433\u0435, \u0442\u043e \u043e\u043d\u0438 \u043f\u0440\u0438\u043c\u0443\u0442 \u0443\u043a\u0430\u0437\u0430\u043d\u043d\u044b\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f \u043f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e. \u0422\u0435\u043f\u0435\u0440\u044c \u0441\u043e\u0445\u0440\u0430\u043d\u0438\u043c \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f \u043d\u0430\u0441\u0442\u0440\u043e\u0435\u043a \u0432 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u044b \u043a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440\u0430 (\u0432 \u0444\u0430\u0439\u043b\u0435 DependencyInjection\/LexxpavlovPageExtension.php):  <\/p>\n<pre><code class=\"php\">public function load(array $configs, ContainerBuilder $container) {     $configuration = new Configuration();     $config = $this-&gt;processConfiguration($configuration, $configs);      $loader = new Loader\\YamlFileLoader($container, new FileLocator(__DIR__.'\/..\/Resources\/config'));     $loader-&gt;load('services.yml');              $container-&gt;setParameter('lexxpavlov_page.entity_class', $config['entity_class']);     $container-&gt;setParameter('lexxpavlov_page.content_type', $config['content_type']);              if ($config['admin_class'] && $config['admin_class'] != 'false') {         $loader-&gt;load('admin.yml');         $container-&gt;setParameter('lexxpavlov_page.admin_class', $config['admin_class']);     } } <\/code><\/pre>\n<p>  \u0422\u0443\u0442 \u0443\u043a\u0430\u0437\u0430\u043d\u043e \u0443\u0441\u043b\u043e\u0432\u043d\u043e\u0435 \u0434\u043e\u0431\u0430\u0432\u043b\u0435\u043d\u0438\u0435 \u0444\u0430\u0439\u043b\u0430 \u0441 \u043e\u0431\u044a\u044f\u0432\u043b\u0435\u043d\u0438\u0435\u043c \u0441\u0435\u0440\u0432\u0438\u0441\u0430 \u0434\u043b\u044f \u0430\u0434\u043c\u0438\u043d\u043a\u0438. \u0410 \u0435\u0441\u043b\u0438 \u043d\u0430\u043f\u0438\u0441\u0430\u043d \u0441\u0432\u043e\u0439 \u0440\u0430\u0441\u0448\u0438\u0440\u044f\u044e\u0449\u0438\u0439 \u043a\u043b\u0430\u0441\u0441 \u0434\u043b\u044f \u0430\u0434\u043c\u0438\u043d\u043a\u0438 (\u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0432\u043f\u043e\u043b\u043d\u0435 \u043c\u043e\u0436\u043d\u043e \u043d\u0430\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u044c \u043e\u0442 \u0443\u0436\u0435 \u0433\u043e\u0442\u043e\u0432\u043e\u0433\u043e \u043a\u043b\u0430\u0441\u0441\u0430), \u0442\u043e \u0432 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u0435 lexxpavlov_page.admin_class \u043c\u043e\u0436\u043d\u043e \u0443\u043a\u0430\u0437\u0430\u0442\u044c \u0435\u0433\u043e \u0438\u043c\u044f.<\/p>\n<p>  \u0422\u0435\u043f\u0435\u0440\u044c \u0434\u043e\u0431\u0430\u0432\u0438\u043c \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435 \u043d\u043e\u0432\u044b\u0445 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u043e\u0432 \u0432 \u043a\u043b\u0430\u0441\u0441 \u0430\u0434\u043c\u0438\u043d\u043a\u0438. \u0418\u0437\u043c\u0435\u043d\u0438\u043c \u043e\u0431\u044a\u044f\u0432\u043b\u0435\u043d\u0438\u0435 \u0441\u0435\u0440\u0432\u0438\u0441\u0430 \u0438 \u0440\u0430\u0441\u0448\u0438\u0440\u0438\u043c \u0441\u0430\u043c \u043a\u043b\u0430\u0441\u0441:  <\/p>\n<pre><code>services:     sonata.admin.lexxpavlov_page:         class: %lexxpavlov_page.admin_class%         tags:             - { name: sonata.admin, manager_type: orm, group: &quot;Content&quot;, label: &quot;Pages&quot;, label_catalogue: &quot;messages&quot; }         arguments:             - ~             - %lexxpavlov_page.entity_class%             - ~         calls:             - [ setTranslationDomain, [messages]]             - [ setContentType, [ %lexxpavlov_page.content_type% ] ] <\/code><\/pre>\n<p>  <\/p>\n<div class=\"spoiler\"><b class=\"spoiler_title\">\u0424\u0438\u043d\u0430\u043b\u044c\u043d\u0430\u044f \u0432\u0435\u0440\u0441\u0438\u044f \u043a\u043b\u0430\u0441\u0441\u0430 PageAdmin<\/b><\/p>\n<div class=\"spoiler_text\">\n<pre><code class=\"php\">&lt;?php namespace Lexxpavlov\\PageBundle\\Admin;  use Sonata\\AdminBundle\\Admin\\Admin; use Sonata\\AdminBundle\\Form\\FormMapper; use Sonata\\AdminBundle\\Datagrid\\DatagridMapper; use Sonata\\AdminBundle\\Datagrid\\ListMapper; use Sonata\\AdminBundle\\Show\\ShowMapper;  class PageAdmin extends Admin {     protected $contentType = 'ckeditor'; \/\/ or null for simple textarea field      public function setContentType($contentType)     {         $this-&gt;contentType = $contentType;     }          public function configureListFields(ListMapper $listMapper)     {         $listMapper             -&gt;addIdentifier('title')             -&gt;add('slug')             -&gt;add('published', null, array('editable' =&gt; true))             -&gt;add('createdAt', 'datetime')             -&gt;add('updatedAt', 'datetime')         ;     }      public function configureFormFields(FormMapper $formMapper)     {         $formMapper             -&gt;with('General')                 -&gt;add('slug', null, array('required' =&gt; false))                 -&gt;add('title')                 -&gt;add('content', $this-&gt;contentType)                 -&gt;add('published', null, array('required' =&gt; false))             -&gt;end()             -&gt;with('SEO')                 -&gt;add('keywords', null, array('required' =&gt; false))                 -&gt;add('description', null, array('required' =&gt; false))             -&gt;end()         ;         $formMapper-&gt;setHelps(array(             'slug' =&gt; 'Leave blank for automatic filling from title field',         ));     }      public function configureDatagridFilters(DatagridMapper $datagridMapper)     {         $datagridMapper             -&gt;add('slug')             -&gt;add('title')             -&gt;add('published')         ;     }      public function configureShowFields(ShowMapper $showMapper)     {         $showMapper             -&gt;add('slug')             -&gt;add('title')             -&gt;add('content')             -&gt;add('published')             -&gt;add('publishedAt', 'datetime')             -&gt;add('createdAt', 'datetime')             -&gt;add('updatedAt', 'datetime')             -&gt;add('keywords')             -&gt;add('description')         ;     } } <\/code><\/pre>\n<p>  <\/div>\n<\/div>\n<p>  \u0414\u043b\u044f \u0440\u0430\u0437\u043d\u043e\u043e\u0431\u0440\u0430\u0437\u0438\u044f \u044f \u043d\u0435 \u0441\u0442\u0430\u043b \u0434\u043e\u0431\u0430\u0432\u043b\u044f\u0442\u044c \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440 \u0442\u0438\u043f\u0430 \u043f\u043e\u043b\u044f \u0432 \u043a\u043b\u0430\u0441\u0441 \u0444\u043e\u0440\u043c\u044b, \u0432\u043a\u043b\u044e\u0447\u0438\u0432 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435 CKEditor-\u0430 \u043f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e \u0438 \u043f\u0440\u0435\u0434\u043e\u0441\u0442\u0430\u0432\u0438\u0432 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u044c \u0435\u0433\u043e \u043e\u0442\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u044f \u0447\u0435\u0440\u0435\u0437 \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438 \u0444\u043e\u0440\u043c\u044b \u043f\u0440\u0438 \u0435\u0451 \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u0438.  <\/p>\n<div class=\"spoiler\"><b class=\"spoiler_title\">\u0424\u0438\u043d\u0430\u043b\u044c\u043d\u0430\u044f \u0432\u0435\u0440\u0441\u0438\u044f \u043a\u043b\u0430\u0441\u0441\u0430 PageType<\/b><\/p>\n<div class=\"spoiler_text\">\n<pre><code class=\"php\">&lt;?php namespace Lexxpavlov\\PageBundle\\Form\\Type;  use Symfony\\Component\\Form\\AbstractType; use Symfony\\Component\\Form\\FormBuilderInterface; use Symfony\\Component\\OptionsResolver\\OptionsResolverInterface;  class PageType extends AbstractType {     private $dataClass;      public function __construct($dataClass)     {         $this-&gt;dataClass = $dataClass;     }      public function buildForm(FormBuilderInterface $builder, array $options)     {         $builder             -&gt;add('slug', 'text')             -&gt;add('title', 'text')             -&gt;add('content', $options['contentType'])             -&gt;add('published', 'checkbox')             -&gt;add('keywords', 'text')             -&gt;add('description', 'text')             -&gt;add('save', 'submit')             ;     }      public function setDefaultOptions(OptionsResolverInterface $resolver)     {         $resolver-&gt;setDefaults(array(             'data_class' =&gt; $this-&gt;dataClass,             'contentType' =&gt; 'ckeditor',         ));     }          public function getName()     {         return 'lexxpavlov_page';     } } <\/code><\/pre>\n<p>  <\/div>\n<\/div>\n<h2>2.4. \u0423\u0434\u0430\u043b\u0435\u043d\u0438\u0435 \u0438\u0437 \u0431\u0430\u043d\u0434\u043b\u0430 \u043b\u0438\u0448\u043d\u0438\u0445 \u0444\u0430\u0439\u043b\u043e\u0432<\/h2>\n<p>  \u0411\u0430\u043d\u0434\u043b \u043f\u043e\u0447\u0442\u0438 \u0437\u0430\u043a\u043e\u043d\u0447\u0435\u043d. \u041e\u0441\u0442\u0430\u043b\u043e\u0441\u044c \u0432\u044b\u043a\u0438\u043d\u0443\u0442\u044c \u043b\u0438\u0448\u043d\u0438\u0435 \u0444\u0430\u0439\u043b\u044b, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0431\u044b\u043b\u0438 \u0441\u043e\u0437\u0434\u0430\u043d\u044b \u0431\u0430\u043d\u0434\u043b\u043e\u0433\u0435\u043d\u0435\u0440\u0430\u0442\u043e\u0440\u043e\u043c \u0438 \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043d\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e\u0442\u0441\u044f. \u042d\u0442\u043e \u043f\u0430\u043f\u043a\u0430 Controller (\u0435\u0441\u043b\u0438 \u0432\u044b \u0440\u0430\u043d\u044c\u0448\u0435 \u043d\u0435 \u0443\u0434\u0430\u043b\u0438\u043b\u0438 \u0435\u0451), \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u043c\u043e\u0435 \u043f\u0430\u043f\u043a\u0438 Resources (\u043a\u0440\u043e\u043c\u0435 Resources\/config), \u0430 \u0442\u0430\u043a\u0436\u0435 \u043f\u0430\u043f\u043a\u0430 \u0442\u0435\u0441\u0442\u043e\u0432 (\u0442\u0435\u0441\u0442\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0432 \u0431\u0430\u043d\u0434\u043b\u0435 \u043d\u0435\u0447\u0435\u0433\u043e, \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440\u043e\u0432 \u043d\u0435\u0442, \u0430 \u0432\u0441\u0451 \u043e\u0441\u0442\u0430\u043b\u044c\u043d\u043e\u0435 \u0442\u0440\u0438\u0432\u0438\u0430\u043b\u044c\u043d\u043e).<\/p>\n<h1>3. \u041f\u043e\u0434\u0433\u043e\u0442\u043e\u0432\u043a\u0430 \u0431\u0430\u043d\u0434\u043b\u0430 \u043a \u043f\u0443\u0431\u043b\u0438\u043a\u0430\u0446\u0438\u0438<\/h1>\n<p>  <\/p>\n<h2>3.1. \u0421\u043e\u0437\u0434\u0430\u043d\u0438\u0435 \u0444\u0430\u0439\u043b\u0430 composer.json<\/h2>\n<p>  \u041a\u043e\u0433\u0434\u0430 \u0431\u0430\u043d\u0434\u043b \u0433\u043e\u0442\u043e\u0432 \u043a \u043f\u0443\u0431\u043b\u0438\u043a\u0430\u0446\u0438\u0438, \u043f\u0440\u0438\u0448\u043b\u043e \u0432\u0440\u0435\u043c\u044f \u0433\u043e\u0442\u043e\u0432\u0438\u0442\u044c \u0435\u0433\u043e \u043a \u043f\u0443\u0431\u043b\u0438\u043a\u0430\u0446\u0438\u0438. \u0411\u0430\u043d\u0434\u043b\u044b composer-\u0430 \u043d\u0430\u0445\u043e\u0434\u044f\u0442\u0441\u044f \u043d\u0430 \u0441\u0430\u0439\u0442\u0435 packagist.org, \u0430 \u0442\u0443\u0434\u0430 \u043e\u043d\u0438 \u043f\u043e\u043f\u0430\u0434\u0430\u044e\u0442 \u0438\u0437 \u043a\u0430\u043a\u043e\u0439-\u043b\u0438\u0431\u043e \u043f\u0443\u0431\u043b\u0438\u0447\u043d\u043e\u0439 \u0441\u0438\u0441\u0442\u0435\u043c\u044b \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u044f \u0432\u0435\u0440\u0441\u0438\u0439. \u041c\u044b \u0431\u0443\u0434\u0435\u043c \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c Github. \u041d\u043e \u043f\u0435\u0440\u0432\u044b\u043c \u0434\u0435\u043b\u043e\u043c \u043d\u0443\u0436\u043d\u043e \u0441\u043e\u0437\u0434\u0430\u0442\u044c \u0444\u0430\u0439\u043b composer.json \u2014 \u0444\u0430\u0439\u043b \u0432 \u0444\u043e\u0440\u043c\u0430\u0442\u0435 JSON, \u0441\u043e\u0434\u0435\u0440\u0436\u0430\u0449\u0438\u0439 \u043c\u0435\u0442\u0430\u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044e \u043e \u043f\u0430\u043a\u0435\u0442\u0435, \u043a\u043e\u0442\u043e\u0440\u0443\u044e \u0432 \u0431\u0443\u0434\u0443\u0449\u0435\u043c \u0431\u0443\u0434\u0435\u0442 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u043a\u0430\u043a \u0441\u0430\u043c composer, \u0442\u0430\u043a \u0438 packagist. \u0424\u0430\u0439\u043b composer.json \u0440\u0430\u0441\u043f\u043e\u043b\u0430\u0433\u0430\u0435\u0442\u0441\u044f \u0432 \u043a\u043e\u0440\u043d\u0435 \u0431\u0430\u043d\u0434\u043b\u0430 \u0438 \u0432\u044b\u0433\u043b\u044f\u0434\u0438\u0442 \u043f\u0440\u0438\u043c\u0435\u0440\u043d\u043e \u0442\u0430\u043a:  <\/p>\n<pre><code>{     &quot;name&quot; : &quot;lexxpavlov\/pagebundle&quot;,     &quot;description&quot; : &quot;Symfony2 Page bundle with meta data, predefined form type and Sonata Admin service&quot;,     &quot;version&quot; : &quot;1.0.0&quot;,     &quot;type&quot; : &quot;symfony-bundle&quot;,     &quot;homepage&quot;: &quot;https:\/\/github.com\/lexxpavlov\/PageBundle&quot;,     &quot;license&quot; : &quot;MIT&quot;,     &quot;keywords&quot; : [&quot;page&quot;, &quot;page bundle&quot;],     &quot;authors&quot; : [{         &quot;name&quot; : &quot;Alexey Pavlov&quot;,         &quot;email&quot; : &quot;lexx.pavlov@gmail.com&quot;     }],     &quot;require&quot; : {         &quot;php&quot;: &quot;&gt;=5.3.2&quot;,         &quot;symfony\/symfony&quot;: &quot;&gt;=2.1&quot;,         &quot;stof\/doctrine-extensions-bundle&quot;: &quot;&gt;=1.1&quot;     },     &quot;suggest&quot;: {         &quot;egeloen\/ckeditor-bundle&quot;: &quot;Allow use ckeditor field&quot;     },     &quot;autoload&quot; : {         &quot;psr-4&quot; : { &quot;Lexxpavlov\\\\PageBundle\\\\&quot; : &quot;&quot; }     },     &quot;extra&quot; : {         &quot;branch-alias&quot; : {             &quot;dev-master&quot; : &quot;1.0.x-dev&quot;         }     } } <\/code><\/pre>\n<p>  \u0420\u0430\u0441\u0441\u043c\u043e\u0442\u0440\u0438\u043c, \u043a\u0430\u043a\u0438\u0435 \u043f\u043e\u043b\u044f \u0444\u0430\u0439\u043b\u0430 \u0437\u0430 \u0447\u0442\u043e \u043e\u0442\u0432\u0435\u0447\u0430\u044e\u0442.<\/p>\n<p>  <b>name<\/b> \u2014 \u043d\u0430\u0437\u0432\u0430\u043d\u0438\u0435 \u0431\u0430\u043d\u0434\u043b\u0430. \u0424\u043e\u0440\u043c\u0438\u0440\u0443\u0435\u0442\u0441\u044f \u0438\u0437 \u043d\u0435\u0439\u043c\u0441\u043f\u0435\u0439\u0441\u0430 \u043f\u0440\u043e\u0435\u043a\u0442\u0430 \u043f\u0435\u0440\u0435\u0432\u043e\u0434\u043e\u043c \u0432 \u043d\u0438\u0436\u043d\u0438\u0439 \u0440\u0435\u0433\u0438\u0441\u0442\u0440. \u0418\u043c\u0435\u043d\u043d\u043e \u043f\u043e\u0434 \u0442\u0430\u043a\u0438\u043c \u0438\u043c\u0435\u043d\u0435\u043c \u0431\u0430\u043d\u0434\u043b \u0431\u0443\u0434\u0435\u0442 \u0440\u0430\u0437\u043c\u0435\u0449\u0451\u043d \u0432 \u043f\u0430\u043f\u043a\u0443 vendor.<br \/>  <b>description<\/b> \u2014 \u043e\u043f\u0438\u0441\u0430\u043d\u0438\u0435 \u0431\u0430\u043d\u0434\u043b\u0430. \u041a\u043e\u0440\u043e\u0442\u043a\u043e\u0435 \u043f\u0440\u0435\u0434\u043b\u043e\u0436\u0435\u043d\u0438\u0435, \u043a\u043e\u0442\u043e\u0440\u043e\u0435 \u0434\u0430\u0451\u0442 \u0438\u0441\u0447\u0435\u0440\u043f\u044b\u0432\u0430\u044e\u0449\u0435\u0435 \u043e\u043f\u0438\u0441\u0430\u043d\u0438\u0435 \u0431\u0430\u043d\u0434\u043b\u0430, \u0447\u0442\u043e\u0431\u044b \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u0438 Packagist-\u0430 \u043c\u043e\u0433\u043b\u0438 \u043f\u043e\u043d\u044f\u0442\u044c, \u0447\u0442\u043e \u043f\u0440\u0435\u0434\u043b\u0430\u0433\u0430\u0435\u0442 \u0434\u0430\u043d\u043d\u044b\u0439 \u0431\u0430\u043d\u0434\u043b.<br \/>  <b>version<\/b> \u2014 \u0442\u0435\u043a\u0443\u0449\u0430\u044f \u0432\u0435\u0440\u0441\u0438\u044f \u0431\u0430\u043d\u0434\u043b\u0430. \u0412 \u0434\u0430\u043b\u044c\u043d\u0435\u0439\u0448\u0435\u043c, \u043f\u0440\u0438 \u0440\u0430\u0437\u0432\u0438\u0442\u0438\u0438 \u0431\u0430\u043d\u0434\u043b\u0430, \u044d\u0442\u043e\u0442 \u043d\u043e\u043c\u0435\u0440 \u0431\u0443\u0434\u0435\u0442 \u0443\u0432\u0435\u043b\u0438\u0447\u0438\u0432\u0430\u0442\u044c\u0441\u044f.<br \/>  <b>type<\/b> \u2014 \u0442\u0438\u043f \u043f\u0430\u043a\u0435\u0442\u0430. \u0422\u0430\u043a \u043a\u0430\u043a \u0443 \u043d\u0430\u0441 \u043f\u0430\u043a\u0435\u0442 \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u0442 \u0431\u0430\u043d\u0434\u043b Symfony, \u0442\u043e \u043d\u0443\u0436\u043d\u043e \u0443\u043a\u0430\u0437\u0430\u0442\u044c \u00absymfony-bundle\u00bb.<br \/>  <b>homepage<\/b> \u2014 \u0430\u0434\u0440\u0435\u0441 \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u044b \u0441 \u043e\u043f\u0438\u0441\u0430\u043d\u0438\u0435\u043c \u0431\u0430\u043d\u0434\u043b\u0430. \u041c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c \u0441\u0441\u044b\u043b\u043a\u0430 \u043d\u0430 \u0432\u0430\u0448 \u0441\u0430\u0439\u0442, \u043d\u043e \u0432\u043f\u043e\u043b\u043d\u0435 \u0434\u043e\u043f\u0443\u0441\u043a\u0430\u0435\u0442\u0441\u044f \u0438 \u0441\u0441\u044b\u043b\u043a\u0430 \u043d\u0430 \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u0443 \u043f\u0440\u043e\u0435\u043a\u0442\u0430 \u043d\u0430 \u0433\u0438\u0442\u0445\u0430\u0431\u0435.<br \/>  <b>license<\/b> \u2014 \u043b\u0438\u0446\u0435\u043d\u0437\u0438\u044f, \u043f\u043e\u0434 \u043a\u043e\u0442\u043e\u0440\u043e\u0439 \u0434\u043e\u0441\u0442\u0443\u043f\u0435\u043d \u044d\u0442\u043e\u0442 \u043f\u0430\u043a\u0435\u0442. \u041f\u043e\u0447\u0442\u0438 \u0432\u0441\u0435\u0433\u0434\u0430 \u0443\u043a\u0430\u0437\u044b\u0432\u0430\u044e\u0442 \u043b\u0438\u0446\u0435\u043d\u0437\u0438\u044e MIT \u2014 \u044d\u0442\u043e \u043e\u0434\u043d\u0430 \u0438\u0437 \u0441\u0430\u043c\u044b\u0445 \u0441\u0432\u043e\u0431\u043e\u0434\u043d\u044b\u0445 \u043b\u0438\u0446\u0435\u043d\u0437\u0438\u0439. (<a href=\"http:\/\/choosealicense.com\/\">\u041f\u043e\u0434\u0440\u043e\u0431\u043d\u0435\u0435 \u043e \u0432\u044b\u0431\u043e\u0440\u0435 \u043b\u0438\u0446\u0435\u043d\u0437\u0438\u0438<\/a>)<br \/>  <b>keywords<\/b> \u2014 \u0441\u043f\u0438\u0441\u043e\u043a \u043a\u043b\u044e\u0447\u0435\u0432\u044b\u0445 \u0441\u043b\u043e\u0432, \u043e\u043f\u0438\u0441\u044b\u0432\u0430\u044e\u0449\u0438\u0445 \u043f\u0430\u043a\u0435\u0442, \u0440\u0430\u0437\u043c\u0435\u0449\u0451\u043d\u043d\u044b\u0439 \u0432 \u043c\u0430\u0441\u0441\u0438\u0432.<br \/>  <b>authors<\/b> \u2014 \u0441\u043f\u0438\u0441\u043e\u043a \u0430\u0432\u0442\u043e\u0440\u043e\u0432 \u043f\u0430\u043a\u0435\u0442\u0430.<br \/>  <b>require<\/b> \u2014 \u0441\u043f\u0438\u0441\u043e\u043a \u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0435\u043d\u0438\u0439, \u043f\u043e\u0434 \u043a\u043e\u0442\u043e\u0440\u044b\u043c\u0438 \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u043f\u0430\u043a\u0435\u0442. \u0421\u044e\u0434\u0430 \u0441\u043b\u0435\u0434\u0443\u0435\u0442 \u0443\u043a\u0430\u0437\u0430\u0442\u044c \u0432\u0435\u0440\u0441\u0438\u044e php, \u0432\u0435\u0440\u0441\u0438\u044e \u0441\u0438\u043c\u0444\u043e\u043d\u0438\u0438, \u0430 \u0442\u0430\u043a\u0436\u0435 \u0434\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u0442\u0435 \u0431\u0430\u043d\u0434\u043b\u044b, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0432\u044b \u0441\u0430\u043c\u0438 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0435 \u0432 \u0441\u0432\u043e\u0451\u043c \u043a\u043e\u0434\u0435. Composer \u0441\u0430\u043c \u043f\u0440\u043e\u0432\u0435\u0440\u0438\u0442 \u0432\u0435\u0440\u0441\u0438\u0438 \u0443\u043a\u0430\u0437\u0430\u043d\u043d\u044b\u0445 \u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0435\u043d\u0438\u0439, \u0430 \u0442\u0430\u043a\u0436\u0435 \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442 \u043f\u0430\u043a\u0435\u0442\u044b, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0442\u0440\u0435\u0431\u0443\u044e\u0442\u0441\u044f \u0434\u043b\u044f \u0440\u0430\u0431\u043e\u0442\u044b \u043f\u0430\u043a\u0435\u0442\u0430, \u043d\u043e \u043d\u0435 \u0431\u044b\u043b\u0438 \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043b\u0435\u043d\u044b \u0440\u0430\u043d\u0435\u0435.<br \/>  <b>suggest<\/b> \u2014 \u0441\u043f\u0438\u0441\u043e\u043a \u043f\u0440\u0435\u0434\u043b\u043e\u0436\u0435\u043d\u0438\u0439 \u043a \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0435 (\u043e\u043f\u0446\u0438\u043e\u043d\u0430\u043b\u044c\u043d\u043e). \u0421\u044e\u0434\u0430 \u043e\u0431\u044b\u0447\u043d\u043e \u0440\u0430\u0437\u043c\u0435\u0449\u0430\u044e\u0442 \u0431\u0430\u043d\u0434\u043b\u044b, \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435 \u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u0440\u0430\u0441\u0448\u0438\u0440\u0438\u0442 \u0440\u0430\u0431\u043e\u0442\u0443 \u0441 \u0432\u0430\u0448\u0438\u043c \u0431\u0430\u043d\u0434\u043b\u043e\u043c, \u043d\u043e \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043d\u0435 \u044f\u0432\u043b\u044f\u044e\u0442\u044f \u043e\u0431\u044f\u0437\u0430\u0442\u0435\u043b\u044c\u043d\u044b\u043c\u0438. \u0423 \u043d\u0430\u0441 \u0431\u0430\u043d\u0434\u043b \u0443\u043c\u0435\u0435\u0442 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0442\u0438\u043f \u0444\u043e\u0440\u043c\u044b &#8216;ckeditor&#8217;, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043f\u0440\u0435\u0434\u043e\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u0442 \u0431\u0430\u043d\u0434\u043b IvoryCKEditorBundle, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u0434\u043e\u0431\u0430\u0432\u0438\u043c \u0435\u0433\u043e \u0432 \u0441\u043f\u0438\u0441\u043e\u043a suggests, \u0443\u043a\u0430\u0437\u0430\u0432 \u043f\u043e\u044f\u0441\u043d\u044f\u044e\u0449\u0438\u0439 \u0442\u0435\u043a\u0441\u0442, \u043f\u043e\u043a\u0430\u0437\u044b\u0432\u0430\u044e\u0449\u0438\u0439, \u0434\u043b\u044f \u0447\u0435\u0433\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f \u044d\u0442\u043e\u0442 \u0431\u0430\u043d\u0434\u043b. \u0421\u043f\u0438\u0441\u043e\u043a \u043f\u0440\u0435\u0434\u043b\u043e\u0436\u0435\u043d\u0438\u0439 \u0431\u0443\u0434\u0435\u0442 \u0432\u044b\u0432\u0435\u0434\u0435\u043d \u043d\u0430 \u044d\u043a\u0440\u0430\u043d \u043f\u043e\u0441\u043b\u0435 \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0438 \u043f\u0430\u043a\u0435\u0442\u0430 composer-\u043e\u043c.<br \/>  <b>autoload<\/b> \u2014 \u0441\u043f\u043e\u0441\u043e\u0431 \u0430\u0432\u0442\u043e\u0437\u0430\u0433\u0440\u0443\u0437\u043a\u0438 \u043a\u043b\u0430\u0441\u0441\u043e\u0432 \u043f\u0430\u043a\u0435\u0442\u0430. \u041d\u0435 \u0432\u0438\u0436\u0443 \u0441\u043c\u044b\u0441\u043b\u0430 \u043d\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c PSR-4, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u0435\u0433\u043e \u0438 \u0443\u043a\u0430\u0436\u0435\u043c. \u041e\u0442\u043b\u0438\u0447\u0438\u0435 \u043e\u0442 PSR-0 \u0432 \u0442\u043e\u043c, \u0447\u0442\u043e \u043d\u0435 \u0431\u0443\u0434\u0443\u0442 \u0441\u043e\u0437\u0434\u0430\u0432\u0430\u0442\u044c\u0441\u044f \u043b\u0438\u0448\u043d\u0438\u0435 \u0443\u0440\u043e\u0432\u043d\u0438 \u0432\u043b\u043e\u0436\u0435\u043d\u043d\u043e\u0441\u0442\u0438 \u0432 \u043f\u0430\u043f\u043a\u0430\u0445, \u0432 \u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u0440\u0430\u0441\u043f\u043e\u043b\u043e\u0436\u0435\u043d\u044b \u0444\u0430\u0439\u043b\u044b \u043f\u0430\u043a\u0435\u0442\u0430 \u2014 \u0444\u0430\u0439\u043b\u044b \u0431\u0443\u0434\u0443\u0442 \u0440\u0430\u0441\u043f\u043e\u043b\u0430\u0433\u0430\u0442\u044c\u0441\u044f \u043f\u0440\u044f\u043c\u043e \u0432 \u043f\u0430\u043f\u043a\u0435 vendor\/lexxpavlov\/pagebundle.<br \/>  <b>extra<\/b> \u2014 \u0434\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u0435 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u044b \u043f\u0430\u043a\u0435\u0442\u0430. \u0412 \u0434\u0430\u043d\u043d\u043e\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440 branch-alias, \u0441\u043e\u0437\u0434\u0430\u044e\u0449\u0438\u0439 \u0432 Packagist \u043d\u043e\u0432\u0443\u044e \u0432\u0435\u0440\u0441\u0438\u044e \u043f\u0430\u043a\u0435\u0442\u0430 \u0441 \u0438\u043c\u0435\u043d\u0435\u043c dev-master, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u043e\u0431\u044b\u0447\u043d\u043e \u043f\u043e\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u0442 \u043d\u0430 master-\u0432\u0435\u0442\u043a\u0443 \u043a\u043e\u0434\u0430.<\/p>\n<p>  \u0422\u0430\u043a\u0436\u0435 \u0442\u0440\u0435\u0431\u0443\u0435\u0442\u0441\u044f \u0441\u043e\u0437\u0434\u0430\u0442\u044c \u0444\u0430\u0439\u043b readme.md \u0441 \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0430\u0446\u0438\u0435\u0439 \u0431\u0430\u043d\u0434\u043b\u0430. \u042d\u0442\u043e \u0442\u0435\u043a\u0441\u0442\u043e\u0432\u044b\u0439 \u0444\u0430\u0439\u043b \u0432 \u0444\u043e\u0440\u043c\u0430\u0442\u0435 Markdown \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u043b\u0435\u0433\u043a\u043e \u0438 \u0431\u044b\u0441\u0442\u0440\u043e \u043d\u0430\u043f\u0438\u0441\u0430\u0442\u044c \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0430\u0446\u0438\u044e \u0441 \u0440\u0430\u0437\u043c\u0435\u0442\u043a\u043e\u0439 \u0442\u0435\u043a\u0441\u0442\u0430 \u0438 \u0444\u0440\u0430\u0433\u043c\u0435\u043d\u0442\u0430\u043c\u0438 \u043a\u043e\u0434\u0430. \u041e\u043f\u0438\u0441\u0430\u043d\u0438\u0435 \u0444\u043e\u0440\u043c\u0430\u0442\u0430 Markdown \u043c\u043e\u0436\u043d\u043e \u043f\u043e\u0447\u0438\u0442\u0430\u0442\u044c <a href=\"https:\/\/guides.github.com\/features\/mastering-markdown\/\">\u0437\u0434\u0435\u0441\u044c<\/a>, \u0438\u043b\u0438 \u043f\u043e\u0441\u043c\u043e\u0442\u0440\u0435\u0442\u044c <a href=\"https:\/\/raw.githubusercontent.com\/lexxpavlov\/PageBundle\/master\/README.md\">\u0440\u0430\u0437\u043c\u0435\u0442\u043a\u0443 \u043e\u043f\u0438\u0441\u0430\u043d\u0438\u044f<\/a> \u043d\u0430\u0448\u0435\u0433\u043e \u0431\u0430\u043d\u0434\u043b\u0430.<\/p>\n<h2>3.2. \u0421\u043e\u0437\u0434\u0430\u043d\u0438\u0435 \u0440\u0435\u043f\u043e\u0437\u0438\u0442\u043e\u0440\u0438\u044f \u0441 \u043a\u043e\u0434\u043e\u043c \u0431\u0430\u043d\u0434\u043b\u0430<\/h2>\n<p>  \u0422\u0435\u043f\u0435\u0440\u044c \u043d\u0443\u0436\u043d\u043e \u0441\u043e\u0437\u0434\u0430\u0442\u044c \u0440\u0435\u043f\u043e\u0437\u0438\u0442\u043e\u0440\u0438\u0439 Git, \u0438 \u043f\u043e\u043c\u0435\u0441\u0442\u0438\u0442\u044c \u0432\u0441\u0435 \u0444\u0430\u0439\u043b\u044b \u0431\u0430\u043d\u0434\u043b\u0430 \u0432 \u044d\u0442\u043e\u0442 \u0440\u0435\u043f\u043e\u0437\u0438\u0442\u043e\u0440\u0438\u0439. \u0414\u043b\u044f \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u044f \u0440\u0435\u043f\u043e\u0437\u0438\u0442\u043e\u0440\u0438\u044f \u0434\u043b\u044f \u043f\u0440\u043e\u0435\u043a\u0442\u0430 \u043c\u043e\u0436\u043d\u043e \u0432\u043e\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c\u0441\u044f \u043a\u0430\u043a\u0438\u043c-\u043d\u0438\u0431\u0443\u0434\u044c \u0432\u0438\u0437\u0443\u0430\u043b\u044c\u043d\u044b\u043c \u043a\u043b\u0438\u0435\u043d\u0442\u043e\u043c, \u043d\u043e \u0437\u0434\u0435\u0441\u044c \u0431\u0443\u0434\u0435\u0442 \u043f\u0440\u0438\u0432\u0435\u0434\u0451\u043d \u043a\u043e\u043d\u0441\u043e\u043b\u044c\u043d\u044b\u0439 \u0432\u0430\u0440\u0438\u0430\u043d\u0442:  <\/p>\n<pre><code class=\"bash\">$ cd \/path\/to\/project\/src\/Lexxpavlov\/PageBundle $ git init $ git add . -A $ git commit -m &quot;Init commit&quot; <\/code><\/pre>\n<p>  \u041f\u043e \u0445\u043e\u0440\u043e\u0448\u0435\u043c\u0443, \u0441\u043b\u0435\u0434\u043e\u0432\u0430\u043b\u043e \u0431\u044b \u0441\u043a\u043e\u043f\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u043f\u0430\u043a\u0435\u0442 \u0438\u0437 \u043f\u0430\u043f\u043a\u0438 \u043f\u0440\u043e\u0435\u043a\u0442\u0430 \u0432 \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u0443\u044e \u043f\u0430\u043f\u043a\u0443, \u0438 \u0443\u0436\u0435 \u0442\u0430\u043c \u0441\u043e\u0437\u0434\u0430\u0432\u0430\u0442\u044c \u0440\u0435\u043f\u043e\u0437\u0438\u0442\u043e\u0440\u0438\u0439, \u0447\u0442\u043e\u0431\u044b \u044d\u0442\u043e\u0442 \u0440\u0435\u043f\u043e\u0437\u0438\u0442\u043e\u0440\u0438\u0439 \u043d\u0435 \u043a\u043e\u043d\u0444\u043b\u0438\u043a\u0442\u043e\u0432\u0430\u043b \u0441 \u0440\u0435\u043f\u043e\u0437\u0438\u0442\u043e\u0440\u0438\u0435\u043c \u0441\u0430\u043c\u043e\u0433\u043e \u043f\u0440\u043e\u0435\u043a\u0442\u0430 \u0441\u0430\u0439\u0442\u0430, \u0438 \u0447\u0442\u043e\u0431\u044b \u043f\u043e\u0442\u043e\u043c \u043c\u043e\u0436\u043d\u043e \u0431\u044b\u043b\u043e \u043b\u0435\u0433\u0447\u0435 \u0432\u043d\u043e\u0441\u0438\u0442\u044c \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u044f \u0432 \u043a\u043e\u0434. \u0425\u043e\u0440\u043e\u0448\u0438\u043c \u0432\u044b\u0431\u043e\u0440\u043e\u043c \u0431\u0443\u0434\u0435\u0442 \u0432\u044b\u043d\u0435\u0441\u0435\u043d\u0438\u0435 \u043f\u0430\u043f\u043a\u0438 \u0441 \u0440\u0435\u043f\u043e\u0437\u0438\u0442\u043e\u0440\u0438\u0435\u043c \u0432 \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u0443\u044e \u043f\u0430\u043f\u043a\u0443, \u0438 \u0434\u0430\u043b\u044c\u043d\u0435\u0439\u0448\u0435\u0435 \u0434\u043e\u0431\u0430\u0432\u043b\u0435\u043d\u0438\u0435 \u0435\u0433\u043e \u043e\u0431\u0440\u0430\u0442\u043d\u043e \u0432 \u043f\u0440\u043e\u0435\u043a\u0442 \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e symlink.<\/p>\n<h2>3.3. \u0420\u0430\u0437\u043c\u0435\u0449\u0435\u043d\u0438\u0435 \u043a\u043e\u0434\u0430 \u043d\u0430 Github<\/h2>\n<p>  \u0418\u0434\u0451\u043c \u043d\u0430 Github \u043d\u0430 \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u0443 <a href=\"https:\/\/github.com\/new\">\u0441\u043e\u0437\u0434\u0430\u043d\u0438\u044f \u043d\u043e\u0432\u043e\u0433\u043e \u0440\u0435\u043f\u043e\u0437\u0438\u0442\u043e\u0440\u0438\u044f<\/a> \u0438 \u0434\u0430\u0451\u043c \u0438\u043c\u044f \u043d\u043e\u0432\u043e\u043c\u0443 \u0440\u0435\u043f\u043e\u0437\u0438\u0442\u043e\u0440\u0438\u044e (PageBundle). \u041c\u043e\u0436\u043d\u043e \u0437\u0430\u0434\u0430\u0442\u044c \u043a\u0440\u0430\u0442\u043a\u043e\u0435 \u043e\u043f\u0438\u0441\u0430\u043d\u0438\u0435 \u043f\u0430\u043a\u0435\u0442\u0430, \u043a\u043e\u0442\u043e\u0440\u043e\u0435 \u0431\u0443\u0434\u0435\u0442 \u0432\u044b\u0432\u043e\u0434\u0438\u0442\u044c\u0441\u044f \u043d\u0430\u0432\u0435\u0440\u0445\u0443 \u0433\u043b\u0430\u0432\u043d\u043e\u0439 \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u044b \u0440\u0435\u043f\u043e\u0437\u0438\u0442\u043e\u0440\u0438\u044f \u0441\u0440\u0430\u0437\u0443 \u043f\u043e\u0434 \u043d\u0430\u0437\u0432\u0430\u043d\u0438\u0435\u043c. \u0412\u0430\u0436\u043d\u043e! \u0423\u0431\u0435\u0434\u0438\u0442\u0435\u0441\u044c, \u0447\u0442\u043e <strong>\u043d\u0435<\/strong> \u0441\u0442\u043e\u0438\u0442 \u0433\u0430\u043b\u043e\u0447\u043a\u0430 \u00abInitialize this repository with a README\u00bb, \u0430 \u0442\u0430\u043a\u0436\u0435 \u043e\u0442\u043a\u043b\u044e\u0447\u0435\u043d\u043e \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u0435 .gitignore \u0438 \u0444\u0430\u0439\u043b\u0430 \u043b\u0438\u0446\u0435\u043d\u0437\u0438\u0438 (\u0441\u0442\u043e\u0438\u0442 \u0441\u043b\u043e\u0432\u043e NONE \u0432 \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u044e\u0449\u0438\u0445 \u0432\u044b\u043f\u0430\u0434\u0430\u044e\u0449\u0438\u0445 \u0441\u043f\u0438\u0441\u043a\u0430\u0445). \u0414\u0430\u043b\u0435\u0435 \u0437\u0430\u0445\u043e\u0434\u0438\u043c \u0432\u043e \u0432\u043d\u043e\u0432\u044c \u0441\u043e\u0437\u0434\u0430\u043d\u043d\u044b\u0439 (\u043f\u043e\u043a\u0430 \u043f\u0443\u0441\u0442\u043e\u0439) \u0440\u0435\u043f\u043e\u0437\u0438\u0442\u043e\u0440\u0438\u0439 \u0438 \u043a\u043e\u043f\u0438\u0440\u0443\u0435\u043c \u043f\u0443\u0442\u044c \u043a \u043d\u0435\u043c\u0443 \u0432 \u0431\u0443\u0444\u0435\u0440 (\u043a\u043d\u043e\u043f\u043a\u0430 Copy to clipboard \u0432 \u0440\u0430\u0437\u0434\u0435\u043b\u0435 HTTPS clone URL \u0432\u043d\u0438\u0437\u0443 \u043f\u0440\u0430\u0432\u043e\u0433\u043e \u043c\u0435\u043d\u044e). \u0412\u044b\u043f\u043e\u043b\u043d\u044f\u0435\u043c \u0441\u0442\u0440\u043e\u0447\u043a\u0438 \u0432 \u043a\u043e\u043d\u0441\u043e\u043b\u0438:  <\/p>\n<pre><code class=\"bash\">$ git remote add origin remote https:\/\/github.com\/yourusername\/YourBundle.git $ git push origin master <\/code><\/pre>\n<p>  \u0413\u043e\u0442\u043e\u0432\u043e! \u0417\u0430\u0439\u0434\u0438\u0442\u0435 \u043d\u0430 \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u0443 \u043f\u0430\u043a\u0435\u0442\u0430 \u0438 \u043f\u043e\u043b\u044e\u0431\u0443\u0439\u0442\u0435\u0441\u044c \u043d\u0430 \u0432\u0430\u0448\u0438 \u0444\u0430\u0439\u043b\u044b!<\/p>\n<h1>4. \u041f\u0443\u0431\u043b\u0438\u043a\u0430\u0446\u0438\u044f \u0431\u0430\u043d\u0434\u043b\u0430<\/h1>\n<p>  <\/p>\n<h2>4.1. \u0418\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435 \u0431\u0430\u043d\u0434\u043b\u0430 \u0431\u0435\u0437 \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0430\u0446\u0438\u0438 \u043d\u0430 Packagist<\/h2>\n<p>  \u0423\u0436\u0435 \u0441\u0435\u0439\u0447\u0430\u0441 \u043c\u043e\u0436\u043d\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u043f\u0430\u043a\u0435\u0442 \u0447\u0435\u0440\u0435\u0437 composer, \u0442\u043e\u043b\u044c\u043a\u043e \u043d\u0443\u0436\u043d\u043e \u043f\u043e\u0434\u0441\u043a\u0430\u0437\u0430\u0442\u044c \u0435\u043c\u0443, \u0433\u0434\u0435 \u0438\u0441\u043a\u0430\u0442\u044c \u0444\u0430\u0439\u043b\u044b \u043f\u0430\u043a\u0435\u0442\u0430. \u0414\u043b\u044f \u044d\u0442\u043e\u0433\u043e \u043d\u0443\u0436\u043d\u043e \u0434\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u0432 composer.json \u043f\u0440\u043e\u0435\u043a\u0442\u0430, \u0432 \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0442\u0440\u0435\u0431\u0443\u0435\u0442\u0441\u044f \u0434\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u044d\u0442\u043e\u0442 \u043f\u0430\u043a\u0435\u0442, \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0435 \u0441\u0442\u0440\u043e\u0447\u043a\u0438:  <\/p>\n<pre><code>[...] &quot;require&quot; : {     [...]     &quot;lexxpavlov\/pagebundle&quot; : &quot;dev-master&quot; }, &quot;repositories&quot; : [{     &quot;type&quot; : &quot;vcs&quot;,     &quot;url&quot; : &quot;https:\/\/github.com\/lexxpavlov\/PageBundle.git&quot; }], [...] <\/code><\/pre>\n<p>  \u0422\u0430\u043a\u0438\u043c \u0441\u043f\u043e\u0441\u043e\u0431\u043e\u043c \u043c\u043e\u0436\u043d\u043e \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0430\u0442\u044c \u043a \u043f\u0440\u043e\u0435\u043a\u0442\u0443 \u0441\u0432\u043e\u0438 \u043f\u0430\u043a\u0435\u0442\u044b, \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u0441\u0432\u043e\u0439 \u0444\u043e\u0440\u043a \u0434\u0440\u0443\u0433\u043e\u0433\u043e \u043f\u0440\u043e\u0435\u043a\u0442\u0430, \u0431\u0435\u0437 \u0435\u0433\u043e \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0430\u0446\u0438\u0438 \u043d\u0430 Packagist. \u041d\u043e \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u0438\u0435 \u043f\u0430\u043a\u0435\u0442\u0430 \u0438\u0437 \u0435\u0433\u043e \u0440\u0435\u043f\u043e\u0437\u0438\u0442\u043e\u0440\u0438\u044f \u0438\u043c\u0435\u0435\u0442 \u043e\u0434\u043d\u043e \u043d\u0435\u0443\u0434\u043e\u0431\u0441\u0442\u0432\u043e \u2014 \u0432\u0441\u0435\u0433\u0434\u0430 \u0431\u0443\u0434\u0435\u0442 \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u0430 master-\u0432\u0435\u0440\u0441\u0438\u044f \u043a\u043e\u0434\u0430. \u0414\u043b\u044f \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u043a\u0438 \u0440\u0430\u0437\u043d\u044b\u0445 \u0432\u0435\u0440\u0441\u0438\u0439 \u043f\u0430\u043a\u0435\u0442\u0430 \u0442\u0440\u0435\u0431\u0443\u0435\u0442\u0441\u044f \u0434\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u0435\u0433\u043e \u043d\u0430 Packagist.<\/p>\n<h2>4.2. \u0420\u0435\u0433\u0438\u0441\u0442\u0440\u0430\u0446\u0438\u044f \u0431\u0430\u043d\u0434\u043b\u0430 \u043d\u0430 Packagist<\/h2>\n<p>  \u0410\u0440\u0445\u0438\u0432 \u043f\u0430\u043a\u0435\u0442\u043e\u0432 Packagist \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u0435\u0442 \u043c\u043d\u043e\u0436\u0435\u0441\u0442\u0432\u043e \u0432\u0435\u0440\u0441\u0438\u0439 \u043f\u0430\u043a\u0435\u0442\u0430, \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u044f\u044f \u0432\u0435\u0440\u0441\u0438\u0438 \u043f\u043e \u0442\u0435\u0433\u0430\u043c \u043a\u043e\u043c\u043c\u0438\u0442\u043e\u0432 \u0438 \u043d\u0430\u0437\u0432\u0430\u043d\u0438\u044f\u043c \u0432\u0435\u0442\u043e\u043a \u043a\u043e\u0434\u0430. \u041e\u043d \u043f\u0440\u043e\u0441\u043c\u0430\u0442\u0440\u0438\u0432\u0430\u0435\u0442 \u0432\u0441\u0435 \u0442\u0435\u0433\u0438 \u0438 \u0432\u0435\u0442\u043a\u0438 \u0440\u0435\u043f\u043e\u0437\u0438\u0442\u043e\u0440\u0438\u044f, \u0438 \u0435\u0441\u043b\u0438 \u043d\u0430\u0445\u043e\u0434\u0438\u0442 \u043d\u0430\u0437\u0432\u0430\u043d\u0438\u044f, \u043f\u043e\u0445\u043e\u0436\u0438\u0435 \u043d\u0430 \u043d\u0430\u0437\u0432\u0430\u043d\u0438\u0435 \u0432\u0435\u0440\u0441\u0438\u0438, \u0442\u043e \u043f\u0440\u0438\u043c\u0435\u043d\u044f\u0435\u0442 \u0438\u0445 \u043a\u0430\u043a \u0432\u0435\u0440\u0441\u0438\u0438 \u043a\u043e\u0434\u0430. \u041f\u043e\u044d\u0442\u043e\u043c\u0443 \u043d\u0443\u0436\u043d\u043e \u0434\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u0445\u043e\u0442\u044f \u0431\u044b \u043e\u0434\u0438\u043d \u0442\u0435\u0433 \u0432\u0435\u0440\u0441\u0438\u0438 \u0432 \u0440\u0435\u043f\u043e\u0437\u0438\u0442\u043e\u0440\u0438\u0439 \u043f\u0440\u043e\u0435\u043a\u0442\u0430. \u0412\u0435\u0440\u0441\u0438\u0438 \u0437\u0430\u0434\u0430\u044e\u0442\u0441\u044f \u043d\u0430\u0437\u0432\u0430\u043d\u0438\u044f\u043c\u0438, \u043f\u043e\u0434\u0445\u043e\u0434\u044f\u0449\u0438\u043c\u0438 \u043f\u043e\u0434 \u0448\u0430\u0431\u043b\u043e\u043d 1.0.0 \u0438\u043b\u0438 v1.0.0. (\u041f\u043e\u0434\u0440\u043e\u0431\u043d\u0435\u0435 \u043f\u0440\u043e \u0438\u043c\u0435\u043d\u043e\u0432\u0430\u043d\u0438\u0435 \u0432\u0435\u0440\u0441\u0438\u0439 \u043c\u043e\u0436\u043d\u043e \u043f\u043e\u0447\u0438\u0442\u0430\u0442\u044c <a href=\"https:\/\/packagist.org\/about\">\u0442\u0443\u0442<\/a>.) \u0415\u0441\u043b\u0438 \u0432\u0430\u0448 \u0431\u0430\u043d\u0434\u043b \u0433\u043e\u0442\u043e\u0432 \u043a \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u044e \u0438 \u0432\u044b \u043d\u0435 \u0441\u043e\u0431\u0438\u0440\u0430\u0435\u0442\u0435\u0441\u044c \u0435\u0433\u043e \u0432 \u0431\u043b\u0438\u0436\u0430\u0439\u0448\u0435\u0435 \u0432\u0440\u0435\u043c\u044f \u0438\u0437\u043c\u0435\u043d\u044f\u0442\u044c, \u0442\u043e \u043c\u043e\u0436\u043d\u043e \u0432\u044b\u0431\u0440\u0430\u0442\u044c \u0432\u0435\u0440\u0441\u0438\u044e 1.0.0. \u0415\u0441\u043b\u0438 \u0432\u044b \u0432\u044b\u043a\u043b\u0430\u0434\u044b\u0432\u0430\u0435\u0442\u0435 \u0432\u0435\u0440\u0441\u0438\u044e \u0431\u0430\u043d\u0434\u043b\u0430, \u043d\u043e \u0441\u043e\u0431\u0438\u0440\u0430\u0435\u0442\u0435\u0441\u044c \u0435\u0433\u043e \u0434\u043e\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u0442\u044c, \u0442\u043e \u043b\u0443\u0447\u0448\u0435 \u0434\u0430\u0442\u044c \u0432\u0435\u0440\u0441\u0438\u044e \u043c\u0435\u043d\u044c\u0448\u0435 \u0435\u0434\u0438\u043d\u0438\u0446\u044b. <br \/>  \u0421\u043e\u0437\u0434\u0430\u0434\u0438\u043c \u0442\u0435\u0433, \u043d\u0430\u0437\u0432\u0430\u043d\u0438\u0435 \u043a\u043e\u0442\u043e\u0440\u043e\u0433\u043e \u0441\u043e\u0432\u043f\u0430\u0434\u0430\u0435\u0442 \u0441 \u0432\u0435\u0440\u0441\u0438\u0435\u0439, \u0443\u043a\u0430\u0437\u0430\u043d\u043d\u043e\u0439 \u0432 composer.json:  <\/p>\n<pre><code class=\"bash\">$ git tag 1.0.0 $ git push origin --tags <\/code><\/pre>\n<p>  \u041f\u043e\u0440\u0430 \u0432\u044b\u043a\u043b\u0430\u0434\u044b\u0432\u0430\u0442\u044c \u043d\u0430\u0448 \u0431\u0430\u043d\u0434\u043b \u0438 \u0437\u0430\u043a\u0430\u043d\u0447\u0438\u0432\u0430\u0442\u044c \u044d\u0442\u043e\u0442 \u0437\u0430\u0442\u044f\u043d\u0443\u0432\u0448\u0438\u0439\u0441\u044f \u0442\u0443\u0442\u043e\u0440\u0438\u0430\u043b. <a href=\"https:\/\/packagist.org\/register\/\">\u0420\u0435\u0433\u0438\u0441\u0442\u0440\u0438\u0440\u0443\u0435\u043c\u0441\u044f<\/a> \u043d\u0430 Packagist.org (\u0438\u043b\u0438 \u043f\u0440\u043e\u0449\u0435 \u0432\u043e\u0439\u0442\u0438 \u0447\u0435\u0440\u0435\u0437 \u0430\u043a\u043a\u0430\u0443\u043d\u0442 Github) \u0438 \u043d\u0430\u0436\u0438\u043c\u0430\u0435\u043c \u043d\u0430 \u0437\u0435\u043b\u0451\u043d\u0443\u044e \u043a\u043d\u043e\u043f\u043a\u0443 Submit package. \u0412 \u043f\u043e\u044f\u0432\u0438\u0432\u0448\u0435\u0435\u0441\u044f \u043f\u043e\u043b\u0435 \u0432\u0432\u043e\u0434\u0438\u043c \u0430\u0434\u0440\u0435\u0441 \u0440\u0435\u043f\u043e\u0437\u0438\u0442\u043e\u0440\u0438\u044f \u0438 \u043d\u0430\u0436\u0438\u043c\u0430\u0435\u043c \u043a\u043d\u043e\u043f\u043a\u0443 Check. \u0415\u0441\u043b\u0438 \u0432\u0441\u0451 \u0432 \u043f\u043e\u0440\u044f\u0434\u043a\u0435, \u0442\u043e \u043f\u043e\u044f\u0432\u0438\u0442\u0441\u044f \u043a\u043d\u043e\u043f\u043a\u0430 Submit. \u0421\u043c\u0435\u043b\u043e \u043d\u0430\u0436\u0438\u043c\u0430\u0439\u0442\u0435 \u0435\u0451!<\/p>\n<p>  \u041f\u0430\u043a\u0435\u0442 \u0431\u0443\u0434\u0435\u0442 \u0440\u0430\u0437\u043c\u0435\u0449\u0451\u043d \u0432 \u0430\u0440\u0445\u0438\u0432\u0435 \u043f\u0430\u043a\u0435\u0442\u043e\u0432 Packagist.org. \u0412\u044b \u0441\u043c\u043e\u0436\u0435\u0442\u0435 \u0443\u0432\u0438\u0434\u0435\u0442\u044c \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u0443 \u043f\u0430\u043a\u0435\u0442\u0430 \u0441 \u043f\u043e\u043b\u044f\u043c\u0438, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0431\u044b\u043b\u0438 \u0438\u0437\u0432\u043b\u0435\u0447\u0435\u043d\u044b \u0438\u0437 \u0444\u0430\u0439\u043b\u0430 composer.json, \u0438 \u043a\u043d\u043e\u043f\u043a\u0430\u043c\u0438 \u0443\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u044f \u043f\u0430\u043a\u0435\u0442\u043e\u043c. \u0422\u0430\u043a\u0436\u0435 \u0432\u044b \u0443\u0432\u0438\u0434\u0438\u0442\u0435 \u043f\u0440\u0435\u0434\u0443\u043f\u0440\u0435\u0436\u0434\u0435\u043d\u0438\u0435, \u0447\u0442\u043e \u043f\u0430\u043a\u0435\u0442 \u043d\u0435 \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0430\u0432\u0442\u043e\u043e\u0431\u043d\u043e\u0432\u043b\u044f\u0435\u043c\u044b\u043c. \u0410\u0432\u0442\u043e\u043e\u0431\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u0435 \u043f\u0430\u043a\u0435\u0442\u0430 \u2014 \u044d\u0442\u043e \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0430 \u0433\u0438\u0442\u0445\u0430\u0431\u0430, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438 \u0441\u043e\u043e\u0431\u0449\u0430\u0435\u0442 Packagist-\u0443 \u043e\u0431 \u043e\u0431\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u0438 \u0440\u0435\u043f\u043e\u0437\u0438\u0442\u043e\u0440\u0438\u044f, \u0438 \u0442\u043e\u0442 \u0437\u0430\u043d\u043e\u0432\u043e \u043f\u0440\u043e\u0441\u043c\u043e\u0442\u0440\u0438\u0442 \u0440\u0435\u043f\u043e\u0437\u0438\u0442\u043e\u0440\u0438\u0439 \u0432 \u043f\u043e\u0438\u0441\u043a\u0430\u0445 \u043d\u043e\u0432\u044b\u0445 \u0432\u0435\u0440\u0441\u0438\u0439 \u043a\u043e\u0434\u0430 \u0438\u043b\u0438 \u043e\u0431\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u044f \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u0438 \u0432 \u0444\u0430\u0439\u043b\u0435 composer.json. \u0414\u043b\u044f \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0438 \u0430\u0432\u0442\u043e\u043e\u0431\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u044f \u043d\u0443\u0436\u043d\u043e \u043f\u0440\u043e\u0439\u0442\u0438 \u043d\u0430 \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u0443 <a href=\"https:\/\/packagist.org\/profile\/\">\u043f\u0440\u043e\u0444\u0438\u043b\u044f \u043d\u0430 Packagist<\/a> \u0438 \u0432\u044b\u043f\u043e\u043b\u043d\u0438\u0442\u044c \u0438\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u0438, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0442\u0430\u043c \u043f\u0440\u0438\u0432\u0435\u0434\u0435\u043d\u044b.<\/p>\n<p>  \u0422\u0435\u043f\u0435\u0440\u044c \u0434\u043b\u044f \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u044f \u0431\u0430\u043d\u0434\u043b\u0430 \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u0434\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u043d\u0430\u0437\u0432\u0430\u043d\u0438\u0435 \u043f\u0430\u043a\u0435\u0442\u0430 \u0432 \u0444\u0430\u0439\u043b composer.json \u0432\u0430\u0448\u0435\u0433\u043e \u043f\u0440\u043e\u0435\u043a\u0442\u0430:  <\/p>\n<pre><code>[...] &quot;require&quot; : {     [...]     &quot;lexxpavlov\/pagebundle&quot; : &quot;1.0.0&quot; }, [...] <\/code><\/pre>\n<p>  \u0438\u043b\u0438 \u0432\u044b\u043f\u043e\u043b\u043d\u0438\u0442\u044c \u043a\u043e\u043c\u0430\u043d\u0434\u0443 \u0434\u043b\u044f \u0434\u043e\u0431\u0430\u0432\u043b\u0435\u043d\u0438\u044f \u043f\u0430\u043a\u0435\u0442\u0430 \u0432 \u043a\u043e\u043d\u0441\u043e\u043b\u0438 (\u0432 \u043f\u0430\u043f\u043a\u0435 \u043f\u0440\u043e\u0435\u043a\u0442\u0430):  <\/p>\n<pre><code class=\"bash\">$ php composer.phar require lexxpavlov\/pagebundle <\/code><\/pre>\n<h1>\u0417\u0430\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435<\/h1>\n<p>  \u041c\u044b \u0441\u043e\u0437\u0434\u0430\u043b\u0438 \u043f\u0430\u043a\u0435\u0442 \u0434\u043b\u044f \u043f\u0430\u043a\u0435\u0442\u043d\u043e\u0433\u043e \u043c\u0435\u043d\u0435\u0434\u0436\u0435\u0440\u0430 composer, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0441\u043e\u0434\u0435\u0440\u0438\u0442 \u043d\u0430\u043f\u0438\u0441\u0430\u043d\u043d\u044b\u0439 \u043d\u0430\u043c\u0438 \u0431\u0430\u043d\u0434\u043b \u0434\u043b\u044f \u0444\u0440\u0435\u0439\u043c\u0432\u043e\u043a\u0430 Symfony2. \u0415\u0441\u043b\u0438 \u043c\u044b \u0431\u0443\u0434\u0435\u043c \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0435\u0433\u043e \u0432 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u0438\u0445 \u043f\u0440\u043e\u0435\u043a\u0442\u0430\u0445, \u0442\u043e \u043f\u0440\u0438 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u0438 \u043f\u0430\u043a\u0435\u0442\u0430 \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u044c \u043d\u043e\u0432\u0443\u044e \u0432\u0435\u0440\u0441\u0438\u044e \u043a\u043e\u0434\u0430 \u0432\u043e \u0432\u0441\u0435 \u043f\u0440\u043e\u0435\u043a\u0442\u044b \u043c\u043e\u0436\u043d\u043e \u043f\u0440\u043e\u0441\u0442\u043e\u0439 \u043a\u043e\u043c\u0430\u043d\u0434\u043e\u0439 \u00abcomposer update\u00bb. \u0422\u0430\u043a\u0436\u0435 \u0434\u0440\u0443\u0433\u0438\u0435 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0438\u0441\u0442\u044b \u043c\u043e\u0433\u0443\u0442 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0432\u0430\u0448 \u043f\u0430\u043a\u0435\u0442 \u0434\u043b\u044f \u0441\u0432\u043e\u0438\u0445 \u043f\u0440\u043e\u0435\u043a\u0442\u043e\u0432, \u0438 \u043e\u0442\u043f\u043b\u0430\u0442\u0438\u0442\u044c \u0432\u0430\u043c \u0431\u0430\u0433\u0440\u0435\u043f\u043e\u0440\u0442\u0430\u043c\u0438 \u0438 \u043f\u0443\u043b\u0440\u0435\u043a\u0432\u0435\u0441\u0442\u0430\u043c\u0438.<\/p>\n<p>  <a href=\"https:\/\/github.com\/lexxpavlov\/PageBundle\">\u0420\u0435\u043f\u043e\u0437\u0438\u0442\u043e\u0440\u0438\u0439 \u0431\u0430\u043d\u0434\u043b\u0430<\/a> (\u0432 \u0441\u0442\u0430\u0442\u044c\u0435 \u043f\u0440\u0435\u0434\u043b\u043e\u0436\u0435\u043d\u0430 \u043d\u0435\u0437\u043d\u0430\u0447\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u0438\u0437\u043c\u0435\u043d\u0451\u043d\u043d\u0430\u044f \u0432\u0435\u0440\u0441\u0438\u044f \u0431\u0430\u043d\u0434\u043b\u0430, \u0447\u0442\u043e\u0431\u044b \u043d\u0435 \u0443\u0432\u0435\u043b\u0438\u0447\u0438\u0432\u0430\u0442\u044c \u0441\u0442\u0430\u0442\u044c\u044e \u0435\u0449\u0451 \u0431\u043e\u043b\u044c\u0448\u0435)<br \/>  <a href=\"https:\/\/packagist.org\/packages\/lexxpavlov\/pagebundle\">\u0421\u0442\u0440\u0430\u043d\u0438\u0446\u0430 \u0431\u0430\u043d\u0434\u043b\u0430 \u043d\u0430 Packagist<\/a><\/p>\n<p>  \u0418\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u043d\u044b\u0435 \u043c\u0430\u0442\u0435\u0440\u0438\u0430\u043b\u044b \u0438 \u043f\u043e\u043b\u0435\u0437\u043d\u044b\u0435 \u0441\u0441\u044b\u043b\u043a\u0438:  <\/p>\n<ol>\n<li><a href=\"http:\/\/stackoverflow.com\/questions\/21523481\/symfony2-creating-own-vendor-bundle-project-and-git-strategy\">\u0412\u043e\u043f\u0440\u043e\u0441 \u043d\u0430 StackOverflow \u043e \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u0438 \u0441\u0432\u043e\u0435\u0433\u043e \u0431\u0430\u043d\u0434\u043b\u0430<\/a><\/li>\n<li><a href=\"http:\/\/symfony-gu.ru\/documentation\/ru\/html\/book\/page_creation.html\">\u0421\u043e\u0437\u0434\u0430\u043d\u0438\u0435 \u0441\u0442\u0440\u0430\u043d\u0438\u0446 \u0432 Symfony2<\/a> \u2014 \u043f\u043e\u0434\u0440\u043e\u0431\u043d\u043e\u0435 \u043e\u043f\u0438\u0441\u0430\u043d\u0438\u0435 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0430 \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u044f \u0431\u0430\u043d\u0434\u043b\u043e\u0432, \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440\u043e\u0432 \u0438 \u0448\u0430\u0431\u043b\u043e\u043d\u043e\u0432<\/li>\n<li><a href=\"http:\/\/devacademy.ru\/posts\/opredelenie-i-proverka-parametrov-konfiguratsii-dlya-bandla-v-symfony-2\/\">\u041f\u0435\u0440\u0435\u0432\u043e\u0434 \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0430\u0446\u0438\u0438 \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u0430 Config<\/a><\/li>\n<li><a href=\"https:\/\/packagist.org\/about\">About Packagist<\/a> \u2014 \u043e\u043f\u0438\u0441\u0430\u043d\u0438\u0435 \u043f\u0440\u043e\u0435\u043a\u0442\u0430 Packagist \u0438 \u0438\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u0438 \u043f\u043e \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0435 \u043f\u0430\u043a\u0435\u0442\u043e\u0432<\/li>\n<li><a href=\"http:\/\/choosealicense.com\/\">Choose a license<\/a> \u2014 \u0441\u0430\u0439\u0442 \u043e \u0432\u044b\u0431\u043e\u0440\u0435 \u043b\u0438\u0446\u0435\u043d\u0437\u0438\u0438 \u043f\u0430\u043a\u0435\u0442\u0430 \u043e\u0442 \u0441\u043e\u0437\u0434\u0430\u0442\u0435\u043b\u0435\u0439 Github.com<\/li>\n<\/ol>\n<div class=\"clear\"><\/div>\n<\/p><\/div>\n<p> \u0441\u0441\u044b\u043b\u043a\u0430 \u043d\u0430 \u043e\u0440\u0438\u0433\u0438\u043d\u0430\u043b \u0441\u0442\u0430\u0442\u044c\u0438 <a href=\"http:\/\/habrahabr.ru\/post\/248055\/\"> http:\/\/habrahabr.ru\/post\/248055\/<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<div class=\"content html_format\">     \t\u0427\u0430\u0441\u0442\u043e \u0432\u043e\u0437\u043d\u0438\u043a\u0430\u0435\u0442 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e\u0441\u0442\u044c \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u043e\u0434\u0438\u043d\u0430\u043a\u043e\u0432\u044b\u0439 \u043a\u043e\u0434 \u0432 \u0440\u0430\u0437\u043d\u044b\u0445 \u043f\u0440\u043e\u0435\u043a\u0442\u0430\u0445. \u0427\u0442\u043e\u0431\u044b \u043d\u0435 \u0431\u044b\u043b\u043e \u043f\u043e\u0432\u0442\u043e\u0440\u0435\u043d\u0438\u044f \u043a\u043e\u0434\u0430, \u0442\u0430\u043a\u043e\u0439 \u043a\u043e\u0434 \u043e\u0431\u044b\u0447\u043d\u043e \u043f\u043e\u043c\u0435\u0449\u0430\u044e\u0442 \u0432 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0443. \u0412 \u0444\u0440\u0435\u0439\u043c\u0432\u043e\u0440\u043a\u0435 Symfony2 \u0432\u0435\u0441\u044c \u043a\u043e\u0434 \u0434\u043e\u043b\u0436\u0435\u043d \u0431\u044b\u0442\u044c \u043f\u043e\u043c\u0435\u0449\u0451\u043d \u0432 \u0442\u0430\u043a \u043d\u0430\u0437\u044b\u0432\u0430\u0435\u043c\u044b\u0435 \u0431\u0430\u043d\u0434\u043b\u044b (bundle). \u0423\u0436\u0435 \u0441\u0435\u0439\u0447\u0430\u0441 \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u0435\u0442 \u043e\u0433\u0440\u043e\u043c\u043d\u043e\u0435 \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u0431\u0430\u043d\u0434\u043b\u043e\u0432, \u0440\u0435\u0448\u0430\u044e\u0449\u0438\u0445 \u0441\u043e\u0432\u0435\u0440\u0448\u0435\u043d\u043d\u043e \u0440\u0430\u0437\u043d\u044b\u0435 \u0437\u0430\u0434\u0430\u0447\u0438, \u043d\u043e \u0432\u0441\u0451-\u0442\u0430\u043a\u0438 \u0447\u0430\u0441\u0442\u043e \u0432\u043e\u0437\u043d\u0438\u043a\u0430\u0435\u0442 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e\u0441\u0442\u044c \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u044f \u0441\u0432\u043e\u0435\u0433\u043e \u0431\u0430\u043d\u0434\u043b\u0430, \u0440\u0435\u0448\u0430\u044e\u0449\u0435\u0433\u043e \u0440\u0443\u0442\u0438\u043d\u043d\u0443\u044e \u0437\u0430\u0434\u0430\u0447\u0443. <\/p>\n<p>  \u042d\u0442\u043e \u043c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c \u043e\u0431\u044b\u0447\u043d\u044b\u0439 \u0431\u0430\u043d\u0434\u043b, \u043d\u0430\u0445\u043e\u0434\u044f\u0449\u0438\u0439\u0441\u044f \u0432 \u043f\u0430\u043f\u043a\u0435 src, \u0438 \u0442\u043e\u0433\u0434\u0430 \u043f\u0440\u0438 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e\u0441\u0442\u0438 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0435\u0433\u043e \u0432 \u043d\u043e\u0432\u043e\u043c \u043f\u0440\u043e\u0435\u043a\u0442\u0435 \u043d\u0443\u0436\u043d\u043e \u0441\u043a\u043e\u043f\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0435\u0433\u043e \u0432 \u043d\u043e\u0432\u044b\u0439 \u043f\u0440\u043e\u0435\u043a\u0442. \u041d\u043e \u0432 \u0442\u0430\u043a\u043e\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u0432\u043e\u0437\u043d\u0438\u043a\u0430\u0435\u0442 \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u0430 \u0441 \u043e\u0431\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u0435\u043c \u043a\u043e\u0434\u0430, \u0432\u0435\u0434\u044c, \u043a\u043e\u0433\u0434\u0430 \u043a\u043e\u0434 \u0434\u043e\u0441\u0442\u0443\u043f\u0435\u043d \u0434\u043b\u044f \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u044f, \u0442\u043e \u043e\u043d \u0431\u0443\u0434\u0435\u0442 \u0438\u0437\u043c\u0435\u043d\u0451\u043d (\u043e\u0441\u043e\u0431\u044b\u0435 \u0438\u0437\u0432\u0440\u0430\u0449\u0435\u043d\u0446\u044b \u0438\u0437\u043c\u0435\u043d\u044f\u044e\u0442 \u0434\u0430\u0436\u0435 \u043a\u043e\u0434 \u0432 \u043f\u0430\u043f\u043a\u0435 vendor). \u0414\u043b\u044f \u0443\u0434\u043e\u0431\u0441\u0442\u0432\u0430 \u043f\u0440\u043e\u0446\u0435\u0434\u0443\u0440\u044b \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u044f \u0441\u0432\u043e\u0435\u0433\u043e \u043a\u043e\u0434\u0430 \u0432 \u0434\u0440\u0443\u0433\u0438\u0445 \u043f\u0440\u043e\u0435\u043a\u0442\u0430\u0445 \u043c\u043e\u0436\u043d\u043e \u043e\u0444\u043e\u0440\u043c\u0438\u0442\u044c \u0431\u0430\u043d\u0434\u043b \u043a\u0430\u043a \u0432\u043d\u0435\u0448\u043d\u0438\u0439, \u0432\u0435\u043d\u0434\u043e\u0440\u043d\u044b\u0439 \u0431\u0430\u043d\u0434\u043b, \u0438 \u0443\u043f\u0440\u0430\u0432\u043b\u044f\u0442\u044c \u0438\u043c \u0447\u0435\u0440\u0435\u0437 composer \u043d\u0430\u0440\u0430\u0432\u043d\u0435 \u0441 \u043e\u0441\u0442\u0430\u043b\u044c\u043d\u044b\u043c\u0438 \u0441\u0442\u043e\u0440\u043e\u043d\u043d\u0438\u043c\u0438 \u0431\u0430\u043d\u0434\u043b\u0430\u043c\u0438. <\/p>\n<p>  \u042d\u0442\u0430 \u0441\u0442\u0430\u0442\u044c\u044f \u043f\u043e\u0448\u0430\u0433\u043e\u0432\u043e \u043f\u043e\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u0442, \u043a\u0430\u043a \u043c\u043e\u0436\u043d\u043e \u0441 \u043d\u0443\u043b\u044f \u0441\u043e\u0437\u0434\u0430\u0442\u044c \u0431\u0430\u043d\u0434\u043b, \u0434\u043e\u0441\u0442\u0443\u043f\u043d\u044b\u0439 \u043a \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0435 \u0447\u0435\u0440\u0435\u0437 composer.<\/p>\n<p>  \u0421\u043e\u0434\u0435\u0440\u0436\u0430\u043d\u0438\u0435:<\/p>\n<ol>\n<li>\u0421\u043e\u0437\u0434\u0430\u043d\u0438\u0435 \u043d\u043e\u0432\u043e\u0433\u043e \u0431\u0430\u043d\u0434\u043b\u0430<\/li>\n<li>\u0414\u043e\u0431\u0430\u0432\u043b\u0435\u043d\u0438\u0435 \u043d\u0430\u0441\u0442\u0440\u043e\u0435\u043a \u0432 \u0431\u0430\u043d\u0434\u043b<\/li>\n<li>\u041f\u043e\u0434\u0433\u043e\u0442\u043e\u0432\u043a\u0430 \u0431\u0430\u043d\u0434\u043b\u0430 \u043a \u043f\u0443\u0431\u043b\u0438\u043a\u0430\u0446\u0438\u0438<\/li>\n<li>\u041f\u0443\u0431\u043b\u0438\u043a\u0430\u0446\u0438\u044f \u0431\u0430\u043d\u0434\u043b\u0430<\/li>\n<\/ol>\n<p>  \u0411\u0443\u0434\u0435\u0442 \u0440\u0430\u0441\u0441\u043c\u043e\u0442\u0440\u0435\u043d\u043e \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u0435 \u0431\u0430\u043d\u0434\u043b\u0430 \u0434\u043b\u044f \u0443\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u044f \u0441\u0442\u0430\u0442\u0438\u0447\u043d\u044b\u043c\u0438 \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u0430\u043c\u0438 \u0441\u0430\u0439\u0442\u0430. \u041c\u043e\u0436\u043d\u043e \u043d\u0430\u0439\u0442\u0438 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0433\u043e\u0442\u043e\u0432\u044b\u0445 \u043f\u043e\u0434\u043e\u0431\u043d\u044b\u0445 \u0431\u0430\u043d\u0434\u043b\u043e\u0432, \u043d\u043e \u043e\u043d\u0438 \u043b\u0438\u0431\u043e \u0441\u043b\u0438\u0448\u043a\u043e\u043c \u043f\u0440\u043e\u0441\u0442\u044b\u0435, \u043b\u0438\u0431\u043e \u0441\u043b\u0438\u0448\u043a\u043e\u043c \u0441\u043b\u043e\u0436\u043d\u044b\u0435 (\u0442\u0438\u043f\u0430 SonataPageBundle). \u0423\u0440\u043e\u0432\u0435\u043d\u044c \u0441\u0442\u0430\u0442\u044c\u0438 \u2014 \u043f\u0440\u043e\u0434\u0432\u0438\u043d\u0443\u0442\u044b\u0439 \u043d\u043e\u0432\u0438\u0447\u043e\u043a. \u041f\u043e\u0434\u0440\u0430\u0437\u0443\u043c\u0435\u0432\u0430\u0435\u0442\u0441\u044f, \u0447\u0442\u043e \u0447\u0438\u0442\u0430\u0442\u0435\u043b\u044c \u0443\u0436\u0435 \u0443\u043c\u0435\u0435\u0442 \u0441\u043e\u0437\u0434\u0430\u0432\u0430\u0442\u044c \u0431\u0430\u043d\u0434\u043b\u044b \u0432 \u043f\u0440\u043e\u0435\u043a\u0442\u0435, \u0430 \u0442\u0430\u043a\u0436\u0435 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c\u0441\u044f \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440\u0430\u043c\u0438 \u0438 \u0448\u0430\u0431\u043b\u043e\u043d\u0430\u043c\u0438.<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[],"tags":[],"class_list":["post-248055","post","type-post","status-publish","format-standard","hentry"],"_links":{"self":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/248055","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=248055"}],"version-history":[{"count":0,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/248055\/revisions"}],"wp:attachment":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=248055"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=248055"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=248055"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}