{"id":211086,"date":"2014-03-11T08:03:03","date_gmt":"2014-03-11T04:03:03","guid":{"rendered":"http:\/\/savepearlharbor.com\/?p=211086"},"modified":"-0001-11-30T00:00:00","modified_gmt":"-0001-11-29T21:00:00","slug":"","status":"publish","type":"post","link":"https:\/\/savepearlharbor.com\/?p=211086","title":{"rendered":"<span class=\"post_title\">Symfony CMF. \u0427\u0430\u0441\u0442\u044c 2 \u0438 \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u044f\u044f<\/span>"},"content":{"rendered":"<div class=\"content html_format\">   \t<img decoding=\"async\" src=\"http:\/\/habrastorage.org\/getpro\/habr\/post_images\/606\/322\/bce\/606322bce0a894b6cd0dda6f92c2e3a7.png\" alt=\"image\" align=\"left\"\/>\u041f\u0440\u043e\u0434\u043e\u043b\u0436\u0438\u043c \u0440\u0430\u0437\u0433\u043b\u044f\u0434\u044b\u0432\u0430\u0442\u044c <a href=\"http:\/\/cmf.sandbox.com\">Symfony CMF<\/a>, \u0440\u0435\u0430\u043b\u0438\u0437\u0443\u044e\u0449\u0443\u044e \u043a\u043e\u043d\u0446\u0435\u043f\u0446\u0438\u044e \u043f\u043b\u0430\u0442\u0444\u043e\u0440\u043c\u044b \u0434\u043b\u044f \u043f\u043e\u0441\u0442\u0440\u043e\u0435\u043d\u0438\u044f CMS \u0438\u0437 \u0441\u043b\u0430\u0431\u043e\u0441\u0432\u044f\u0437\u0430\u043d\u043d\u044b\u0445 \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u043e\u0432. \u0412 <a href=\"http:\/\/habrahabr.ru\/post\/197524\/\">\u043f\u0435\u0440\u0432\u043e\u0439 \u0447\u0430\u0441\u0442\u0438<\/a> \u0441\u0442\u0430\u0442\u044c\u0438 \u043c\u044b \u043f\u043e\u0434\u0440\u043e\u0431\u043d\u043e \u0440\u0430\u0441\u0441\u043c\u043e\u0442\u0440\u0435\u043b\u0438 \u0441\u0445\u0435\u043c\u0443 \u0445\u0440\u0430\u043d\u0435\u043d\u0438\u044f \u0438 \u0434\u043e\u0441\u0442\u0443\u043f\u0430 \u043a \u0434\u0430\u043d\u043d\u044b\u043c, \u0432\u043e \u0432\u0442\u043e\u0440\u043e\u0439 \u0447\u0430\u0441\u0442\u0438 \u043d\u0430\u0441 \u0436\u0434\u0435\u0442 \u0432\u0441\u0435 \u043e\u0441\u0442\u0430\u043b\u044c\u043d\u043e\u0435. <\/p>\n<p>  \u041f\u0440\u043e\u0434\u043e\u043b\u0436\u0435\u043d\u0438\u0435 \u0441\u0442\u0430\u0442\u044c\u0438 \u0432\u044b\u0445\u043e\u0434\u0438\u0442 \u0441\u043e \u0437\u043d\u0430\u0447\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0439 \u0437\u0430\u0434\u0435\u0440\u0436\u043a\u043e\u0439 \u0438\u0437-\u0437\u0430 \u043c\u043e\u0435\u0439 \u043b\u0435\u043d\u0438, \u043f\u0440\u043e\u0431\u043b\u0435\u043c \u0441\u043e \u0437\u0434\u043e\u0440\u043e\u0432\u044c\u0435\u043c \u0438 \u0438\u043d\u0442\u0435\u0440\u043d\u0435\u0442\u043e\u043c. \u0417\u0430 \u044d\u0442\u0438 \u043f\u0430\u0440\u0443 \u043c\u0435\u0441\u044f\u0446\u0435\u0432 \u0441\u0438\u0441\u0442\u0435\u043c\u0430 \u0434\u043e\u0440\u043e\u0441\u043b\u0430 \u0434\u043e \u0432\u0435\u0440\u0441\u0438\u0438 1.0.0, \u0438 \u0432\u0441\u0435 \u043f\u043e\u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0435 \u043f\u0440\u0430\u0432\u043a\u0438 \u0432 master-\u0432\u0435\u0442\u043a\u0435 \u0437\u0430\u0447\u0435\u043c-\u0442\u043e \u043b\u043e\u043c\u0430\u044e\u0442 \u0440\u0430\u0431\u043e\u0442\u0443 \u0441\u0438\u0441\u0442\u0435\u043c\u044b, \u043d\u0435 \u0431\u0443\u0434\u0443\u0447\u0438 \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u043c\u0438. \u041d\u0430 \u0441\u043b\u0443\u0447\u0430\u0439, \u0435\u0441\u043b\u0438 \u043a\u0442\u043e \u0437\u0430\u0445\u043e\u0447\u0435\u0442 \u0441\u0442\u0430\u0432\u0438\u0442\u044c \u0441\u0438\u0441\u0442\u0435\u043c\u0443 \u0440\u0443\u043a\u0430\u043c\u0438, \u043f\u043e\u043c\u043d\u0438\u0442\u0435 \u2014 \u043e\u043f\u0438\u0440\u0430\u0439\u0442\u0435\u0441\u044c \u043d\u0430 \u0441\u0442\u0430\u0431\u0438\u043b\u044c\u043d\u044b\u0435 \u0432\u0435\u0440\u0441\u0438\u0438, \u043f\u043e\u043c\u0435\u0447\u0435\u043d\u043d\u044b\u0435 \u0442\u0435\u0433\u0430\u043c\u0438.<\/p>\n<p>  \u0421\u0430\u043c\u044b\u0435 \u043d\u0435\u0442\u0435\u0440\u043f\u0435\u043b\u0438\u0432\u044b\u0435 \u043c\u043e\u0433\u0443\u0442 \u043f\u0440\u043e\u043c\u043e\u0442\u0430\u0442\u044c \u0432\u043d\u0438\u0437, \u0441\u043a\u0430\u0447\u0430\u0442\u044c \u0432\u0438\u0440\u0442\u0443\u0430\u043b\u044c\u043d\u0443\u044e \u043c\u0430\u0448\u0438\u043d\u0443 \u0441 \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043b\u0435\u043d\u043d\u043e\u0439 \u0441\u0438\u0441\u0442\u0435\u043c\u043e\u0439 (\u043f\u043e\u0442\u0440\u0435\u0431\u0443\u0435\u0442\u0441\u044f VirtualBox) \u0438 \u043f\u043e\u0449\u0443\u043f\u0430\u0442\u044c \u0432\u0441\u0435 \u0441\u0430\u043c\u043e\u043c\u0443, \u043d\u043e \u0434\u043b\u044f \u043f\u043e\u043b\u043d\u043e\u0442\u044b \u043e\u043f\u044b\u0442\u0430 \u044f \u0431\u044b \u0440\u0435\u043a\u043e\u043c\u0435\u043d\u0434\u043e\u0432\u0430\u043b \u0441\u043d\u0430\u0447\u0430\u043b\u0430 \u043f\u0440\u043e\u0447\u0438\u0442\u0430\u0442\u044c \u0441\u0442\u0430\u0442\u044c\u044e.<\/p>\n<p>  \u0418\u0442\u0430\u043a. \u0427\u0442\u043e \u0443 \u043d\u0430\u0441 \u043f\u043e \u043f\u043b\u0430\u043d\u0443 \u043f\u043e\u0441\u043b\u0435 \u0445\u0440\u0430\u043d\u0435\u043d\u0438\u044f \u0434\u0430\u043d\u043d\u044b\u0445?<br \/>  <a name=\"habracut\"><\/a><\/p>\n<p>  <img decoding=\"async\" src=\"http:\/\/habr.habrastorage.org\/post_images\/1d2\/339\/9e3\/1d23399e38a07a3c854a2e1e02cb52ec.png\" alt=\"Hello world\"\/><em>\u0421\u043a\u0440\u0438\u043d\u0448\u043e\u0442 \u0433\u043b\u0430\u0432\u043d\u043e\u0439 \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u044b \u0434\u0435\u043c\u043e-\u043f\u0440\u043e\u0435\u043a\u0442\u0430<\/em><\/p>\n<h4>\u0428\u0430\u0431\u043b\u043e\u043d\u0438\u0437\u0430\u0442\u043e\u0440<\/h4>\n<p>  \u0417\u0434\u0435\u0441\u044c \u0432\u0441\u0435 \u0437\u043d\u0430\u043a\u043e\u043c\u043e \u0434\u043b\u044f \u043c\u043d\u043e\u0433\u0438\u0445 \u2014 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f <a href=\"http:\/\/twig.sensiolabs.org\">Twig<\/a>. \u0413\u0438\u0431\u043a\u0438\u0439, \u043c\u043e\u0449\u043d\u044b\u0439, \u043e\u0447\u0435\u043d\u044c \u0431\u044b\u0441\u0442\u0440\u044b\u0439 \u0438 \u043b\u0430\u043a\u043e\u043d\u0438\u0447\u043d\u044b\u0439. \u041f\u043e\u0434\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u0435\u0442 \u0440\u0430\u0437\u0434\u0435\u043b\u0435\u043d\u0438\u0435 \u043d\u0430 \u0431\u043b\u043e\u043a\u0438, \u043d\u0430\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u043d\u0438\u0435 \u0438 \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0446\u0438\u044e \u0448\u0430\u0431\u043b\u043e\u043d\u043e\u0432 \u0432 PHP-\u043a\u043e\u0434. \u0428\u0430\u0431\u043b\u043e\u043d \u0433\u043b\u0430\u0432\u043d\u043e\u0439 \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u044b \u0432\u044b\u0433\u043b\u044f\u0434\u0438\u0442 \u0442\u0430\u043a:<\/p>\n<pre><code>{% extends &quot;SandboxMainBundle::skeleton.html.twig&quot; %}  {% block content %}     &lt;p&gt;&lt;em&gt;We are on the homepage which uses a special template&lt;\/em&gt;&lt;\/p&gt;      {% createphp cmfMainContent as=&quot;rdf&quot; %}     {{ rdf|raw }}     {% endcreatephp %}      &lt;hr\/&gt;      {{ sonata_block_render({ 'name': 'additionalInfoBlock' }, {         'divisible_by': 3,         'divisible_class': 'row',         'child_class': 'span3'     }) }}      &lt;div class=&quot;row&quot;&gt;         &lt;div class=&quot;span3&quot;&gt;             &lt;h2&gt;Some additional links:&lt;\/h2&gt;             &lt;ul&gt;                 {% for child in cmf_children(cmf_find('\/cms\/simple')) %}                     &lt;li&gt;                         &lt;a href=&quot;{{ path(child) }}&quot;&gt;{{ child.title|striptags }}&lt;\/a&gt;                     &lt;\/li&gt;                 {% endfor %}             &lt;\/ul&gt;         &lt;\/div&gt;          &lt;div class=&quot;span3&quot;&gt;         {{ sonata_block_render({             'name': 'rssBlock'         }) }}         &lt;\/div&gt;     &lt;\/div&gt; {% endblock %} <\/code><\/pre>\n<p>  \u0412 \u0441\u043e\u0441\u0442\u0430\u0432\u0435 CoreBundle \u0438\u0434\u0435\u0442 \u043f\u0430\u0447\u043a\u0430 \u0440\u0430\u0441\u0448\u0438\u0440\u0435\u043d\u0438\u0439 \u0434\u043b\u044f Twig, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0443\u043f\u0440\u043e\u0449\u0430\u044e\u0442 \u0440\u0430\u0431\u043e\u0442\u0443 \u0441 CMF \u0438 \u043e\u0431\u0445\u043e\u0434 PHPCR-\u0434\u0435\u0440\u0435\u0432\u0430, \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u0442\u0430\u043a\u0438\u0435 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 \u043a\u0430\u043a <code>cmf_prev<\/code>, <code>cmf_next<\/code>, <code>cmf_children<\/code> \u0438 <a href=\"http:\/\/symfony.com\/doc\/current\/cmf\/bundles\/core\/templating.html#walking-the-phpcr-tree\">\u0434\u0440\u0443\u0433\u0438\u0435<\/a>.<\/p>\n<p>  \u0411\u043e\u043b\u044c\u0448\u0435 \u0442\u0443\u0442 \u043e\u0441\u043e\u0431\u0435\u043d\u043d\u043e \u0441\u043c\u043e\u0442\u0440\u0435\u0442\u044c \u043d\u0435 \u043d\u0430 \u0447\u0442\u043e, Twig \u2013 \u043e\u043d \u0438 \u0432 \u0410\u0444\u0440\u0438\u043a\u0435 Twig.<\/p>\n<h4>\u041f\u0430\u0440\u0430 \u0441\u043b\u043e\u0432 \u043e\u0431 \u0430\u0434\u043c\u0438\u043d\u043a\u0435<\/h4>\n<p>  <img decoding=\"async\" src=\"http:\/\/habr.habrastorage.org\/post_images\/d75\/064\/4b3\/d750644b39b096486fbaa332bb6598cc.png\" alt=\"Sonata\"\/><br \/>  <em>\u0413\u043b\u0430\u0432\u043d\u0430\u044f \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u0430 \u0430\u0434\u043c\u0438\u043d\u043a\u0438<\/em><\/p>\n<p>  \u0417\u043d\u0430\u043c\u0435\u043d\u0438\u0442\u044b\u0439 \u0433\u0435\u043d\u0435\u0440\u0430\u0442\u043e\u0440 \u0430\u0434\u043c\u0438\u043d\u043e\u043a <a href=\"https:\/\/github.com\/sonata-project\/SonataAdminBundle\">SonataAdminBundle<\/a> \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0435\u0442 \u0440\u043e\u0432\u043d\u043e \u0442\u0443 \u0436\u0435 \u0441\u0430\u043c\u0443\u044e \u0444\u0443\u043d\u043a\u0446\u0438\u044e \u0438 \u0432 Symfony CMF, \u043d\u043e \u0447\u0435\u0440\u0435\u0437 \u0441\u043f\u0435\u0446\u0438\u0430\u043b\u044c\u043d\u0443\u044e \u043f\u0440\u043e\u0441\u043b\u043e\u0439\u043a\u0443 \u0432 \u0432\u0438\u0434\u0435 <a href=\"https:\/\/github.com\/sonata-project\/SonataDoctrinePhpcrAdminBundle\">SonataDoctrinePhpcrAdminBundle<\/a>. \u0421\u0434\u0435\u043b\u0430\u043d\u043e \u044d\u0442\u043e, \u0447\u0442\u043e\u0431\u044b \u043e\u0440\u0438\u0433\u0438\u043d\u0430\u043b\u044c\u043d\u044b\u0439 \u0431\u0430\u043d\u0434\u043b \u043c\u043e\u0433 \u0430\u0431\u0441\u0442\u0440\u0430\u0433\u0438\u0440\u043e\u0432\u0430\u0442\u044c\u0441\u044f \u043e\u0442 \u0445\u0440\u0430\u043d\u0438\u043b\u0438\u0449\u0430 \u0434\u0430\u043d\u043d\u044b\u0445.<\/p>\n<p>  \u0414\u043b\u044f \u0440\u0430\u0431\u043e\u0442\u044b \u0441 \u0434\u0440\u0435\u0432\u043e\u0432\u0438\u0434\u043d\u044b\u043c\u0438 \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0430\u043c\u0438 \u043f\u0440\u0435\u0434\u043d\u0430\u0437\u043d\u0430\u0447\u0435\u043d TreeBrowserBundle, \u0440\u0430\u0431\u043e\u0442\u0430\u044e\u0449\u0438\u0439 \u043d\u0430 <a href=\"http:\/\/www.jstree.com\/documentation\">jsTree<\/a>.<\/p>\n<p>  \u0418\u043c\u0435\u044e\u0449\u0438\u0435 \u0430\u0434\u043c\u0438\u043d-\u0447\u0430\u0441\u0442\u044c \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u044b, \u043e\u043f\u0438\u0441\u0430\u043d\u043d\u044b\u0435 \u043d\u0438\u0436\u0435, \u043e\u0431\u044f\u0437\u0430\u0442\u0435\u043b\u044c\u043d\u043e \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0430\u044e\u0442 \u0441\u0432\u043e\u0438 \u043f\u0430\u043d\u0435\u043b\u0438 \u0438\u043c\u0435\u043d\u043d\u043e \u0441\u044e\u0434\u0430. \u041f\u043e\u044d\u0442\u043e\u043c\u0443 \u043f\u043e\u0434\u0440\u043e\u0431\u043d\u043e \u043e\u0441\u0442\u0430\u043d\u0430\u0432\u043b\u0438\u0432\u0430\u0442\u044c\u0441\u044f \u043d\u0430 \u044d\u0442\u043e\u043c \u043d\u0435 \u0432\u0438\u0436\u0443 \u0441\u043c\u044b\u0441\u043b\u0430, \u0434\u0435\u0442\u0430\u043b\u044c\u043d\u044b\u0435 \u0441\u043a\u0440\u0438\u043d\u0448\u043e\u0442\u044b \u0431\u0443\u0434\u0443\u0442 \u0434\u0430\u043b\u044c\u0448\u0435.<\/p>\n<h4>\u0421\u0442\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438\u0439 \u043a\u043e\u043d\u0442\u0435\u043d\u0442<\/h4>\n<p>  \u0421\u0442\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438\u0439 \u043a\u043e\u043d\u0442\u0435\u043d\u0442 \u0432 CMS \u2014 \u043e\u0441\u043d\u043e\u0432\u0430 \u0432\u0441\u0435\u0433\u043e. \u0412 Symfony CMF \u0437\u0430 \u0441\u0442\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438\u0439 \u043a\u043e\u043d\u0442\u0435\u043d\u0442 \u043e\u0442\u0432\u0435\u0447\u0430\u0435\u0442 ContentBundle, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043e\u0431\u0435\u0441\u043f\u0435\u0447\u0438\u0432\u0430\u0435\u0442 \u0431\u0430\u0437\u043e\u0432\u0443\u044e \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044e \u043a\u043b\u0430\u0441\u0441\u043e\u0432 \u0441\u0442\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438\u0445 \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u043e\u0432, \u0432\u043a\u043b\u044e\u0447\u0430\u044f \u043c\u043d\u043e\u0433\u043e\u044f\u0437\u044b\u0447\u043d\u043e\u0441\u0442\u044c \u0438 \u0441\u0432\u044f\u0437\u044c \u0441 \u043c\u0430\u0440\u0448\u0440\u0443\u0442\u0430\u043c\u0438.<\/p>\n<p>  \u041e\u0441\u043d\u043e\u0432\u043e\u0439 \u0431\u0430\u043d\u0434\u043b\u0430 \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u043a\u043b\u0430\u0441\u0441 <code>StaticContent<\/code>, \u0441\u043e\u0441\u0442\u0430\u0432 \u043a\u043e\u0442\u043e\u0440\u043e\u0433\u043e \u043e\u043a\u0430\u0436\u0435\u0442\u0441\u044f \u0437\u043d\u0430\u043a\u043e\u043c\u044b\u043c \u043c\u043d\u043e\u0433\u0438\u043c \u2014 \u0433\u043e\u0432\u043e\u0440\u044f\u0449\u0438\u0435 \u0441\u0430\u043c\u0438 \u0437\u0430 \u0441\u0435\u0431\u044f \u043f\u043e\u043b\u044f \u0442\u0438\u043f\u0430 <code>title<\/code>, <code>body<\/code>, \u0441\u0441\u044b\u043b\u043a\u0430 \u043d\u0430 \u0440\u043e\u0434\u0438\u0442\u0435\u043b\u044c\u0441\u043a\u0438\u0439 \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442 \u0438 \u0442\u0430\u043a \u0434\u0430\u043b\u0435\u0435. \u041a\u0440\u043e\u043c\u0435 \u0442\u043e\u0433\u043e, \u043e\u043d \u0440\u0435\u0430\u043b\u0438\u0437\u0443\u0435\u0442 \u0434\u0432\u0430 \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441\u0430:<\/p>\n<ul>\n<li><code>RouteReferrersInterface<\/code>, \u043e\u0431\u0435\u0441\u043f\u0435\u0447\u0438\u0432\u0430\u0435\u0442 \u0441\u0432\u044f\u0437\u043a\u0443 \u0441 \u043c\u0430\u0440\u0448\u0440\u0443\u0442\u0430\u043c\u0438<\/li>\n<li><code>PublishWorkflowInterface<\/code>, \u043f\u043e\u043c\u043e\u0433\u0430\u0435\u0442 \u043f\u043e\u043a\u0430\u0437\u044b\u0432\u0430\u0442\u044c \u0438\u043b\u0438 \u0441\u043a\u0440\u044b\u0432\u0430\u0442\u044c \u043a\u043e\u043d\u0442\u0435\u043d\u0442 \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u0437\u0430\u0434\u0430\u043d\u043d\u044b\u0445 \u0434\u0430\u0442 \u043f\u0443\u0431\u043b\u0438\u043a\u0430\u0446\u0438\u0438<\/li>\n<\/ul>\n<p>  <img decoding=\"async\" src=\"http:\/\/habrastorage.org\/getpro\/habr\/post_images\/4a3\/774\/0e9\/4a37740e9cd3c6ff0146360673d472d1.png\" alt=\"publish workflow\"\/><\/p>\n<p>  \u0414\u043b\u044f \u043c\u0443\u043b\u044c\u0442\u0438\u044f\u0437\u044b\u0447\u043d\u044b\u0445 \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u043e\u0432 \u043f\u0440\u0435\u0434\u0443\u0441\u043c\u043e\u0442\u0440\u0435\u043d <code>MultilangStaticContent<\/code> \u2014 \u0432\u0441\u0435 \u0442\u043e \u0436\u0435 \u0441\u0430\u043c\u043e\u0435, \u043d\u043e \u0434\u043e\u0431\u0430\u0432\u043b\u0435\u043d \u043f\u0435\u0440\u0435\u0432\u043e\u0434 \u043f\u043e\u043b\u0435\u0439 \u0438 \u043e\u0431\u044a\u044f\u0432\u043b\u0435\u043d\u0438\u0435 \u043b\u043e\u043a\u0430\u043b\u0438. \u041a\u0430\u043a \u0434\u0435\u043b\u0430\u0435\u0442\u0441\u044f \u043f\u0435\u0440\u0435\u0432\u043e\u0434 \u2014 \u043c\u044b \u0443\u0436\u0435 \u0432\u0438\u0434\u0435\u043b\u0438 \u0432 \u043f\u0435\u0440\u0432\u043e\u0439 \u0447\u0430\u0441\u0442\u0438 \u0441\u0442\u0430\u0442\u044c\u0438.<\/p>\n<p>  \u0411\u0430\u043d\u0434\u043b\u0443 \u043f\u043e\u043b\u0430\u0433\u0430\u0435\u0442\u0441\u044f \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440. <code>ContentController<\/code> \u0441\u043e\u0441\u0442\u043e\u0438\u0442 \u0438\u0437 \u0435\u0434\u0438\u043d\u0441\u0442\u0432\u0435\u043d\u043d\u043e\u0433\u043e <code>indexAction<\/code>, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043d\u0430 \u0432\u0445\u043e\u0434\u0435 \u043f\u0440\u0438\u043d\u0438\u043c\u0430\u0435\u0442 \u0436\u0435\u043b\u0430\u043c\u044b\u0439 \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442 \u0438 \u0440\u0435\u043d\u0434\u0435\u0440\u0438\u0442 \u0435\u0433\u043e \u043d\u0430 \u043d\u0443\u0436\u043d\u043e\u043c \u044f\u0437\u044b\u043a\u0435, \u0435\u0441\u043b\u0438 \u0441 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u0430\u043c\u0438 \u043f\u0443\u0431\u043b\u0438\u043a\u0430\u0446\u0438\u0438 \u0432\u0441\u0435 \u0432 \u043f\u043e\u0440\u044f\u0434\u043a\u0435. \u041e\u043f\u0446\u0438\u043e\u043d\u0430\u043b\u044c\u043d\u043e \u043c\u043e\u0436\u043d\u043e \u0437\u0430\u0434\u0430\u0442\u044c \u0448\u0430\u0431\u043b\u043e\u043d, \u0441 \u043a\u043e\u0442\u043e\u0440\u044b\u043c \u0431\u0443\u0434\u0435\u0442 \u0432\u044b\u0432\u043e\u0434\u0438\u0442\u044c\u0441\u044f \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u0430. \u0415\u0441\u043b\u0438 \u043d\u0435 \u0437\u0430\u0434\u0430\u0442\u044c \u2014 \u0431\u0443\u0434\u0435\u0442 \u0432\u0437\u044f\u0442 \u0442\u043e\u0442, \u0447\u0442\u043e \u0443\u043a\u0430\u0437\u0430\u043d \u043f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e.<\/p>\n<h4>\u0420\u043e\u0443\u0442\u0438\u043d\u0433<\/h4>\n<p>  \u0412 \u0441\u043e\u0432\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0445 \u0431\u043e\u043b\u044c\u0448\u0438\u0445 \u0441\u0430\u0439\u0442\u0430\u0445 \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u043c\u0430\u0442\u0435\u0440\u0438\u0430\u043b\u043e\u0432 \u043c\u043e\u0436\u0435\u0442 \u043b\u0435\u0433\u043a\u043e \u0438\u0437\u043c\u0435\u0440\u044f\u0442\u044c\u0441\u044f \u0442\u044b\u0441\u044f\u0447\u0430\u043c\u0438. \u041f\u043e\u043c\u043d\u043e\u0436\u0438\u0442\u044c \u043d\u0430 \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u043f\u0435\u0440\u0435\u0432\u043e\u0434\u043e\u0432. \u0414\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e\u0441\u0442\u044c \u043f\u043e\u0441\u0442\u043e\u044f\u043d\u043d\u044b\u0445 \u043f\u0440\u0430\u0432\u043e\u043a \u043c\u0430\u0442\u0435\u0440\u0438\u0430\u043b\u043e\u0432 \u0438 URL-\u043e\u0432 \u043a \u043d\u0438\u043c \u0432\u043e \u0438\u043c\u044f \u043f\u043e\u0438\u0441\u043a\u043e\u0432\u043e\u0439 \u043e\u043f\u0442\u0438\u043c\u0438\u0437\u0430\u0446\u0438\u0438.<br \/>  \u041f\u0440\u0438 \u044d\u0442\u043e\u043c, \u0437\u0430\u043c\u0435\u0442\u044c\u0442\u0435, \u0442\u0430\u043a\u0438\u043c\u0438 \u0432\u0435\u0449\u0430\u043c\u0438 \u043e\u0431\u044b\u0447\u043d\u043e \u0437\u0430\u043d\u0438\u043c\u0430\u0435\u0442\u0441\u044f \u0430\u0434\u043c\u0438\u043d\u0438\u0441\u0442\u0440\u0430\u0442\u043e\u0440 \u0441\u0430\u0439\u0442\u0430 (\u0432\u0435\u0431\u043c\u0430\u0441\u0442\u0435\u0440, \u043a\u043e\u043d\u0442\u0435\u043d\u0442-\u043c\u0435\u043d\u0435\u0434\u0436\u0435\u0440, \u0441\u0435\u043e\u0448\u043d\u0438\u043a), \u0430 \u043d\u0435 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a.<\/p>\n<p>  \u041a\u0430\u043a\u0438\u0435 \u0442\u0440\u0435\u0431\u043e\u0432\u0430\u043d\u0438\u044f \u043f\u0440\u0435\u0434\u044a\u044f\u0432\u043b\u044f\u044e\u0442\u0441\u044f \u043a \u0440\u043e\u0443\u0442\u0438\u043d\u0433\u0443 \u0432 \u0442\u0430\u043a\u043e\u043c \u0441\u043b\u0443\u0447\u0430\u0435?<\/p>\n<ul>\n<li>URL \u0437\u0430\u0434\u0430\u0435\u0442\u0441\u044f \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u0435\u043c<\/li>\n<li>\u043f\u043e\u0434\u0434\u0435\u0440\u0436\u043a\u0430 \u043c\u043d\u043e\u0433\u043e\u0441\u0430\u0439\u0442\u043e\u0432\u043e\u0441\u0442\u0438<\/li>\n<li>\u043f\u043e\u0434\u0434\u0435\u0440\u0436\u043a\u0430 \u043c\u043d\u043e\u0433\u043e\u044f\u0437\u044b\u0447\u043d\u043e\u0441\u0442\u0438<\/li>\n<li>\u0434\u0440\u0435\u0432\u043e\u0432\u0438\u0434\u043d\u0430\u044f \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0430<\/li>\n<li>\u043a\u043e\u043d\u0442\u0435\u043d\u0442, \u043c\u0435\u043d\u044e \u0438 \u043c\u0430\u0440\u0448\u0440\u0443\u0442\u044b \u0434\u043e\u043b\u0436\u043d\u044b \u0431\u044b\u0442\u044c \u0440\u0430\u0437\u0434\u0435\u043b\u0435\u043d\u044b<\/li>\n<\/ul>\n<p>  \u0415\u0441\u043b\u0438 \u0432\u0441\u043f\u043e\u043c\u043d\u0438\u0442\u044c \u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043d\u044b\u0439 \u0440\u043e\u0443\u0442\u0435\u0440 Symfony 2, \u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u0441\u044f \u043f\u043e\u043d\u044f\u0442\u043d\u043e, \u0447\u0442\u043e \u0442\u0430\u043a\u043e\u0439 \u0433\u0438\u0431\u043a\u043e\u0441\u0442\u0438 \u0442\u0430\u043c \u043d\u0435 \u0434\u043e\u0441\u0442\u0438\u0447\u044c. \u0420\u043e\u0443\u0442\u044b \u044f\u0432\u043d\u043e \u043f\u0440\u043e\u043f\u0438\u0441\u0430\u043d\u044b \u0432 \u043a\u043e\u043d\u0444\u0438\u0433\u0435 \u0434\u043b\u044f \u043a\u0430\u0436\u0434\u043e\u0433\u043e \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440\u0430 \u0438 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044e \u043c\u0435\u043d\u044f\u0442\u044c \u0438\u0445 \u043f\u043e\u043f\u0440\u043e\u0441\u0442\u0443 \u043d\u0435 \u0434\u0430\u044e\u0442. \u041c\u0430\u043a\u0441\u0438\u043c\u0443\u043c, \u043d\u0430 \u0447\u0442\u043e \u043c\u043e\u0436\u043d\u043e \u0440\u0430\u0441\u0441\u0447\u0438\u0442\u044b\u0432\u0430\u0442\u044c \u2014 \u044d\u0442\u043e \u043a\u0430\u043a\u043e\u0439-\u043d\u0438\u0431\u0443\u0434\u044c <code>\/page\/{slug}<\/code>, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043c\u043e\u0436\u043d\u043e \u043f\u0440\u0430\u0432\u0438\u0442\u044c \u0438\u0437 \u0430\u0434\u043c\u0438\u043d\u043a\u0438.<\/p>\n<p>  \u0414\u0430\u0432\u0430\u0439\u0442\u0435 \u043f\u043e\u0441\u043c\u043e\u0442\u0440\u0438\u043c, \u043a\u0430\u043a \u0432\u044b\u0433\u043b\u044f\u0434\u0435\u043b\u0430 \u0441\u0445\u0435\u043c\u0430 \u0444\u0443\u043d\u043a\u0446\u0438\u043e\u043d\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u043d\u0430 \u0433\u043e\u043b\u043e\u043c SF2:<\/p>\n<p>  <img decoding=\"async\" src=\"http:\/\/habr.habrastorage.org\/post_images\/f36\/bff\/d74\/f36bffd74ca89367b76859cd7e3abcf5.png\" alt=\"\u0420\u043e\u0443\u0442\u0438\u043d\u0433 \u0432 SF2\" title=\"\u0420\u043e\u0443\u0442\u0438\u043d\u0433 \u0432 SF2\"\/><\/p>\n<p>  \u0415\u0441\u043b\u0438 \u043d\u0435 \u0432\u0434\u0430\u0432\u0430\u0442\u044c\u0441\u044f \u0432 \u0434\u0435\u0442\u0430\u043b\u0438 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u0435\u0439 \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u043e\u0432, \u0432\u0441\u0435 \u0434\u043e\u0432\u043e\u043b\u044c\u043d\u043e \u043f\u0440\u0438\u043c\u0438\u0442\u0438\u0432\u043d\u043e. \u041f\u0440\u0438\u0445\u043e\u0434\u0438\u0442 \u0437\u0430\u043f\u0440\u043e\u0441, \u0440\u043e\u0443\u0442\u0435\u0440 \u0440\u0435\u0448\u0430\u0435\u0442 \u043a\u0430\u043a\u043e\u0439 \u0432\u044b\u0437\u0432\u0430\u0442\u044c \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440, \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440 \u0434\u0435\u0440\u0433\u0430\u0435\u0442 \u043d\u0443\u0436\u043d\u044b\u0435 \u0434\u0430\u043d\u043d\u044b\u0435 \u0438 \u0440\u0435\u043d\u0434\u0435\u0440\u0438\u0442 \u0432\u044c\u044e\u0448\u043a\u0443, \u0437\u0430\u0442\u0435\u043c \u0432\u044b\u0434\u0430\u0435\u0442 \u0437\u0430\u0432\u0435\u0442\u043d\u044b\u0439 Response.<\/p>\n<p>  \u042d\u0442\u043e \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u043f\u0440\u0438\u0432\u044b\u0447\u043d\u0430\u044f \u0441\u0445\u0435\u043c\u0430. <\/p>\n<p>  \u041f\u043e\u0447\u0435\u043c\u0443 \u0442\u0430\u043a\u043e\u0439 \u0432\u0430\u0440\u0438\u0430\u043d\u0442 \u043d\u0435\u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u0445\u043e\u0440\u043e\u0448 \u0434\u043b\u044f CMS?<\/p>\n<p>  \u041f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u0438\u043c, \u0447\u0442\u043e \u0443 \u043d\u0430\u0441 \u0435\u0441\u0442\u044c \u043d\u0435\u043a\u0438\u0439 <code>PageController<\/code>, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043f\u0440\u0438\u043d\u0438\u043c\u0430\u0435\u0442 \u0432 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435 \u0430\u0440\u0433\u0443\u043c\u0435\u043d\u0442\u0430 URL-\u043f\u0441\u0435\u0432\u0434\u043e\u043d\u0438\u043c \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u044b, \u0441\u0440\u0430\u0432\u043d\u0438\u0432\u0430\u0435\u0442 \u0435\u0433\u043e \u0441 \u0442\u0435\u043c, \u0447\u0442\u043e \u0445\u0440\u0430\u043d\u0438\u0442\u0441\u044f \u0432 \u0431\u0430\u0437\u0435 \u0434\u0430\u043d\u043d\u044b\u0445 \u0438 \u0432\u044b\u0434\u0430\u0435\u0442 \u0441\u0442\u0440\u0430\u043d\u0438\u0447\u043a\u0443, \u043b\u0438\u0431\u043e 404.<\/p>\n<p>  \u0412 \u043c\u043e\u0435\u0439 \u043f\u0440\u0430\u043a\u0442\u0438\u043a\u0435 \u0432\u0441\u0442\u0440\u0435\u0447\u0430\u043b\u0438\u0441\u044c \u0441\u043b\u0443\u0447\u0430\u0438, \u043a\u043e\u0433\u0434\u0430 \u0441\u0440\u0435\u0434\u0438 \u0441\u0442\u0430\u0442\u0438\u0447\u043d\u043e\u0433\u043e \u043a\u043e\u043d\u0442\u0435\u043d\u0442\u0430 \u0432\u0441\u0442\u0440\u0435\u0447\u0430\u043b\u0438\u0441\u044c \u0440\u0430\u0437\u043d\u044b\u0435 \u0444\u043e\u0440\u043c\u043e\u0447\u043a\u0438, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0433\u0430\u0440\u043c\u043e\u043d\u0438\u0447\u043d\u0435\u0439 \u0441\u043c\u043e\u0442\u0440\u0435\u043b\u0438\u0441\u044c \u0431\u044b \u0432 \u0441\u043e\u0441\u0442\u0430\u0432\u0435 \u0440\u0430\u0437\u0434\u0435\u043b\u0430 \u0441\u0430\u0439\u0442\u0430, \u043d\u0435\u0436\u0435\u043b\u0438 \u043a\u0430\u043a \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u044b\u0439 \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442. \u041d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u043d\u0430 \u043e\u0434\u043d\u043e\u043c \u0441\u0430\u0439\u0442\u0435 \u0431\u0430\u043d\u043a\u0430 \u0432 URL \u0442\u0435\u043a\u0441\u0442\u043e\u0432\u043e\u0433\u043e \u0440\u0430\u0437\u0434\u0435\u043b\u0430 <code>\/credits\/cash<\/code> \u0434\u043e\u0431\u0430\u0432\u043b\u044f\u043b\u0441\u044f \u043a\u0440\u0435\u0434\u0438\u0442\u043d\u044b\u0439 <code>\/calculator<\/code>, \u0447\u0442\u043e\u0431\u044b \u043b\u044e\u0434\u0438, \u043f\u0440\u043e\u0447\u0438\u0442\u0430\u0432 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u0443\u044e \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044e \u043e \u043a\u0440\u0435\u0434\u0438\u0442\u0430\u0445, \u043d\u0430 \u043c\u0435\u0441\u0442\u0435 \u043c\u043e\u0433\u043b\u0438 \u043f\u043e\u0441\u0447\u0438\u0442\u0430\u0442\u044c \u0441\u0435\u0431\u0435 \u043d\u0443\u0436\u043d\u044b\u0435 \u0446\u0438\u0444\u0435\u0440\u043a\u0438.<\/p>\n<p>  \u0414\u043e\u043f\u0443\u0441\u0442\u0438\u043c, <code>PageController<\/code> \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u043f\u0435\u0440\u0432\u0443\u044e \u0447\u0430\u0441\u0442\u044c URL, \u0447\u0442\u043e \u0434\u0435\u043b\u0430\u0442\u044c \u0441 \u043a\u0430\u043b\u044c\u043a\u0443\u043b\u044f\u0442\u043e\u0440\u043e\u043c, \u043a\u043e\u0442\u043e\u0440\u044b\u0439, \u043e\u0447\u0435\u0432\u0438\u0434\u043d\u043e, \u0431\u0443\u0434\u0435\u0442 \u0432\u044b\u0441\u0442\u0443\u043f\u0430\u0442\u044c \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u044b\u043c \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440\u043e\u043c? \u0414\u043e\u043f\u0438\u0441\u0430\u0442\u044c \u0432 \u043a\u043e\u043d\u0444\u0438\u0433\u0435 <code>pattern: \/credits\/cash\/calculator<\/code> \u0438 \u0443\u043a\u0430\u0437\u0430\u0442\u044c \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u044b\u0439 \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440\/\u044d\u043a\u0448\u0435\u043d? \u041a\u0430\u043a-\u0442\u043e \u043d\u0435\u043a\u0440\u0430\u0441\u0438\u0432\u043e. \u0414\u0430\u0436\u0435 \u0435\u0441\u043b\u0438 \u0440\u0430\u0441\u0441\u0442\u0430\u0432\u0438\u0442\u044c \u043f\u0440\u0438\u043e\u0440\u0438\u0442\u0435\u0442\u044b \u043c\u0435\u0436\u0434\u0443 \u043e\u0441\u0442\u0430\u043b\u044c\u043d\u044b\u043c\u0438 \u043c\u0430\u0440\u0448\u0440\u0443\u0442\u0430\u043c\u0438, \u0441\u043e\u0432\u0435\u0440\u0448\u0435\u043d\u043d\u043e \u043e\u0447\u0435\u0432\u0438\u0434\u043d\u043e, \u0447\u0442\u043e \u0433\u0438\u0431\u043a\u043e\u0441\u0442\u044c\u044e \u0442\u0443\u0442 \u043d\u0435 \u043f\u0430\u0445\u043d\u0435\u0442 \u2014 \u0435\u0441\u043b\u0438 \u0438\u0437\u043c\u0435\u043d\u0438\u0442\u0441\u044f \u043f\u0441\u0435\u0432\u0434\u043e\u043d\u0438\u043c \u0432 \u0431\u0430\u0437\u0435, \u0440\u0443\u043a\u0430\u043c\u0438 \u043f\u0440\u0438\u0434\u0435\u0442\u0441\u044f \u043f\u0440\u0430\u0432\u0438\u0442\u044c \u0438 \u043a\u043e\u043d\u0444\u0438\u0433.<\/p>\n<p>  \u041d\u0443\u0436\u043d\u043e \u0447\u0442\u043e-\u0442\u043e \u0434\u0440\u0443\u0433\u043e\u0435.<\/p>\n<p>  \u0420\u0435\u0437\u044e\u043c\u0438\u0440\u0443\u0435\u043c \u0440\u043e\u0443\u0442\u0438\u043d\u0433 \u0432 SF2:<\/p>\n<ul>\n<li>\u043e\u043f\u0440\u0435\u0434\u0435\u043b\u044f\u0435\u0442\u0441\u044f, \u043a\u0430\u043a\u043e\u0439 \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440 \u043e\u0431\u0441\u043b\u0443\u0436\u0438\u0432\u0430\u0435\u0442 \u0437\u0430\u043f\u0440\u043e\u0441<\/li>\n<li>\u043f\u0430\u0440\u0441\u044f\u0442\u0441\u044f \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u044b URL<\/li>\n<li>\u0435\u0441\u043b\u0438 \u043d\u0438\u0447\u0435\u0433\u043e \u043d\u0435 \u043f\u043e\u043b\u0443\u0447\u0438\u043b\u043e\u0441\u044c, \u043f\u043e\u0432\u0435\u0434\u0435\u043d\u0438\u0435 \u043f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e \u043e\u0441\u043d\u043e\u0432\u044b\u0432\u0430\u0435\u0442\u0441\u044f \u043d\u0430 \u0437\u0430\u0440\u0430\u043d\u0435\u0435 \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u043e\u043c \u043d\u0430\u0431\u043e\u0440\u0435 \u0440\u043e\u0443\u0442\u043e\u0432\n<ul>\n<li>\u043b\u0438\u0431\u043e \u0438\u0437 \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u0438 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f<\/li>\n<li>\u043b\u0438\u0431\u043e \u0438\u0437 \u0431\u0430\u043d\u0434\u043b\u043e\u0432<\/li>\n<\/ul>\n<p>  <\/li>\n<li>\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u0438 \u0440\u0435\u0434\u0430\u043a\u0442\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0440\u043e\u0443\u0442\u044b \u043d\u0435 \u043c\u043e\u0433\u0443\u0442<\/li>\n<li>\u043d\u0435 \u043c\u0430\u0441\u0448\u0442\u0430\u0431\u0438\u0440\u0443\u0435\u0442\u0441\u044f \u0434\u043e \u043e\u0447\u0435\u043d\u044c \u0431\u043e\u043b\u044c\u0448\u043e\u0433\u043e \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u0430 \u0440\u043e\u0443\u0442\u043e\u0432<\/li>\n<li>\u0432 CMS <em>\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c<\/em> \u0441\u0430\u043c \u0445\u043e\u0447\u0435\u0442 \u0440\u0435\u0448\u0430\u0442\u044c, \u0447\u0442\u043e \u043f\u043e \u043a\u0430\u043a\u043e\u043c\u0443 \u0430\u0434\u0440\u0435\u0441\u0443 \u0434\u043e\u043b\u0436\u043d\u043e \u043b\u0435\u0436\u0430\u0442\u044c.<\/li>\n<\/ul>\n<p>  <\/p>\n<h5>\u041a\u043e\u043d\u0446\u0435\u043f\u0446\u0438\u044f \u043c\u0430\u0440\u0448\u0440\u0443\u0442\u0438\u0437\u0430\u0446\u0438\u0438 \u0432 Symfony CMF<\/h5>\n<p>  \u041e\u0442 \u043f\u0440\u0435\u043a\u0440\u0430\u0441\u043d\u043e\u0433\u043e \u0438 \u043c\u043e\u0449\u043d\u043e\u0433\u043e, \u043d\u043e \u043d\u0435\u0443\u0434\u043e\u0431\u043d\u043e\u0433\u043e \u0432 \u0441\u043b\u0443\u0447\u0430\u0435 \u0441 CMS \u0440\u043e\u0443\u0442\u0435\u0440\u0430 Symfony 2 \u043f\u0440\u0438\u0448\u043b\u043e\u0441\u044c \u043e\u0442\u043a\u0430\u0437\u0430\u0442\u044c\u0441\u044f \u0432 \u043f\u043e\u043b\u044c\u0437\u0443 \u043d\u043e\u0432\u043e\u0439 \u043a\u043e\u043d\u0446\u0435\u043f\u0446\u0438\u0438:<\/p>\n<ul>\n<li>\u043d\u0443\u0436\u043d\u043e \u043e\u0442\u0434\u0435\u043b\u044f\u0442\u044c \u0434\u0435\u0440\u0435\u0432\u043e \u043a\u043e\u043d\u0442\u0435\u043d\u0442\u0430 \u043e\u0442 \u043d\u0430\u0432\u0438\u0433\u0430\u0446\u0438\u043e\u043d\u043d\u043e\u0433\u043e \u0434\u0435\u0440\u0435\u0432\u0430<\/li>\n<li>\u043d\u0430\u0432\u0438\u0433\u0430\u0446\u0438\u043e\u043d\u043d\u043e\u0435 \u0434\u0435\u0440\u0435\u0432\u043e \u0441\u043e\u0441\u0442\u043e\u0438\u0442 \u0438\u0437 <em>\u0441\u0441\u044b\u043b\u043e\u043a<\/em> \u043d\u0430 \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u044b \u0434\u0435\u0440\u0435\u0432\u0430 \u043a\u043e\u043d\u0442\u0435\u043d\u0442\u0430. \u0417\u0430 \u0441\u0447\u0435\u0442 \u044d\u0442\u043e\u0433\u043e \u043b\u0435\u0433\u043a\u043e \u0440\u0435\u0430\u043b\u0438\u0437\u0443\u044e\u0442\u0441\u044f:\n<ul>\n<li>\u043c\u043d\u043e\u0433\u043e\u0441\u0430\u0439\u0442\u043e\u0432\u043e\u0441\u0442\u044c (\u043d\u0430\u0441\u0442\u043e\u043b\u044c\u043d\u0430\u044f, \u043f\u043b\u0430\u043d\u0448\u0435\u0442\u043d\u0430\u044f, \u043c\u043e\u0431\u0438\u043b\u044c\u043d\u044b\u0435 \u0432\u0435\u0440\u0441\u0438\u0438)<\/li>\n<li>\u043c\u0443\u043b\u044c\u0442\u0438\u044f\u0437\u044b\u0447\u043d\u043e\u0441\u0442\u044c<\/li>\n<\/ul>\n<p>  <\/li>\n<li>\u043f\u0435\u0440\u0435\u0431\u043e\u0442\u043a\u0430 \u043d\u0430\u0432\u0438\u0433\u0430\u0446\u0438\u0438 \u0442\u0440\u0435\u0431\u0443\u0435\u0442 \u043a\u043b\u043e\u043d\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u043d\u0430\u0432\u0438\u0433\u0430\u0446\u0438\u043e\u043d\u043d\u043e\u0433\u043e \u0434\u0435\u0440\u0435\u0432\u0430<\/li>\n<li>\u043f\u043e \u0433\u043e\u0442\u043e\u0432\u043d\u043e\u0441\u0442\u0438 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442 \u0432\u043b\u0438\u0432\u0430\u0435\u0442\u0441\u044f \u043e\u0431\u0440\u0430\u0442\u043d\u043e<\/li>\n<\/ul>\n<p>  \u0421\u0440\u0430\u0437\u0443 \u043d\u0430 \u0443\u043c \u043f\u0440\u0438\u0445\u043e\u0434\u0438\u0442 \u0440\u0435\u0448\u0435\u043d\u0438\u0435 \u0432 \u043b\u043e\u0431: \u0441\u043e\u0437\u0434\u0430\u0435\u043c \u043c\u0430\u0440\u0448\u0440\u0443\u0442 \u043f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e (<code>\/{url}<\/code> \u0441 \u043e\u0431\u044f\u0437\u0430\u0442\u0435\u043b\u044c\u043d\u044b\u043c \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u043e\u043c <code>url:&nbsp;.*<\/code>), \u043e\u0434\u0438\u043d \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440 \u0434\u043b\u044f \u0432\u0441\u0435\u0445 \u0437\u0430\u043f\u0440\u043e\u0441\u043e\u0432 \u0438 \u0432 \u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u0438 \u043e\u0442 \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u043c\u043e\u0433\u043e \u043f\u0435\u0440\u0435\u043d\u0430\u043f\u0440\u0430\u0432\u043b\u044f\u0435\u043c \u0437\u0430\u043f\u0440\u043e\u0441 \u0432 \u0434\u0440\u0443\u0433\u0438\u0435 \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440\u044b. \u041d\u043e \u043f\u0440\u0438 \u044d\u0442\u043e\u043c \u043d\u0438\u043a\u0442\u043e \u043d\u0435 \u043e\u0442\u043c\u0435\u043d\u044f\u0435\u0442 \u043a\u043e\u043d\u0444\u043b\u0438\u043a\u0442\u043e\u0432 \u0441 \u0434\u0440\u0443\u0433\u0438\u043c\u0438 \u0440\u043e\u0443\u0442\u0430\u043c\u0438.<\/p>\n<pre><code>navigation:     pattern: &quot;\/{url}&quot;     defaults: { _controller: service.controller:indexAction }     requirements:         url: .* <\/code><\/pre>\n<p>  \u0417\u0432\u0443\u0447\u0438\u0442 \u043f\u043e-\u043f\u0440\u0435\u0436\u043d\u0435\u043c\u0443 \u043d\u0435 \u043e\u0447\u0435\u043d\u044c.<\/p>\n<p>  \u0420\u0435\u0448\u0435\u043d\u0438\u0435 \u043f\u043e\u043b\u0443\u0447\u0448\u0435 \u043f\u0440\u0435\u0434\u043e\u0441\u0442\u0430\u0432\u043b\u044f\u043b (\u043f\u043e\u043a\u0430 \u0435\u0433\u043e \u043d\u0435 \u043f\u043e\u043c\u0435\u0442\u0438\u043b\u0438 \u043a\u0430\u043a \u0443\u0441\u0442\u0430\u0440\u0435\u0432\u0448\u0438\u0439 \u0441\u043e \u0432\u0440\u0435\u043c\u0435\u043d Symfony 2.1) <code>DoctrineRouter<\/code>. \u041e\u043d \u0443\u0436\u0435 \u0433\u043e\u0440\u0430\u0437\u0434\u043e \u0433\u0438\u0431\u0447\u0435, \u043f\u043e\u0442\u043e\u043c\u0443 \u0447\u0442\u043e \u0438\u0441\u043a\u0430\u043b \u043c\u0430\u0440\u0448\u0440\u0443\u0442\u044b \u043f\u043e URL \u0432 \u0431\u0430\u0437\u0435 \u0434\u0430\u043d\u043d\u044b\u0445, \u043f\u0440\u0438 \u044d\u0442\u043e\u043c \u0431\u044b\u043b\u0430 \u0433\u043e\u0442\u043e\u0432\u0430 \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044f \u0434\u043b\u044f \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u043e\u0432 \u0447\u0435\u0440\u0435\u0437 PHPCR-ODM, \u0430 \u0435\u0449\u0435 \u043c\u043e\u0436\u043d\u043e \u043f\u0440\u0438\u0434\u0435\u043b\u0430\u0442\u044c \u043b\u044e\u0431\u0443\u044e \u0441\u0432\u043e\u044e. \u041c\u0430\u0440\u0448\u0440\u0443\u0442 \u043f\u043e \u0436\u0435\u043b\u0430\u043d\u0438\u044e \u044f\u0432\u043d\u043e \u0443\u043a\u0430\u0437\u044b\u0432\u0430\u043b \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440, \u0432 \u043f\u0440\u043e\u0442\u0438\u0432\u043d\u043e\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043b\u0441\u044f <code>ControllerResolver<\/code>, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043f\u044b\u0442\u0430\u043b\u0441\u044f \u0441\u0430\u043c \u0440\u0435\u0448\u0438\u0442\u044c, \u043a\u0430\u043a\u043e\u0439 \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440 \u0431\u0443\u0434\u0435\u0442 \u043e\u0431\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u0442\u044c \u0437\u0430\u043f\u0440\u043e\u0441. \u0411\u044b\u043b\u0438 \u0438 \u0432\u0441\u0442\u0440\u043e\u0435\u043d\u043d\u044b\u0435 \u0440\u0430\u0441\u043f\u043e\u0437\u043d\u0430\u0432\u0430\u0442\u0435\u043b\u0438:<\/p>\n<ul>\n<li>\u043f\u0440\u0438\u0432\u044f\u0437\u043a\u0430 \u0443\u0437\u043b\u043e\u0432 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u043d\u043e\u0433\u043e \u0442\u0438\u043f\u0430 \u043a \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440\u0443<\/li>\n<li>\u043f\u0440\u0438\u0432\u044f\u0437\u043a\u0430 \u0443\u0437\u043b\u043e\u0432 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u043d\u043e\u0433\u043e \u0442\u0438\u043f\u0430 \u043a \u0448\u0430\u0431\u043b\u043e\u043d\u0443 \u0438 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435 \u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043d\u043e\u0433\u043e (generic) \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440\u0430<\/li>\n<\/ul>\n<p>  \u0414\u043e \u043a\u0443\u0447\u0438 \u2014 \u043f\u0435\u0440\u0435\u0430\u0434\u0440\u0435\u0441\u0430\u0446\u0438\u044f \u043c\u0430\u0440\u0448\u0440\u0443\u0442\u043e\u0432 (\u043d\u0430 \u0434\u0440\u0443\u0433\u0438\u0435 \u0440\u043e\u0443\u0442\u044b \u0438\u043b\u0438 \u0430\u0431\u0441\u043e\u043b\u044e\u0442\u043d\u044b\u0435 URL). <\/p>\n<p>  \u041d\u0430 \u0434\u0430\u043d\u043d\u044b\u0439 \u043c\u043e\u043c\u0435\u043d\u0442 \u0434\u043b\u044f \u0440\u0435\u0448\u0435\u043d\u0438\u044f \u0432\u0441\u0435\u0445 \u043f\u0440\u043e\u0431\u043b\u0435\u043c \u0441 \u0440\u043e\u0443\u0442\u0438\u043d\u0433\u043e\u043c \u0432 Symfony CMF \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e\u0442\u0441\u044f \u0434\u0432\u0430 \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u0430 \u2014 <code>ChainRouter<\/code> \u0438 <code>DynamicRouter<\/code>. \u041f\u0435\u0440\u0432\u044b\u0439 \u0437\u0430\u043c\u0435\u043d\u044f\u0435\u0442 \u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043d\u044b\u0439 SF2-\u0440\u043e\u0443\u0442\u0435\u0440 \u0438, \u043d\u0435\u0441\u043c\u043e\u0442\u0440\u044f \u043d\u0430 \u043d\u0430\u0437\u0432\u0430\u043d\u0438\u0435, \u0440\u0430\u0431\u043e\u0442\u0443 \u0440\u043e\u0443\u0442\u0435\u0440\u0430 (\u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u0438\u0435 \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440\u0430 \u0434\u043b\u044f \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0438 \u0437\u0430\u043f\u0440\u043e\u0441\u0430) \u043d\u0430 \u0441\u0430\u043c\u043e\u043c \u0434\u0435\u043b\u0435 \u043d\u0435 \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0435\u0442. \u0412\u043c\u0435\u0441\u0442\u043e \u044d\u0442\u043e\u0433\u043e \u043e\u043d \u0434\u0430\u0435\u0442 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u044c \u0434\u043e\u0431\u0430\u0432\u043b\u044f\u0442\u044c \u0441\u0432\u043e\u0438 \u0440\u043e\u0443\u0442\u0435\u0440\u044b \u0432 \u0441\u043f\u0438\u0441\u043e\u043a-\u0446\u0435\u043f\u043e\u0447\u043a\u0443. \u0412 \u0446\u0435\u043f\u043e\u0447\u043a\u0435 \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c \u0437\u0430\u043f\u0440\u043e\u0441 \u043f\u043e\u043f\u0440\u043e\u0431\u0443\u044e\u0442 \u0432\u0441\u0435 \u0441\u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0435 \u0440\u043e\u0443\u0442\u0435\u0440\u044b \u043f\u043e \u043e\u0447\u0435\u0440\u0435\u0434\u0438, \u0432 \u043f\u043e\u0440\u044f\u0434\u043a\u0435 \u043f\u0440\u0438\u043e\u0440\u0438\u0442\u0435\u0442\u0430. \u0421\u0435\u0440\u0432\u0438\u0441\u044b \u0440\u043e\u0443\u0442\u0435\u0440\u043e\u0432 \u0438\u0449\u0443\u0442\u0441\u044f \u043f\u043e \u0442\u0435\u0433\u0430\u043c.<\/p>\n<pre><code>cmf_routing:     chain:         routers_by_id:             # \u0432\u043a\u043b\u044e\u0447\u0430\u0435\u043c the DynamicRouter \u0441 \u043d\u0438\u0437\u043a\u0438\u043c \u043f\u0440\u0438\u043e\u0440\u0438\u0442\u0435\u0442\u043e\u043c             # \u0432 \u044d\u0442\u043e\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u043d\u0435\u0434\u0438\u043d\u0430\u043c\u0438\u0447\u0435\u0441\u043a\u0438\u0435 \u043c\u0430\u0440\u0448\u0440\u0443\u0442\u044b \u0441\u0440\u0430\u0431\u043e\u0442\u0430\u044e\u0442 \u0440\u0430\u043d\u044c\u0448\u0435             # \u0447\u0442\u043e\u0431\u044b \u043d\u0435 \u0434\u043e\u043f\u0443\u0441\u043a\u0430\u0442\u044c \u043b\u0438\u0448\u043d\u0435\u0433\u043e \u043f\u043e\u0445\u043e\u0434\u0430 \u0432 \u0431\u0430\u0437\u0443 \u0434\u0430\u043d\u043d\u044b\u0445             cmf_routing.dynamic_router: 20              # \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0430\u0435\u043c \u0441\u0432\u043e\u0439 \u0440\u043e\u0443\u0442\u0435\u0440             acme_core.my_router: 50                          # \u0434\u0435\u0444\u043e\u043b\u0442\u043d\u044b\u0439 \u0440\u043e\u0443\u0442\u0435\u0440 \u0432\u043a\u043b\u044e\u0447\u0430\u0435\u043c \u0441 \u0432\u044b\u0441\u043e\u043a\u0438\u043c \u043f\u0440\u0438\u043e\u0440\u0438\u0442\u0435\u0442\u043e\u043c             router.default: 100   services:     acme_core.my_router:         class: %my_namespace.my_router_class%         tags:             - { name: cmf_routing.router, priority: 300 } <\/code><\/pre>\n<p>  \u041d\u0443 \u0432\u043e\u0442, \u0443 \u043d\u0430\u0441 \u0435\u0441\u0442\u044c \u0431\u0435\u0441\u043a\u043e\u043d\u0435\u0447\u043d\u043e\u0435 \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u0434\u043e\u0441\u0442\u0443\u043f\u043d\u044b\u0445 \u0434\u043b\u044f \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u044f \u0440\u043e\u0443\u0442\u0435\u0440\u043e\u0432.<\/p>\n<p>  \u0422\u0435\u043f\u0435\u0440\u044c \u0432\u0441\u043f\u043e\u043c\u0438\u043d\u0430\u0435\u043c \u043f\u0440\u043e \u043f\u043e\u0438\u0441\u043a \u0440\u043e\u0443\u0442\u043e\u0432 \u0432 \u0431\u0430\u0437\u0435 \u0434\u0430\u043d\u043d\u044b\u0445 \u0438 <code>DynamicRouter<\/code>. \u0415\u0433\u043e \u0437\u0430\u0434\u0430\u0447\u0435\u0439 \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0437\u0430\u0433\u0440\u0443\u0437\u043a\u0430 \u043c\u0430\u0440\u0448\u0440\u0443\u0442\u043e\u0432 \u0438\u0437 <em>\u043f\u0440\u043e\u0432\u0430\u0439\u0434\u0435\u0440\u0430<\/em>, \u043f\u0440\u043e\u0432\u0430\u0439\u0434\u0435\u0440\u043e\u043c \u043c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c (\u0438 \u043a\u0430\u043a \u043f\u0440\u0430\u0432\u0438\u043b\u043e \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f) \u0431\u0430\u0437\u0430 \u0434\u0430\u043d\u043d\u044b\u0445. \u0412 \u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043d\u043e\u0439 \u043f\u043e\u0441\u0442\u0430\u0432\u043a\u0435 \u0435\u0441\u0442\u044c \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 \u043f\u0440\u043e\u0432\u0430\u0439\u0434\u0435\u0440\u043e\u0432 \u0434\u043b\u044f Doctrine PHPCR-ODM, Doctrine ORM \u0438 \u0440\u0430\u0437\u0443\u043c\u0435\u0435\u0442\u0441\u044f, \u043c\u043e\u0436\u043d\u043e \u0434\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u044c \u0441\u043f\u0438\u0441\u043e\u043a \u043f\u0440\u043e\u0432\u0430\u0439\u0434\u0435\u0440\u043e\u0432, \u0440\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u0432 <a href=\"https:\/\/github.com\/symfony-cmf\/Routing\/blob\/master\/RouteProviderInterface.php\">RouteProviderInterface<\/a>.<\/p>\n<p>  \u0427\u0442\u043e \u0434\u0435\u043b\u0430\u044e\u0442 \u043f\u0440\u043e\u0432\u0430\u0439\u0434\u0435\u0440\u044b? \u041f\u0440\u043e\u0432\u0430\u0439\u0434\u0435\u0440\u044b \u043f\u043e \u0437\u0430\u043f\u0440\u043e\u0441\u0443 \u0432\u044b\u0434\u0430\u044e\u0442 \u0443\u043f\u043e\u0440\u044f\u0434\u043e\u0447\u0435\u043d\u043d\u043e\u0435 \u043f\u043e\u0434\u043c\u043d\u043e\u0436\u0435\u0441\u0442\u0432\u043e \u043c\u0430\u0440\u0448\u0440\u0443\u0442\u043e\u0432-\u043a\u0430\u043d\u0434\u0438\u0434\u0430\u0442\u043e\u0432, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043c\u043e\u0433\u0443\u0442 \u043f\u043e\u0434\u043e\u0439\u0442\u0438 \u043f\u0440\u0438\u0448\u0435\u0434\u0448\u0435\u043c\u0443 \u0437\u0430\u043f\u0440\u043e\u0441\u0443, \u0430 <code>DynamicRouter<\/code> \u043f\u0440\u0438\u043d\u0438\u043c\u0430\u0435\u0442 \u043e\u043a\u043e\u043d\u0447\u0430\u0442\u0435\u043b\u044c\u043d\u043e\u0435 \u0440\u0435\u0448\u0435\u043d\u0438\u0435 \u0438 \u0441\u043e\u043f\u043e\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u0442 \u0437\u0430\u043f\u0440\u043e\u0441 \u0441 \u043a\u043e\u043d\u043a\u0440\u0435\u0442\u043d\u044b\u043c \u043e\u0431\u044a\u0435\u043a\u0442\u043e\u043c \u0442\u0438\u043f\u0430 <code>Route<\/code>.<\/p>\n<p>  <img decoding=\"async\" src=\"http:\/\/habrastorage.org\/getpro\/habr\/post_images\/54c\/835\/540\/54c835540eaaff5e02dd5ab8ab79fe83.png\" alt=\"\u0420\u043e\u0443\u0442\u0438\u043d\u0433 2.0\"\/><\/p>\n<p>  \u041c\u0430\u0440\u0448\u0440\u0443\u0442 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u044f\u0435\u0442, \u043a\u0430\u043a\u043e\u0439 \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440 \u0431\u0443\u0434\u0435\u0442 \u043e\u0431\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u0442\u044c \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u043d\u044b\u0439 \u0437\u0430\u043f\u0440\u043e\u0441. <code>DynamicRouter<\/code> \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u043c\u0435\u0442\u043e\u0434\u043e\u0432 \u0432 \u043f\u043e\u0440\u044f\u0434\u043a\u0435 \u0443\u0431\u044b\u0432\u0430\u043d\u0438\u044f \u043f\u0440\u0438\u043e\u0440\u0438\u0442\u0435\u0442\u0430: <\/p>\n<ul>\n<li>\u044f\u0432\u043d\u043e: <code>Route<\/code>-\u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442 \u0441\u0430\u043c \u0442\u043e\u0447\u043d\u043e \u043e\u0431\u044a\u044f\u0432\u043b\u044f\u0435\u0442 \u043a\u043e\u043d\u0435\u0447\u043d\u044b\u0439 \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440, \u0435\u0441\u043b\u0438 \u0442\u0430\u043a\u043e\u0432\u043e\u0439 \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u0442\u0441\u044f \u0438\u0437 \u0432\u044b\u0437\u043e\u0432\u0430 <code>getDefault('_controller')<\/code>.<\/li>\n<li>\u043f\u043e \u043f\u0441\u0435\u0432\u0434\u043e\u043d\u0438\u043c\u0443: \u043c\u0430\u0440\u0448\u0440\u0443\u0442 \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u0442\u0441\u044f \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 <code>getDefault('type')<\/code>, \u043a\u043e\u0442\u043e\u0440\u043e\u0435 \u0441\u043e\u043f\u043e\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0441 \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u0435\u0439 \u0438\u0437 <code>config.yml<\/code>  <\/li>\n<li>\u043f\u043e \u043a\u043b\u0430\u0441\u0441\u0443: <code>Route<\/code>-\u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442 \u0434\u043e\u043b\u0436\u0435\u043d \u0440\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u0442\u044c <code>RouteObjectInterface<\/code> \u0438 \u0432\u0435\u0440\u043d\u0443\u0442\u044c \u043e\u0431\u044a\u0435\u043a\u0442 \u0434\u043b\u044f <code>getContent()<\/code>. \u0412\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u043c\u044b\u0439 \u0442\u0438\u043f \u043a\u043b\u0430\u0441\u0441\u0430 \u043e\u043f\u044f\u0442\u044c \u0436\u0435 \u0441\u043e\u043f\u043e\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0441 \u043a\u043e\u043d\u0444\u0438\u0433\u043e\u043c<\/li>\n<li>\u043f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e: \u0431\u0443\u0434\u0435\u0442 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c\u0441\u044f \u0434\u0435\u0444\u043e\u043b\u0442\u043d\u044b\u0439 \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440, \u0435\u0441\u043b\u0438 \u0442\u0430\u043a\u043e\u0432\u043e\u0439 \u0443\u043a\u0430\u0437\u0430\u043d \u0441\u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0438\u0440\u043e\u0432\u0430\u043d<\/li>\n<\/ul>\n<p>  \u0410\u043d\u0430\u043b\u043e\u0433\u0438\u0447\u043d\u043e (\u044f\u0432\u043d\u043e \u0438\u043b\u0438 \u043f\u043e \u043a\u043b\u0430\u0441\u0441\u0443) \u043c\u0430\u0440\u0448\u0440\u0443\u0442 \u043c\u043e\u0436\u0435\u0442 \u0437\u0430\u0434\u0430\u0432\u0430\u0442\u044c \u0438 \u0448\u0430\u0431\u043b\u043e\u043d, \u0441 \u043a\u043e\u0442\u043e\u0440\u044b\u043c \u0434\u043e\u043b\u0436\u043d\u0430 \u0440\u0435\u043d\u0434\u0435\u0440\u0438\u0442\u044c\u0441\u044f \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u0430.<\/p>\n<p>  \u041f\u043e \u0436\u0435\u043b\u0430\u043d\u0438\u044e \u043f\u0440\u0438 \u043f\u043e\u043c\u043e\u0449\u0438 \u0432\u044b\u0448\u0435\u0443\u043f\u043e\u043c\u044f\u043d\u0443\u0442\u043e\u0433\u043e <code>RouteObjectInterface<\/code> \u043c\u043e\u0436\u043d\u043e \u043d\u0430\u0443\u0447\u0438\u0442\u044c \u043c\u0430\u0440\u0448\u0440\u0443\u0442 \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0442\u044c \u044d\u043a\u0437\u0435\u043c\u043b\u044f\u0440 \u043c\u043e\u0434\u0435\u043b\u0438, \u0430\u0441\u0441\u043e\u0446\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0439 \u0441 \u043d\u0438\u043c.<\/p>\n<p>  \u041f\u043e\u0434\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u044e\u0442\u0441\u044f \u0438 \u0440\u0435\u0434\u0438\u0440\u0435\u043a\u0442\u044b. \u0412\u043e\u043e\u0431\u0449\u0435 \u0435\u0441\u0442\u044c \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441 <code>RedirectRouteInterface<\/code>, \u043d\u043e \u0434\u043b\u044f PHPCR-ODM \u0433\u043e\u0442\u043e\u0432\u0430 \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044f \u0432 \u0432\u0438\u0434\u0435 \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0430 <code>RedirectRoute<\/code>. \u041e\u043d \u043c\u043e\u0436\u0435\u0442 \u043f\u0435\u0440\u0435\u043d\u0430\u043f\u0440\u0430\u0432\u043b\u044f\u0442\u044c \u043d\u0430 \u0430\u0431\u0441\u043e\u043b\u044e\u0442\u043d\u044b\u0439 URI \u0438 \u043d\u0430 \u0438\u043c\u0435\u043d\u043e\u0432\u0430\u043d\u043d\u044b\u0439 \u043c\u0430\u0448\u0440\u0443\u0442, \u0441\u0433\u0435\u043d\u0435\u0440\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0439 \u043b\u044e\u0431\u044b\u043c \u0440\u043e\u0443\u0442\u0435\u0440\u043e\u043c \u0432 \u0446\u0435\u043f\u043e\u0447\u043a\u0435.<\/p>\n<p>  \u0415\u0449\u0435 \u043e\u0434\u043d\u0430 \u0432\u0430\u0436\u043d\u0430\u044f \u0444\u0438\u0447\u0430, \u043e \u043a\u043e\u0442\u043e\u0440\u043e\u0439 \u043c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u043e \u0443\u0437\u043d\u0430\u0442\u044c \u0442\u0435\u043c, \u043a\u0442\u043e \u0441 Symfony \u043d\u0435 \u0440\u0430\u0431\u043e\u0442\u0430\u043b \u2014 \u044d\u0442\u043e \u0434\u0432\u0443\u043d\u0430\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u043d\u043e\u0441\u0442\u044c \u0440\u043e\u0443\u0442\u0435\u0440\u0430. \u041f\u043e\u043c\u0438\u043c\u043e \u0440\u0430\u0441\u043f\u043e\u0437\u043d\u0430\u0432\u0430\u043d\u0438\u044f \u043c\u0430\u0440\u0448\u0440\u0443\u0442\u043e\u0432 \u043d\u0430 \u043e\u0441\u043d\u043e\u0432\u0435 \u0437\u0430\u0434\u0430\u043d\u043d\u044b\u0445 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u043e\u0432, \u044d\u0442\u0438 \u043c\u0430\u0440\u0448\u0440\u0443\u0442\u044b \u043c\u043e\u0436\u043d\u043e \u0438 \u0433\u0435\u043d\u0435\u0440\u0438\u0440\u043e\u0432\u0430\u0442\u044c, \u043f\u0435\u0440\u0435\u0434\u0430\u0432\u0430\u044f \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u044b \u043a\u0430\u043a \u0430\u0440\u0433\u0443\u043c\u0435\u043d\u0442\u044b. \u0412 \u043e\u0442\u043b\u0438\u0447\u0438\u0435 \u043e\u0442 \u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043d\u043e\u0433\u043e \u0440\u043e\u0443\u0442\u0435\u0440\u0430 SF2, \u0432 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u0430 \u0434\u043b\u044f \u0444\u0443\u043d\u043a\u0446\u0438\u0438 <code>path()<\/code> \u043c\u043e\u0436\u043d\u043e \u043f\u0435\u0440\u0435\u0434\u0430\u0432\u0430\u0442\u044c \u043d\u0435 \u0442\u043e\u043b\u044c\u043a\u043e \u0437\u0430\u0434\u0430\u043d\u043d\u043e\u0435 \u0432 \u043a\u043e\u043d\u0444\u0438\u0433\u0435 \u0438\u043c\u044f \u043c\u0430\u0440\u0448\u0440\u0443\u0442\u0430, \u043d\u043e \u0438 \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044e <code>RouteObjectInterface<\/code>, <code>RouteReferrersInterface<\/code> (\u0442\u043e \u0435\u0441\u0442\u044c \u043e\u0431\u044a\u0435\u043a\u0442-\u043c\u0430\u0440\u0448\u0440\u0443\u0442), \u043b\u0438\u0431\u043e \u0441\u0441\u044b\u043b\u043a\u0443 \u043d\u0430 \u043e\u0431\u044a\u0435\u043a\u0442 \u0432 \u0440\u0435\u043f\u043e\u0437\u0438\u0442\u043e\u0440\u0438\u0438, \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044f \u0435\u0433\u043e content_id:<\/p>\n<pre><code>{# myRoute \u044d\u0442\u043e \u043e\u0431\u044a\u0435\u043a\u0442 \u043a\u043b\u0430\u0441\u0441\u0430 Symfony\\Component\\Routing\\Route #} &lt;a href=&quot;{{ path(myRoute) }}&quot;&gt;Read on&lt;\/a&gt;  {# \u0421\u043e\u0437\u0434\u0430\u0435\u0442 \u0441\u0441\u044b\u043b\u043a\u0443 \u043d\u0430 \/ \u0434\u043b\u044f \u044d\u0442\u043e\u0433\u043e \u0441\u0435\u0440\u0432\u0435\u0440\u0430 #} &lt;a href=&quot;{{ path('\/cms\/routes') }}&quot;&gt;Home&lt;\/a&gt;  {# myContent \u0440\u0435\u0430\u043b\u0438\u0437\u0443\u0435\u0442 RouteReferrersInterface #} &lt;a href=&quot;{{ path(myContent) }}&quot;&gt;Read on&lt;\/a&gt;  {# \u043f\u0435\u0440\u0435\u0434\u0430\u0435\u043c \u0441\u0441\u044b\u043b\u043a\u0443 \u043d\u0430 \u043e\u0431\u044a\u0435\u043a\u0442, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0440\u0435\u0430\u043b\u0438\u0437\u0443\u0435\u0442 ContentRepositoryInterface #} &lt;a href=&quot;{{ path(null, {'content_id': '\/cms\/content\/my-content'}) }}&quot;&gt;     Read on &lt;\/a&gt; <\/code><\/pre>\n<p>  \u0415\u0441\u043b\u0438 \u0434\u043b\u044f \u043e\u0434\u043d\u043e\u0433\u043e \u0438 \u0442\u043e\u0433\u043e \u0436\u0435 \u043c\u0430\u0442\u0435\u0440\u0438\u0430\u043b\u0430 \u043f\u043e\u0434\u0445\u043e\u0434\u0438\u0442 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u043c\u0430\u0440\u0448\u0440\u0443\u0442\u043e\u0432, \u043f\u0440\u0435\u0434\u043f\u043e\u0447\u0442\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u043c \u0431\u0443\u0434\u0435\u0442 \u0441\u0447\u0438\u0442\u0430\u0442\u044c\u0441\u044f \u0442\u043e\u0442, \u043b\u043e\u043a\u0430\u043b\u044c \u043a\u043e\u0442\u043e\u0440\u043e\u0433\u043e \u0441\u043e\u0432\u043f\u0430\u0434\u0430\u0435\u0442 \u0441 \u043b\u043e\u043a\u0430\u043b\u044c\u044e \u0437\u0430\u043f\u0440\u043e\u0441\u0430.<\/p>\n<p>  \u041d\u0430\u043f\u043e\u0441\u043b\u0435\u0434\u043e\u043a \u0432\u0435\u0440\u043d\u0435\u043c\u0441\u044f \u043a \u043d\u0430\u043f\u0438\u0441\u0430\u043d\u043d\u043e\u043c\u0443 \u0447\u0443\u0442\u044c \u0440\u0430\u043d\u0435\u0435, \u0440\u0430\u0437\u0434\u0435\u043b\u0435\u043d\u0438\u0435 \u043d\u0430\u0432\u0438\u0433\u0430\u0446\u0438\u043e\u043d\u043d\u043e\u0433\u043e \u0434\u0435\u0440\u0435\u0432\u0430 \u0438 \u0434\u0435\u0440\u0435\u0432\u0430 \u043a\u043e\u043d\u0442\u0435\u043d\u0442\u0430. \u0412\u0437\u0433\u043b\u044f\u043d\u0438\u0442\u0435 \u043d\u0430 \u0441\u0445\u0435\u043c\u0443, \u0440\u0430\u0437\u0432\u0435\u0442\u0432\u043b\u0435\u043d\u043d\u0430\u044f \u043d\u0430\u0432\u0438\u0433\u0430\u0446\u0438\u044f \u0441\u043e\u0433\u043b\u0430\u0441\u043d\u043e \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u043d\u044b\u043c \u043f\u0440\u0430\u0432\u0438\u043b\u0430\u043c \u043f\u0435\u0440\u0435\u0434\u0430\u0435\u0442 \u0443\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u0435 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u044b\u043c \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440\u0430\u043c \u0438 \u0442\u043e\u043b\u044c\u043a\u043e \u043f\u043e\u0441\u043b\u0435 \u044d\u0442\u043e\u0433\u043e \u0437\u0430\u043f\u0440\u0430\u0448\u0438\u0432\u0430\u0435\u0442 \u0434\u0430\u043d\u043d\u044b\u0435:<\/p>\n<p>  <img decoding=\"async\" src=\"http:\/\/habr.habrastorage.org\/post_images\/f99\/6fe\/524\/f996fe5244877ff68ae56de5298e27aa.png\" alt=\"\u0421\u0432\u044f\u0437\u044c \u043c\u0435\u0436\u0434\u0443 \u0440\u043e\u0443\u0442\u0438\u043d\u0433\u043e\u043c \u0438 \u043a\u043e\u043d\u0442\u0435\u043d\u0442\u043e\u043c\" title=\"\u0421\u0432\u044f\u0437\u044c \u043c\u0435\u0436\u0434\u0443 \u0440\u043e\u0443\u0442\u0438\u043d\u0433\u043e\u043c \u0438 \u043a\u043e\u043d\u0442\u0435\u043d\u0442\u043e\u043c\"\/><\/p>\n<p>  \u0412 \u0430\u0434\u043c\u0438\u043d\u043a\u0435 \u0434\u043b\u044f \u043c\u0430\u0440\u0448\u0440\u0443\u0442\u043e\u0432 \u043c\u043e\u0436\u043d\u043e \u0437\u0430\u0434\u0430\u0442\u044c \u0444\u043e\u0440\u043c\u0430\u0442 (\u0447\u0442\u043e\u0431 URL \u0437\u0430\u043a\u0430\u043d\u0447\u0438\u0432\u0430\u043b\u0441\u044f \u043d\u0430 <code>.html<\/code>, \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440) \u0438 \u043a\u043e\u043d\u0435\u0447\u043d\u044b\u0439 \u0441\u043b\u044d\u0448.<\/p>\n<p>  \u0412\u0434\u043e\u0431\u0430\u0432\u043e\u043a \u043a\u043e \u0432\u0441\u0435\u043c\u0443 \u043f\u043e\u043a\u0430 \u044d\u043a\u0441\u043f\u0435\u0440\u0438\u043c\u0435\u043d\u0442\u0430\u043b\u044c\u043d\u044b\u0439 <a href=\"http:\/\/symfony.com\/doc\/current\/cmf\/bundles\/routing_auto\/introduction.html\">RoutingAutoBundle<\/a> \u043f\u0440\u0435\u0434\u043b\u0430\u0433\u0430\u0435\u0442 \u043d\u0430 \u043e\u0441\u043d\u043e\u0432\u0435 \u0437\u0430\u0440\u0430\u043d\u0435\u0435 \u0437\u0430\u0433\u043e\u0442\u043e\u0432\u043b\u0435\u043d\u043d\u044b\u0445 \u043f\u0440\u0430\u0432\u0438\u043b \u0433\u0435\u043d\u0435\u0440\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u043c\u0430\u0440\u0448\u0440\u0443\u0442\u044b \u0434\u043b\u044f \u043a\u043e\u043d\u0442\u0435\u043d\u0442\u0430. \u0417\u0430 \u0441\u0447\u0435\u0442 \u0433\u0435\u043d\u0435\u0440\u0430\u0446\u0438\u0438 \u0430\u0432\u0442\u043e\u043c\u0430\u0440\u0448\u0440\u0443\u0442\u043e\u0432 \u0434\u043e\u0441\u0442\u0438\u0433\u0430\u0435\u0442\u0441\u044f \u0433\u0438\u0431\u043a\u043e\u0441\u0442\u044c: \u0434\u043b\u044f \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u044b\u0445 \u043c\u0430\u0440\u0448\u0440\u0443\u0442\u043e\u0432 \u043b\u0435\u0433\u043a\u043e \u043f\u0435\u0440\u0435\u0432\u043e\u0434\u0438\u0442\u044c \u043f\u0441\u0435\u0432\u0434\u043e\u043d\u0438\u043c\u044b, \u0433\u0435\u043d\u0435\u0440\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u043a\u0430\u0440\u0442\u0443 \u0441\u0430\u0439\u0442\u0430 \u0438 \u043c\u0435\u043d\u044f\u0442\u044c \u043a\u043b\u0430\u0441\u0441 \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u043e\u0432, \u043d\u0430 \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043c\u0430\u0440\u0448\u0440\u0443\u0442 \u043c\u043e\u0436\u0435\u0442 \u0441\u0441\u044b\u043b\u0430\u0442\u044c\u0441\u044f. \u041d\u043e \u0432 \u0431\u043e\u043b\u044c\u0448\u0438\u043d\u0441\u0442\u0432\u0435 \u0441\u043b\u0443\u0447\u0430\u0435 \u0434\u043b\u044f \u043f\u0440\u043e\u0441\u0442\u044b\u0445 CMS \u044d\u0442\u043e\u0442 \u0431\u0430\u043d\u0434\u043b \u043c\u043e\u0436\u0435\u0442 \u0438 \u043d\u0435 \u043f\u043e\u043d\u0430\u0434\u043e\u0431\u0438\u0442\u044c\u0441\u044f.<\/p>\n<p>  \u041d\u0430 \u044d\u0442\u043e\u043c \u0441 \u0433\u0438\u0431\u043a\u043e\u0439 \u043c\u0430\u0440\u0448\u0440\u0443\u0442\u0438\u0437\u0430\u0446\u0438\u0435\u0439 \u0437\u0430\u043a\u043e\u043d\u0447\u0438\u043c.<\/p>\n<h4>\u041c\u0435\u043d\u044e<\/h4>\n<p>  \u041d\u0438 \u043e\u0434\u043d\u0430 CMS \u043d\u0435 \u043e\u0431\u0445\u043e\u0434\u0438\u0442\u0441\u044f \u0431\u0435\u0437 \u0441\u0438\u0441\u0442\u0435\u043c\u044b \u043c\u0435\u043d\u044e. \u0425\u043e\u0442\u044f \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0430 \u043c\u0435\u043d\u044e \u043e\u0431\u044b\u0447\u043d\u043e \u043f\u043e\u0432\u0442\u043e\u0440\u044f\u0435\u0442 \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0443 \u043a\u043e\u043d\u0442\u0435\u043d\u0442\u0430, \u0435\u043c\u0443 \u043c\u043e\u0436\u0435\u0442 \u043f\u043e\u0442\u0440\u0435\u0431\u043e\u0432\u0430\u0442\u044c\u0441\u044f \u0441\u043e\u0431\u0441\u0442\u0432\u0435\u043d\u043d\u0430\u044f \u043b\u043e\u0433\u0438\u043a\u0430, \u043d\u0435 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u043d\u0430\u044f \u043a\u043e\u043d\u0442\u0435\u043d\u0442\u043e\u043c \u0438\u043b\u0438 \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u044e\u0449\u0430\u044f \u0432 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u0438\u0445 \u043a\u043e\u043d\u0442\u0435\u043a\u0441\u0442\u0430\u0445 \u0441 \u0440\u0430\u0437\u043d\u044b\u043c\u0438 \u043e\u043f\u0446\u0438\u044f\u043c\u0438:<\/p>\n<p>  <img decoding=\"async\" src=\"http:\/\/habr.habrastorage.org\/post_images\/db2\/dd7\/680\/db2dd76807180011afe2f62349f7a9de.png\" alt=\"\u041f\u0440\u0438\u043c\u0435\u0440 \u043c\u0435\u043d\u044e\" title=\"\u041f\u0440\u0438\u043c\u0435\u0440 \u043c\u0435\u043d\u044e\"\/><\/p>\n<p>  \u0412 \u0441\u043e\u0441\u0442\u0430\u0432 Symfony CMF \u0432\u0445\u043e\u0434\u0438\u0442 MenuBundle, \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442, \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u044e\u0449\u0438\u0439 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u044f\u0442\u044c \u0441\u043e\u0431\u0441\u0442\u0432\u0435\u043d\u043d\u044b\u0435 \u043c\u0435\u043d\u044e. \u041e\u043d \u0440\u0430\u0441\u0448\u0438\u0440\u044f\u0435\u0442 \u0438\u0437\u0432\u0435\u0441\u0442\u043d\u044b\u0439 <a href=\"https:\/\/github.com\/KnpLabs\/KnpMenuBundle\">KnpMenuBundle<\/a>, \u0434\u043e\u043f\u043e\u043b\u043d\u044f\u044f \u0435\u0433\u043e \u0438\u0435\u0440\u0430\u0440\u0445\u0438\u0447\u0435\u0441\u043a\u0438\u043c\u0438 \u0438 \u043c\u0443\u043b\u044c\u0442\u0438\u044f\u0437\u044b\u0447\u043d\u044b\u043c\u0438 \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u0430\u043c\u0438 \u0438 \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u0430\u043c\u0438 \u0434\u043b\u044f \u0438\u0445 \u0437\u0430\u043f\u0438\u0441\u0438 \u0432 \u0432\u044b\u0431\u0440\u0430\u043d\u043d\u043e\u0435 \u0445\u0440\u0430\u043d\u0438\u043b\u0438\u0449\u0435.<\/p>\n<p>  \u041f\u0440\u0438 \u0432\u044b\u0432\u043e\u0434\u0435 \u043c\u0435\u043d\u044e MenuBundle \u043e\u043f\u0438\u0440\u0430\u0435\u0442\u0441\u044f \u043d\u0430 \u0434\u0435\u0444\u043e\u043b\u0442\u043d\u044b\u0435 \u0434\u043b\u044f KnpMenuBundle \u0440\u0435\u043d\u0434\u0435\u0440\u0435\u0440\u044b \u0438 \u0445\u0435\u043b\u043f\u0435\u0440\u044b. <a href=\"https:\/\/github.com\/KnpLabs\/KnpMenuBundle\/blob\/master\/Resources\/doc\/index.md\">\u041f\u043e\u043b\u043d\u0443\u044e \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0430\u0446\u0438\u044e<\/a> \u043f\u043e\u0447\u0438\u0442\u0430\u0442\u044c \u0440\u0435\u043a\u043e\u043c\u0435\u043d\u0434\u0443\u0435\u0442\u0441\u044f, \u043d\u043e \u0432\u043e\u043e\u0431\u0449\u0435 \u0432 \u0441\u0430\u043c\u043e\u043c \u043f\u0440\u043e\u0441\u0442\u0435\u0439\u0448\u0435\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u0432\u044b\u0432\u043e\u0434 \u0432\u044b\u0433\u043b\u044f\u0434\u0438\u0442 \u0442\u0430\u043a:<\/p>\n<pre><code>{{ knp_menu_render('simple') }}<\/code><\/pre>\n<p>  \u041f\u0435\u0440\u0435\u0434\u0430\u043d\u043d\u043e\u0435 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 \u0438\u043c\u044f \u043c\u0435\u043d\u044e \u0432 \u0441\u0432\u043e\u044e \u043e\u0447\u0435\u0440\u0435\u0434\u044c \u0431\u0443\u0434\u0435\u0442 \u043f\u0435\u0440\u0435\u0434\u0430\u043d\u043e \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 <code>MenuProviderInterface<\/code>, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u0431\u0443\u0434\u0435\u0442 \u0440\u0435\u0448\u0430\u0442\u044c, \u043a\u0430\u043a\u043e\u0435 \u043c\u0435\u043d\u044e \u043d\u0443\u0436\u043d\u043e \u043f\u043e\u043a\u0430\u0437\u0430\u0442\u044c.<\/p>\n<p>  \u0412 \u043e\u0441\u043d\u043e\u0432\u0435 \u0431\u0430\u043d\u0434\u043b\u0430 \u043b\u0435\u0436\u0438\u0442 <code>PhpcrMenuProvider<\/code>, \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044f <code>MenuProviderInterface<\/code>, \u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0435\u043d\u043d\u0430\u044f \u0437\u0430 \u0434\u0438\u043d\u0430\u043c\u0438\u0447\u0435\u0441\u043a\u0443\u044e \u0437\u0430\u0433\u0440\u0443\u0437\u043a\u0443 \u043c\u0435\u043d\u044e \u0438\u0437 PHPCR-\u0445\u0440\u0430\u043d\u0438\u043b\u0438\u0449\u0430. \u041f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e \u0441\u0435\u0440\u0432\u0438\u0441 \u043f\u0440\u043e\u0432\u0430\u0439\u0434\u0435\u0440\u0430 \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0438\u0440\u0443\u0435\u0442\u0441\u044f \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u043e\u043c <code>menu_basepath<\/code>, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0443\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u0442, \u0433\u0434\u0435 \u0438\u0441\u043a\u0430\u0442\u044c \u043c\u0435\u043d\u044e \u0432 PHPCR-\u0434\u0435\u0440\u0435\u0432\u0435. \u041f\u0440\u0438 \u0440\u0435\u043d\u0434\u0435\u0440\u0438\u043d\u0433\u0435 \u043c\u0435\u043d\u044e \u043f\u0435\u0440\u0435\u0434\u0430\u0435\u0442\u0441\u044f \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440 <code>name<\/code>, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0434\u043e\u043b\u0436\u0435\u043d \u0431\u044b\u0442\u044c \u043f\u0440\u044f\u043c\u044b\u043c \u043f\u043e\u0442\u043e\u043c\u043a\u043e\u043c \u0443\u043a\u0430\u0437\u0430\u043d\u043d\u043e\u0433\u043e \u0431\u0430\u0437\u043e\u0432\u043e\u0433\u043e \u043f\u0443\u0442\u0438. \u042d\u0442\u043e \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 <code>PhpcrMenuProvider<\/code> \u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c \u0441 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u0438\u043c\u0438 \u0438\u0435\u0440\u0430\u0440\u0445\u0438\u044f\u043c\u0438 \u043c\u0435\u043d\u044e, \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044f \u0435\u0434\u0438\u043d\u044b\u0439 \u043c\u0435\u0445\u0430\u043d\u0438\u0437\u043c \u0445\u0440\u0430\u043d\u0435\u043d\u0438\u044f. \u0412\u0441\u043f\u043e\u043c\u0438\u043d\u0430\u044f \u0443\u043a\u0430\u0437\u0430\u043d\u043d\u044b\u0439 \u0432\u044b\u0448\u0435 \u043f\u0440\u0438\u043c\u0435\u0440 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u044f, \u043c\u0435\u043d\u044e <code>simple<\/code> \u0434\u043e\u043b\u0436\u043d\u043e \u043d\u0430\u0445\u043e\u0434\u0438\u0442\u044c\u0441\u044f \u043f\u043e \u0430\u0434\u0440\u0435\u0441\u0443 <code>\/cms\/menu\/simple<\/code>, \u0435\u0441\u043b\u0438 \u0432 \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u0438 \u0443\u043a\u0430\u0437\u0430\u043d\u043e \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0435\u0435:<\/p>\n<pre><code>cmf_menu:     menu_basepath: \/cms\/menu <\/code><\/pre>\n<p>  \u0412 \u0431\u0430\u043d\u0434\u043b\u0435 \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u0435\u0442\u0441\u044f \u0434\u0432\u0430 \u0442\u0438\u043f\u0430 \u0443\u0437\u043b\u043e\u0432: <code>MenuNode<\/code> \u0438 <code>MultilangMenuNode<\/code>. <code>MenuNode<\/code> \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u0442 \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044e \u043e\u0431 \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u043e\u043c \u043f\u0443\u043d\u043a\u0442\u0435 \u043c\u0435\u043d\u044e: <code>label<\/code>, <code>uri<\/code>, \u0441\u043f\u0438\u0441\u043e\u043a \u0434\u043e\u0447\u0435\u0440\u043d\u0438\u0445 \u043f\u0443\u043d\u043a\u0442\u043e\u0432 <code>children<\/code>, \u0441\u0441\u044b\u043b\u043a\u0443 \u043d\u0430 \u043c\u0430\u0440\u0448\u0443\u0442, \u0441\u0432\u044f\u0437\u0430\u043d\u043d\u044b\u0439 Content-\u044d\u043b\u0435\u043c\u0435\u043d\u0442, \u043f\u043b\u044e\u0441 \u0441\u043f\u0438\u0441\u043e\u043a \u0430\u0442\u0440\u0438\u0431\u0443\u0442\u043e\u0432 <code>attributes<\/code>, \u0431\u043b\u0430\u0433\u043e\u0434\u0430\u0440\u044f \u043a\u043e\u0442\u043e\u0440\u043e\u043c\u0443 \u043c\u043e\u0436\u043d\u043e \u043d\u0430\u0441\u0442\u0440\u0430\u0438\u0432\u0430\u0442\u044c \u0432\u044b\u0432\u043e\u0434 \u043c\u0435\u043d\u044e.<\/p>\n<p>  \u041a\u043b\u0430\u0441\u0441 <code>MultilangMenuNode<\/code> \u0440\u0430\u0441\u0448\u0438\u0440\u044f\u0435\u0442 <code>MenuNode<\/code> \u0434\u043b\u044f \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u043a\u0438 \u043c\u0443\u043b\u044c\u0442\u0438\u044f\u0437\u044b\u0447\u043d\u043e\u0441\u0442\u0438: \u0434\u043e\u0431\u0430\u0432\u043b\u0435\u043d\u043e \u043f\u043e\u043b\u0435 <code>locale<\/code> \u0434\u043b\u044f \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u0438\u044f \u043f\u0435\u0440\u0435\u0432\u043e\u0434\u0430, \u043a \u043a\u043e\u0442\u043e\u0440\u043e\u043c\u0443 \u043f\u0440\u0438\u043d\u0430\u0434\u043b\u0435\u0436\u0438\u0442 \u043f\u0443\u043d\u043a\u0442 \u0438 <code>label<\/code> \u0441 <code>uri<\/code>, \u043f\u043e\u043c\u0435\u0447\u0435\u043d\u043d\u044b\u0435 \u043a\u0430\u043a <code>translated=true<\/code>. \u042d\u0442\u043e \u0435\u0434\u0438\u043d\u0441\u0442\u0432\u0435\u043d\u043d\u044b\u0435 \u043f\u043e\u043b\u044f, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0440\u0430\u0437\u043b\u0438\u0447\u0430\u044e\u0442\u0441\u044f \u043c\u0435\u0436\u0434\u0443 \u043f\u0435\u0440\u0435\u0432\u043e\u0434\u0430\u043c\u0438.<\/p>\n<p>  <img decoding=\"async\" src=\"http:\/\/habr.habrastorage.org\/post_images\/eae\/c16\/3bd\/eaec163bdab042d20bdc6e59af876690.png\" alt=\"\u0410\u0434\u043c\u0438\u043d\u043a\u0430 \u043c\u0435\u043d\u044e 1\"\/><\/p>\n<p>  \u0414\u043b\u044f \u0438\u043d\u0442\u0435\u0433\u0440\u0430\u0446\u0438\u0438 \u0441 \u0430\u0434\u043c\u0438\u043d\u043a\u043e\u0439 \u043f\u0440\u0435\u0434\u0443\u0441\u043c\u043e\u0442\u0440\u0435\u043d\u044b \u043f\u0430\u043d\u0435\u043b\u0438 \u0438 \u0441\u0435\u0440\u0432\u0438\u0441\u044b \u0434\u043b\u044f SonataDoctrinePhpcrAdminBundle. \u041f\u0430\u043d\u0435\u043b\u0438 \u0434\u043e\u0441\u0442\u0443\u043f\u043d\u044b \u0441\u0440\u0430\u0437\u0443, \u043d\u043e \u0447\u0442\u043e\u0431\u044b \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0438\u0445, \u043d\u0430\u0434\u043e \u044f\u0432\u043d\u043e \u0434\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u0438 \u0432 \u0434\u0430\u0448\u0431\u043e\u0440\u0434. <\/p>\n<p>  <img decoding=\"async\" src=\"http:\/\/habr.habrastorage.org\/post_images\/726\/2e6\/f91\/7262e6f91abf49b41df79439b3b1e7dd.png\" alt=\"\u0410\u0434\u043c\u0438\u043d\u043a\u0430 \u043c\u0435\u043d\u044e2\"\/><\/p>\n<p>  \u041a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0438\u0440\u0443\u0435\u0442\u0441\u044f \u0431\u0430\u043d\u0434\u043b <a href=\"http:\/\/symfony.com\/doc\/current\/cmf\/reference\/configuration\/menu.html\">\u043a\u0430\u043a \u043e\u0431\u044b\u0447\u043d\u043e<\/a>, \u043d\u043e \u0432\u0441\u0435 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u044b \u043e\u043f\u0446\u0438\u043e\u043d\u0430\u043b\u044c\u043d\u044b.<\/p>\n<p>  \u0421\u0432\u044f\u0437\u044c \u043c\u0435\u0436\u0434\u0443 \u0440\u043e\u0443\u0442\u0438\u043d\u0433\u043e\u043c, \u043c\u0435\u043d\u044e \u0438 \u043a\u043e\u043d\u0442\u0435\u043d\u0442\u043e\u043c \u043f\u0440\u043e\u0434\u0435\u043c\u043e\u043d\u0441\u0442\u0440\u0438\u0440\u043e\u0432\u0430\u043d\u0430 \u0442\u0443\u0442:<\/p>\n<p>  <img decoding=\"async\" src=\"http:\/\/habr.habrastorage.org\/post_images\/545\/fc8\/ae4\/545fc8ae49508293a0395863166d6165.png\" alt=\"\u0420\u043e\u0443\u0442\u0438\u043d\u0433, \u043a\u043e\u043d\u0442\u0435\u043d\u0442, \u043c\u0435\u043d\u044e\" title=\"\u0420\u043e\u0443\u0442\u0438\u043d\u0433, \u043a\u043e\u043d\u0442\u0435\u043d\u0442, \u043c\u0435\u043d\u044e\"\/><\/p>\n<h4>\u0411\u043b\u043e\u043a\u0438<\/h4>\n<p>  \u041f\u0440\u0435\u0434\u0443\u0441\u043c\u043e\u0442\u0440\u0435\u043d \u0438 \u0431\u0430\u043d\u0434\u043b \u0434\u043b\u044f \u0440\u0430\u0431\u043e\u0442\u044b \u0441 \u0431\u043b\u043e\u043a\u0430\u043c\u0438. \u0411\u043b\u043e\u043a\u0438 \u043c\u043e\u0433\u0443\u0442 \u0440\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u044b\u0432\u0430\u0442\u044c \u043a\u0430\u043a\u0443\u044e-\u0442\u043e \u043b\u043e\u0433\u0438\u043a\u0443 \u0438\u043b\u0438 \u043f\u0440\u043e\u0441\u0442\u043e \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0442\u044c \u0441\u0442\u0430\u0442\u0438\u0447\u043d\u044b\u0439 \u043a\u043e\u043d\u0442\u0435\u043d\u0442, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043c\u043e\u0436\u043d\u043e \u0432\u044b\u0437\u0432\u0430\u0442\u044c \u0432 \u043b\u044e\u0431\u043e\u043c \u043c\u0435\u0441\u0442\u0435 \u0448\u0430\u0431\u043b\u043e\u043d\u0430. BlockBundle \u043e\u0441\u043d\u043e\u0432\u044b\u0432\u0430\u0435\u0442\u0441\u044f \u043d\u0430 <a href=\"https:\/\/github.com\/sonata-project\/SonataBlockBundle\">SonataBlockBundle<\/a> \u0438 \u0433\u0434\u0435 \u043d\u0443\u0436\u043d\u043e, \u0437\u0430\u043c\u0435\u043d\u044f\u0435\u0442 \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u044b \u0440\u043e\u0434\u0438\u0442\u0435\u043b\u044c\u0441\u043a\u043e\u0433\u043e \u0431\u0430\u043d\u0434\u043b\u0430 \u043d\u0430 \u0441\u0432\u043e\u0438, \u0441\u043e\u0432\u043c\u0435\u0441\u0442\u0438\u043c\u044b\u0435 \u0441 PHPCR.<\/p>\n<p>  <img decoding=\"async\" src=\"http:\/\/habrastorage.org\/getpro\/habr\/post_images\/74c\/149\/a2d\/74c149a2da308205664e42338c19f07f.png\" alt=\"\u0411\u043b\u043e\u043a\u0438\"\/><br \/>  <em>\u0422\u0438\u043f\u0438\u0447\u043d\u044b\u0435 \u0431\u043b\u043e\u043a\u0438 \u0441 \u0433\u043b\u0430\u0432\u043d\u043e\u0439 \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u044b<\/em><\/p>\n<p>  \u0412\u043d\u0443\u0442\u0440\u0438 \u0431\u0430\u043d\u0434\u043b\u0430 \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u044b \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0442\u0438\u043f\u043e\u0432\u044b\u0445 \u0431\u043b\u043e\u043a\u043e\u0432:<\/p>\n<ul>\n<li><code>StringBlock<\/code> \u2014 \u0431\u043b\u043e\u043a \u0441 \u0435\u0434\u0438\u043d\u0441\u0442\u0432\u0435\u043d\u043d\u044b\u043c \u043f\u043e\u043b\u0435\u043c <code>body<\/code>, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043f\u0440\u043e\u0441\u0442\u043e \u0440\u0435\u043d\u0434\u0435\u0440\u0438\u0442 \u0441\u0442\u0440\u043e\u043a\u0443 \u0432 \u0448\u0430\u0431\u043b\u043e\u043d\u0435, \u0434\u0430\u0436\u0435 \u043d\u0435 \u043e\u043a\u0440\u0443\u0436\u0430\u044f \u0435\u0435 \u043a\u0430\u043a\u0438\u043c\u0438-\u043b\u0438\u0431\u043e \u0442\u0435\u0433\u0430\u043c\u0438<\/li>\n<li><code>SimpleBlock<\/code> \u2014 \u043a <code>body<\/code> \u0434\u043e\u0431\u0430\u0432\u043b\u044f\u0435\u0442\u0441\u044f <code>title<\/code>  <\/li>\n<li><code>ContainerBlock<\/code> \u2014 \u0440\u0435\u043d\u0434\u0435\u0440\u0438\u0442 \u0437\u0430\u0434\u0430\u043d\u043d\u044b\u0439 \u0441\u043f\u0438\u0441\u043e\u043a \u0431\u043b\u043e\u043a\u043e\u0432 (\u0432\u043a\u043b\u044e\u0447\u0430\u044f \u0434\u0440\u0443\u0433\u0438\u0435 \u0431\u043b\u043e\u043a\u0438-\u043a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440\u044b)<\/li>\n<li><code>ReferenceBlock<\/code> \u2014 \u043c\u043e\u0436\u0435\u0442 \u0442\u043e\u043b\u044c\u043a\u043e \u0441\u0441\u044b\u043b\u0430\u0442\u044c\u0441\u044f \u043d\u0430 \u0434\u0440\u0443\u0433\u043e\u0439 \u0431\u043b\u043e\u043a. \u041f\u0440\u0438 \u0432\u044b\u0437\u043e\u0432\u0435 \u0441\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u0435\u0442 \u0442\u0430\u043a, \u043a\u0430\u043a \u0435\u0441\u043b\u0438 \u0431\u044b \u0432\u044b\u0437\u044b\u0432\u0430\u043b\u0441\u044f \u0431\u043b\u043e\u043a, \u043d\u0430 \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0443\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u0442 \u0441\u0441\u044b\u043b\u043a\u0430.<\/li>\n<li><code>ActionBlock<\/code> \u2014 \u0440\u0435\u043d\u0434\u0435\u0440\u0438\u0442 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442 \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u043d\u043e\u0433\u043e \u044d\u043a\u0448\u0435\u043d\u0430 \u0438\u0437 \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440\u0430, \u043c\u043e\u0436\u043d\u043e \u043f\u0435\u0440\u0435\u0434\u0430\u0442\u044c \u0436\u0435\u043b\u0430\u0435\u043c\u044b\u0435 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u044b \u0437\u0430\u043f\u0440\u043e\u0441\u0430<\/li>\n<li><code>RssBlock<\/code> \u2014 \u043f\u043e\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u0442 RSS-\u0444\u0438\u0434 \u0441 \u0443\u043a\u0430\u0437\u0430\u043d\u043d\u044b\u043c \u0448\u0430\u0431\u043b\u043e\u043d\u043e\u043c<\/li>\n<li><code>ImagineBlock<\/code> \u2014 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f LiipImagineBundle, \u0447\u0442\u043e\u0431\u044b \u0432\u044b\u0432\u043e\u0434\u0438\u0442\u044c \u043a\u0430\u0440\u0442\u0438\u043d\u043a\u0438 \u043f\u0440\u044f\u043c\u0438\u043a\u043e\u043c \u0438\u0437 PHPCR<\/li>\n<li><code>SlideshowBlock<\/code> \u2014 \u043e\u0441\u043e\u0431\u0430\u044f \u0440\u0430\u0437\u043d\u043e\u0432\u0438\u0434\u043d\u043e\u0441\u0442\u044c \u0431\u043b\u043e\u043a\u0430-\u043a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440\u0430, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u043e\u0431\u0435\u0440\u043d\u0443\u0442\u044c \u043b\u044e\u0431\u044b\u0435 \u0431\u043b\u043e\u043a\u0438 \u0432 \u0440\u0430\u0437\u043c\u0435\u0442\u043a\u0443, \u0447\u0442\u043e\u0431\u044b \u043c\u043e\u0436\u043d\u043e \u0431\u044b\u043b\u043e \u043e\u0440\u0433\u0430\u043d\u0438\u0437\u043e\u0432\u0430\u0442\u044c \u0441\u043b\u0430\u0439\u0434\u0448\u043e\u0443. \u041f\u0440\u0438\u043c\u0435\u0447\u0430\u0442\u0435\u043b\u044c\u043d\u043e, \u0447\u0442\u043e JS-\u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0443 \u0434\u043b\u044f \u044d\u0442\u043e\u0433\u043e \u043d\u0443\u0436\u043d\u043e \u0432\u044b\u0431\u0440\u0430\u0442\u044c \u0441\u0430\u043c\u043e\u043c\u0443, \u0432 \u043a\u043e\u043c\u043f\u043b\u0435\u043a\u0442\u0435 \u0435\u0435 \u043d\u0435\u0442.<\/li>\n<\/ul>\n<p>  <img decoding=\"async\" src=\"http:\/\/habrastorage.org\/getpro\/habr\/post_images\/202\/506\/ba8\/202506ba8c700f3d03bd6e033af88dfe.png\" alt=\"\u0410\u0434\u043c\u0438\u043d\u043a\u0430 \u0431\u043b\u043e\u043a\u043e\u0432\"\/><\/p>\n<p>  \u041c\u043e\u0436\u043d\u043e \u0441\u043e\u0437\u0434\u0430\u0432\u0430\u0442\u044c \u0438 <a href=\"http:\/\/symfony.com\/doc\/current\/cmf\/bundles\/block\/create_your_own_blocks.html\">\u0441\u0432\u043e\u0438 \u0431\u043b\u043e\u043a\u0438<\/a>.<\/p>\n<p>  <a href=\"http:\/\/symfony.com\/doc\/current\/cmf\/bundles\/block\/cache.html\">\u041c\u0435\u0445\u0430\u043d\u0438\u0437\u043c \u043a\u044d\u0448\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f<\/a> \u0432\u044b\u0432\u043e\u0434\u0430 \u0431\u043b\u043e\u043a\u043e\u0432 \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u043f\u043e\u0432\u0435\u0440\u0445 <a href=\"https:\/\/github.com\/vihuvac\/SonataCacheBundle\">SonataCacheBundle<\/a>, \u043f\u0440\u0430\u0432\u0434\u0430, \u0432 BlockBundle \u043e\u0442\u0441\u0443\u0442\u0441\u0442\u0432\u0443\u044e\u0442 \u0430\u0434\u0430\u043f\u0442\u0435\u0440\u044b \u0434\u043b\u044f MongoDB, Memcached \u0438 APC \u2014 \u043f\u0440\u0438\u0434\u0435\u0442\u0441\u044f \u0434\u043e\u0432\u043e\u043b\u044c\u0441\u0442\u0432\u043e\u0432\u0430\u0442\u044c\u0441\u044f Varnish \u0438\u043b\u0438 SSI.<\/p>\n<p>  \u0412\u044b\u0432\u043e\u0434\u044f\u0442\u0441\u044f \u0431\u043b\u043e\u043a\u0438 \u043f\u0440\u0438 \u043f\u043e\u043c\u043e\u0449\u0438 Twig-\u0444\u0443\u043d\u043a\u0446\u0438\u0438 <code>sonata_block_render()<\/code>, \u0442\u043e\u043b\u044c\u043a\u043e \u0432 \u043e\u0442\u043b\u0438\u0447\u0438\u0435 \u043e\u0442 \u043e\u0440\u0438\u0433\u0438\u043d\u0430\u043b\u044c\u043d\u043e\u0433\u043e \u0431\u0430\u043d\u0434\u043b\u0430 \u0432 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435 \u0430\u0440\u0433\u0443\u043c\u0435\u043d\u0442\u043e\u0432 \u043f\u0435\u0440\u0435\u0434\u0430\u0435\u0442\u0441\u044f \u0438\u043c\u044f \u0431\u043b\u043e\u043a\u0430 \u0432 PHPCR.<\/p>\n<h4>Frontend\/Inline Editing<\/h4>\n<p>  \u0420\u0435\u0434\u0430\u043a\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435-\u043d\u0430-\u043b\u0435\u0442\u0443 \u0440\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u043d\u043e \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u0438\u0445 \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u043e\u0432.<\/p>\n<p>  \u041f\u0435\u0440\u0432\u044b\u0439 \u2014 <a href=\"http:\/\/rdfa.info\/\">RDFa<\/a>-\u0440\u0430\u0437\u043c\u0435\u0442\u043a\u0430. \u042d\u0442\u043e \u0441\u043f\u043e\u0441\u043e\u0431 \u043e\u043f\u0438\u0441\u0430\u0442\u044c \u043c\u0435\u0442\u0430\u0434\u0430\u043d\u043d\u044b\u0435 \u0432 HTML \u0432 \u0441\u0442\u0438\u043b\u0435 \u043c\u0438\u043a\u0440\u043e\u0444\u043e\u0440\u043c\u0430\u0442\u043e\u0432, \u043d\u043e \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u0430\u0442\u0440\u0438\u0431\u0443\u0442\u043e\u0432.<\/p>\n<pre><code class=\"html\">&lt;div id=&quot;myarticle&quot; typeof=&quot;http:\/\/rdfs.org\/sioc\/ns#Post&quot; about=&quot;http:\/\/example.net\/blog\/news_item&quot;&gt;   &lt;h1 property=&quot;dcterms:title&quot;&gt;News item title&lt;\/h1&gt;   &lt;div property=&quot;sioc:content&quot;&gt;News item contents&lt;\/div&gt; &lt;\/div&gt; <\/code><\/pre>\n<p>  \u041f\u043e\u0441\u043b\u0435 \u044d\u0442\u043e\u0433\u043e \u043a\u043e\u0434 \u0432\u044b\u0448\u0435 \u043f\u0435\u0440\u0435\u0441\u0442\u0430\u0435\u0442 \u0431\u044b\u0442\u044c \u00ab\u0442\u0443\u043f\u044b\u043c\u00bb \u043d\u0430\u0431\u043e\u0440\u043e\u043c DOM-\u044d\u043b\u0435\u043c\u0435\u043d\u0442\u043e\u0432, \u043f\u043e\u0442\u043e\u043c\u0443 \u0447\u0442\u043e \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044e \u0438\u0437 \u0430\u0442\u0440\u0438\u0431\u0443\u0442\u043e\u0432 \u043c\u043e\u0436\u043d\u043e \u0443\u0434\u043e\u0431\u043d\u043e \u0438\u0437\u0432\u043b\u0435\u0447\u044c \u0432 JS-\u043a\u043e\u0434 \u0438 \u0441\u0432\u044f\u0437\u0430\u0442\u044c \u0435\u0435 \u0441 \u043c\u043e\u0434\u0435\u043b\u044f\u043c\u0438 \u0438 \u043a\u043e\u043b\u043b\u0435\u043a\u0446\u0438\u044f\u043c\u0438 Backbone.js \u043f\u0440\u0438 \u043f\u043e\u043c\u043e\u0449\u0438 <a href=\"https:\/\/github.com\/bergie\/VIE\">VIE.js<\/a> \u2014 \u044d\u0442\u043e \u0432\u0442\u043e\u0440\u043e\u0439 \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442.<\/p>\n<p>  \u0422\u0440\u0435\u0442\u044c\u0438\u043c \u0432 \u0446\u0435\u043f\u043e\u0447\u043a\u0435 \u0432\u044b\u0441\u0442\u0443\u043f\u0430\u0435\u0442 <a href=\"http:\/\/createjs.org\/\">create.js<\/a>, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0438\u0437\u0431\u0430\u0432\u043b\u044f\u0435\u0442 \u043d\u0430\u0441 \u043e\u0442 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e\u0441\u0442\u0438 \u043f\u0440\u0438\u0434\u0443\u043c\u044b\u0432\u0430\u0442\u044c \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441 \u0440\u0435\u0434\u0430\u043a\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f.<\/p>\n<p>  <img decoding=\"async\" src=\"http:\/\/habr.habrastorage.org\/post_images\/d1a\/802\/62d\/d1a80262de34b084221009a6a6badac0.png\" alt=\"\u0421\u0445\u0435\u043c\u0430 \u0440\u0430\u0431\u043e\u0442\u044b create.js\"\/><br \/>  <em>\u0421\u0445\u0435\u043c\u0430 \u0440\u0430\u0431\u043e\u0442\u044b create.js<\/em><\/p>\n<p>  create.js \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u043f\u043e\u0432\u0435\u0440\u0445 VIE.js \u043d\u0430 jQuery-\u0432\u0438\u0434\u0436\u0435\u0442\u0430\u0445. \u0427\u0442\u043e \u043e\u043d \u043c\u043e\u0436\u0435\u0442?<\/p>\n<ul>\n<li>\u0438\u0437\u043c\u0435\u043d\u044f\u0442\u044c \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u043c\u043e\u0435 RDF-\u0440\u0430\u0437\u043c\u0435\u0447\u0435\u043d\u043d\u044b\u0445 \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u043e\u0432 \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u0440\u0435\u0434\u0430\u043a\u0442\u043e\u0440\u043e\u0432 \u2014 Aloha, Hallo, Redactor, ckEditor<\/li>\n<li>\u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044f localStorage, \u043e\u0431\u0435\u0441\u043f\u0435\u0447\u0438\u0432\u0430\u0442\u044c \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u043a\u0443 \u0441\u043e\u0445\u0440\u0430\u043d\u0435\u043d\u0438\u044f-\u0432\u043e\u0441\u0441\u0442\u0430\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u044f \u043f\u0440\u0430\u0432\u043e\u043a \u0434\u043e \u0442\u043e\u0433\u043e, \u043a\u0430\u043a \u043e\u043d\u0438 \u0443\u0439\u0434\u0443\u0442 \u0432 CMS<\/li>\n<li>\u0443\u043f\u0440\u0430\u0432\u043b\u044f\u0442\u044c \u0443\u0432\u0435\u0434\u043e\u043c\u043b\u0435\u043d\u0438\u044f\u043c\u0438, \u043f\u043e\u044f\u0432\u043b\u044f\u044e\u0449\u0438\u043c\u0438c\u044f \u0432 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0435 \u0440\u0435\u0434\u0430\u043a\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f<\/li>\n<li>\u043e\u0440\u0433\u0430\u043d\u0438\u0437\u043e\u0432\u044b\u0432\u0430\u0442\u044c \u0441\u0432\u043e\u0438 \u0442\u0443\u043b\u0431\u0430\u0440\u044b \u0441 \u043d\u0443\u0436\u043d\u044b\u043c\u0438 \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u0430\u043c\u0438<\/li>\n<li>\u0432\u044b\u0437\u044b\u0432\u0430\u0442\u044c \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u0441\u043a\u0438\u0435 workflow-\u0444\u0443\u043d\u043a\u0446\u0438\u0438 \u0442\u0438\u043f\u0430 \u00ab\u0443\u0434\u0430\u043b\u0438\u0442\u044c\u00bb, \u00ab\u0441\u043d\u044f\u0442\u044c \u0441 \u043f\u0443\u0431\u043b\u0438\u043a\u0430\u0446\u0438\u0438\u00bb<\/li>\n<\/ul>\n<p>  \u0412\u0435\u0441\u044c \u043a\u043e\u043d\u0442\u0435\u043d\u0442 \u0440\u0435\u0434\u0430\u043a\u0442\u0438\u0440\u0443\u0435\u0442\u0441\u044f \u043d\u0430 \u043c\u0435\u0441\u0442\u0435, \u043f\u0440\u0438 \u044d\u0442\u043e\u043c \u0437\u0430 \u0441\u0447\u0435\u0442 RDFa \u043d\u0435 \u043f\u0440\u0438\u0445\u043e\u0434\u0438\u0442\u0441\u044f \u0433\u0435\u043d\u0435\u0440\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0442\u043e\u043d\u043d\u044b \u0432\u0441\u043f\u043e\u043c\u043e\u0433\u0430\u0442\u0435\u043b\u044c\u043d\u043e\u0439 HTML-\u0440\u0430\u0437\u043c\u0435\u0442\u043a\u0438, \u043a\u0430\u043a \u044d\u0442\u043e \u0434\u0435\u043b\u0430\u044e\u0442 \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u0435 CMS.<\/p>\n<p>  <img decoding=\"async\" src=\"http:\/\/habr.habrastorage.org\/post_images\/f6e\/cd2\/db2\/f6ecd2db224816d284ce92d9cc8e912c.png\" alt=\"\u0420\u0435\u0434\u0430\u043a\u0442\u043e\u0440\"\/><br \/>  <em>ckEditor \u043d\u0430 \u0441\u043b\u0443\u0436\u0431\u0435 \u0434\u043e\u0431\u0440\u0430<\/em><\/p>\n<p>  \u041d\u0443 \u0438 \u0437\u0430\u043c\u044b\u043a\u0430\u0435\u0442 \u0441\u043f\u0438\u0441\u043e\u043a <a href=\"https:\/\/github.com\/flack\/createphp\">CreatePHP<\/a>, \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0430, \u0441\u0432\u044f\u0437\u044b\u0432\u0430\u044e\u0449\u0430\u044f \u0432\u044b\u0437\u043e\u0432\u044b create.js \u0438 \u043d\u0435\u043f\u043e\u0441\u0440\u0435\u0434\u0441\u0442\u0432\u0435\u043d\u043d\u043e \u0431\u044d\u043a\u0435\u043d\u0434. \u041e\u043d\u0430 \u043e\u0442\u0432\u0435\u0447\u0430\u0435\u0442 \u0437\u0430 \u043c\u0430\u043f\u043f\u0438\u043d\u0433 \u0441\u0432\u043e\u0439\u0441\u0442\u0432 \u043c\u043e\u0434\u0435\u043b\u0438 \u043d\u0430 PHP \u043a HTML-\u0430\u0442\u0440\u0438\u0431\u0443\u0442\u0430\u043c \u0438 \u0440\u0435\u043d\u0434\u0435\u0440\u0438\u043d\u0433 \u0441\u0443\u0449\u043d\u043e\u0441\u0442\u0438. \u0421\u0430\u043c\u044b\u0435 \u0432\u043d\u0438\u043c\u0430\u0442\u0435\u043b\u044c\u043d\u044b\u0435 \u0443\u0436\u0435 \u0432\u0438\u0434\u0435\u043b\u0438, \u0447\u0442\u043e \u0434\u043b\u044f CreatePHP \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u0435\u0442 Twig-\u0440\u0430\u0441\u0448\u0438\u0440\u0435\u043d\u0438\u0435 \u0438 \u0435\u0433\u043e \u0432\u044b\u0437\u043e\u0432 \u043a\u0440\u0430\u0441\u0443\u0435\u0442\u0441\u044f \u0432 \u043f\u0435\u0440\u0432\u043e\u043c \u0436\u0435 \u043b\u0438\u0441\u0442\u0438\u043d\u0433\u0435 \u044d\u0442\u043e\u0439 \u0441\u0442\u0430\u0442\u044c\u0438: \u043f\u0435\u0440\u0435\u0434\u0430\u0435\u043c \u043c\u043e\u0434\u0435\u043b\u044c \u0438 \u0443\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u043c \u0444\u043e\u0440\u043c\u0430\u0442 \u0432\u044b\u0432\u043e\u0434\u0430. \u041a\u0440\u0430\u0441\u043e\u0442\u0430.<\/p>\n<p>  \u041f\u043e\u0441\u043b\u0435\u0434\u043d\u0438\u0435 \u0434\u0432\u0430 \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u0430 \u043e\u0431\u044a\u0435\u0434\u0438\u043d\u0435\u043d\u044b \u0434\u043b\u044f \u0443\u0434\u043e\u0431\u0441\u0442\u0432\u0430 \u0432 CreateBundle.<\/p>\n<h4>MediaBundle<\/h4>\n<p>  \u041e\u0434\u043d\u0438\u043c \u0438\u0437 \u0431\u0430\u043d\u0434\u043b\u043e\u0432 \u0441\u0430\u043c\u043e\u0439 \u043c\u0438\u043d\u0438\u043c\u0430\u043b\u0438\u0441\u0442\u0438\u0447\u043d\u043e\u0439 \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0431\u0430\u043d\u0434\u043b \u0434\u043b\u044f \u0440\u0430\u0431\u043e\u0442\u044b \u0441 \u043c\u0435\u0434\u0438\u0430-\u043e\u0431\u044a\u0435\u043a\u0442\u0430\u043c\u0438. \u0418\u043c\u0438 \u043c\u043e\u0433\u0443\u0442 \u0431\u044b\u0442\u044c \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u044b, \u0434\u0432\u043e\u0438\u0447\u043d\u044b\u0435 \u0444\u0430\u0439\u043b\u044b, MP3, \u0432\u0438\u0434\u0435\u043e\u0440\u043e\u043b\u0438\u043a\u0438 \u0438 \u0435\u0449\u0435 \u0447\u0435\u0433\u043e \u0434\u0443\u0448\u0430 \u043f\u043e\u0436\u0435\u043b\u0430\u0435\u0442. \u0412 \u0442\u0435\u043a\u0443\u0449\u0435\u0439 \u0432\u0435\u0440\u0441\u0438\u0438 \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u0435\u0442\u0441\u044f \u0437\u0430\u0433\u0440\u0443\u0437\u043a\u0430 \u043a\u0430\u0440\u0442\u0438\u043d\u043e\u043a \u0438 \u0441\u043a\u0430\u0447\u0438\u0432\u0430\u043d\u0438\u0435 \u0444\u0430\u0439\u043b\u043e\u0432, \u0432\u0441\u0435 \u043e\u0441\u0442\u0430\u043b\u044c\u043d\u043e\u0435 \u043f\u0438\u0441\u0430\u0442\u044c \u0440\u0443\u043a\u0430\u043c\u0438. <a href=\"https:\/\/github.com\/sonata-project\/SonataMediaBundle\">SonataMediaBundle<\/a> \u043c\u043e\u0436\u0435\u0442 \u043f\u043e\u043c\u043e\u0447\u044c, \u0442\u0435\u043c \u0431\u043e\u043b\u0435\u0435 \u0447\u0442\u043e \u0435\u0441\u0442\u044c \u0438\u043d\u0442\u0435\u0433\u0440\u0430\u0446\u0438\u044f.<\/p>\n<p>  \u0411\u0430\u043d\u0434\u043b \u043e\u0431\u0435\u0441\u043f\u0435\u0447\u0438\u0432\u0430\u0435\u0442:<\/p>\n<ul>\n<li>\u0431\u0430\u0437\u043e\u0432\u044b\u0435 \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u044b \u0434\u043b\u044f \u043f\u0440\u043e\u0441\u0442\u044b\u0445 \u043c\u043e\u0434\u0435\u043b\u0435\u0439;<\/li>\n<li>\u0431\u0430\u0437\u043e\u0432\u044b\u0435 <code>FormType<\/code> \u0434\u043b\u044f \u043f\u0440\u043e\u0441\u0442\u044b\u0445 \u043c\u043e\u0434\u0435\u043b\u0435\u0439;<\/li>\n<li>\u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440 \u0434\u043b\u044f \u0437\u0430\u0433\u0440\u0443\u0437\u043a\u0438 \u0438 \u0441\u043a\u0430\u0447\u0438\u0432\u0430\u043d\u0438\u044f \u0444\u0430\u0439\u043b\u043e\u0432;<\/li>\n<li>\u0445\u0435\u043b\u043f\u0435\u0440, \u0434\u0430\u044e\u0449\u0438\u0439 \u0430\u0431\u0441\u0442\u0440\u0430\u043a\u0446\u0438\u044e \u043e\u0442 \u0437\u0430\u0433\u0440\u0443\u0437\u043a\u0438 \u043d\u0430 \u0441\u0435\u0440\u0432\u0435\u0440;<\/li>\n<li>\u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440 \u0434\u043b\u044f \u043e\u0442\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u044f \u043a\u0430\u0440\u0442\u0438\u043d\u043a\u0438.<\/li>\n<\/ul>\n<p>  \u0410 \u0442\u0430\u043a \u0436\u0435 \u0445\u0435\u043b\u043f\u0435\u0440\u044b \u0438 \u0430\u0434\u0430\u043f\u0442\u0435\u0440\u044b \u0434\u043b\u044f \u0438\u043d\u0442\u0435\u0433\u0440\u0430\u0446\u0438\u0438:<\/p>\n<ul>\n<li>\u043c\u0435\u0434\u0438\u0430-\u0431\u0440\u0430\u0443\u0437\u0435\u0440\u043e\u0432 (elFinder, ckFinder, MceFileManager, \u0438 \u0442. \u043f.);<\/li>\n<li>\u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a \u0434\u043b\u044f \u043c\u0430\u043d\u0438\u043f\u0443\u043b\u044f\u0446\u0438\u0439 \u0441 \u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u044f\u043c\u0438 (Imagine, LiipImagineBundle).<\/li>\n<\/ul>\n<p>  <img decoding=\"async\" src=\"http:\/\/habrastorage.org\/getpro\/habr\/post_images\/70f\/112\/fb6\/70f112fb6747e0d8ad257b3eb99568cb.png\" alt=\"\u044d\u043b\u044c\u0444\u0430\u0439\u043d\u0434\u0435\u0440\"\/><\/p>\n<p>  \u0415\u0441\u0442\u044c \u0446\u0435\u043b\u0430\u044f \u0440\u043e\u0441\u0441\u044b\u043f\u044c \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441\u043e\u0432 \u0434\u043b\u044f \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u044f \u0441\u0432\u043e\u0438\u0445 \u043c\u0435\u0434\u0438\u0430-\u043a\u043b\u0430\u0441\u0441\u043e\u0432:<\/p>\n<ul>\n<li><code>MediaInterface<\/code>: \u0431\u0430\u0437\u043e\u0432\u044b\u0439 \u043a\u043b\u0430\u0441\u0441;<\/li>\n<li><code>MetadataInterface<\/code>: \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u0438\u0435 \u043c\u0435\u0442\u0430\u0434\u0430\u043d\u043d\u044b\u0445;<\/li>\n<li><code>FileInterface<\/code>: \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u044f\u0435\u0442\u0441\u044f \u043a\u0430\u043a \u0444\u0430\u0439\u043b;<\/li>\n<li><code>ImageInterface<\/code>: \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u044f\u0435\u0442\u0441\u044f \u043a\u0430\u043a \u043a\u0430\u0440\u0442\u0438\u043d\u043a\u0430;<\/li>\n<li><code>FileSystemInterface<\/code>: \u0444\u0430\u0439\u043b \u0445\u0440\u0430\u043d\u0438\u0442\u0441\u044f \u0432 \u0444\u0430\u0439\u043b\u043e\u0432\u043e\u0439 \u0441\u0438\u0441\u0442\u0435\u043c\u0435, \u043a\u0430\u043a \u043c\u0435\u0434\u0438\u0430-\u043e\u0431\u044a\u0435\u043a\u0442 \u0441\u043e\u0445\u0440\u0430\u043d\u044f\u0435\u0442\u0441\u044f \u043f\u0443\u0442\u044c \u043a \u043d\u0435\u043c\u0443;<\/li>\n<li><code>BinaryInterface<\/code>: \u0432 \u043e\u0441\u043d\u043e\u0432\u043d\u043e\u043c \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f, \u043a\u043e\u0433\u0434\u0430 \u0444\u0430\u0439\u043b \u0441\u043e\u0445\u0440\u0430\u043d\u0435\u043d \u0432\u043d\u0443\u0442\u0438 \u043c\u0435\u0434\u0438\u0430-\u043e\u0431\u044a\u0435\u043a\u0442\u0430;<\/li>\n<li><code>DirectoryInterface<\/code>: \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u044f\u0435\u0442\u0441\u044f \u043a\u0430\u043a \u0434\u0438\u0440\u0435\u043a\u0442\u043e\u0440\u0438\u044f;<\/li>\n<li><code>HierarchyInterface<\/code>: \u043c\u0435\u0434\u0438\u0430-\u043e\u0431\u044a\u0435\u043a\u0442\u044b \u0445\u0440\u0430\u043d\u044f\u0442 \u0434\u0438\u0440\u0435\u043a\u0442\u043e\u0440\u0438\u0438, \u043f\u0443\u0442\u044c \u043a \u043c\u0435\u0434\u0438\u0430: <code>\/path\/to\/file\/filename.ext<\/code>.<\/li>\n<\/ul>\n<p>  \u0418\u043d\u0442\u0435\u0440\u0435\u0441\u0435\u043d \u043f\u043e\u0434\u0445\u043e\u0434 \u043a \u0444\u0430\u0439\u043b\u043e\u0432\u044b\u043c \u043f\u0443\u0442\u044f\u043c. \u0412 \u0442\u0435\u0440\u043c\u0438\u043d\u043e\u043b\u043e\u0433\u0438\u0438 \u0431\u0430\u043d\u0434\u043b\u0430 \u043f\u043e\u0434 \u043f\u0443\u0442\u0435\u043c \u043a \u043c\u0435\u0434\u0438\u0430-\u043e\u0431\u044a\u0435\u043a\u0442\u0443 \u043f\u043e\u043d\u0438\u043c\u0430\u0435\u0442\u0441\u044f, \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, <code>\/path\/to\/my\/media.jpg<\/code> \u0438 \u0440\u0430\u0437\u043b\u0438\u0447\u0438\u044f \u043c\u0435\u0436\u0434\u0443 \u043f\u0443\u0442\u044f\u043c\u0438 \u0432 Windows \u0438 *nix-\u0441\u0438\u0441\u0442\u0435\u043c\u0430\u0445 \u043d\u0438\u0432\u0435\u043b\u0438\u0440\u0443\u044e\u0442\u0441\u044f. \u0412 PHPCR \u0442\u0430\u043a\u043e\u0439 \u043f\u0443\u0442\u044c \u043c\u043e\u0436\u0435\u0442 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c\u0441\u044f \u043a\u0430\u043a \u0438\u0434\u0435\u043d\u0442\u0438\u0444\u0438\u043a\u0430\u0442\u043e\u0440. \u0414\u043e\u0441\u0442\u0443\u043f\u043d\u044b \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u043f\u043e\u043b\u0435\u0437\u043d\u044b\u0445 \u043c\u0435\u0442\u043e\u0434\u043e\u0432:<\/p>\n<ul>\n<li><code>getPath<\/code> \u043f\u043e\u043b\u0443\u0447\u0430\u0435\u0442 \u043f\u0443\u0442\u044c \u043a \u043e\u0431\u044a\u0435\u043a\u0442\u0443, \u0441\u043e\u0445\u0440\u0430\u043d\u0435\u043d\u043d\u043e\u043c\u0443 \u0432 PHPCR, ORM \u0438\u043b\u0438 \u0434\u0440\u0443\u0433\u043e\u043c Doctrine-\u0445\u0440\u0430\u043d\u0438\u043b\u0438\u0449\u0435;<\/li>\n<li><code>getUrlSafePath<\/code> \u0442\u0440\u0430\u043d\u0441\u0444\u043e\u0440\u043c\u0438\u0440\u0443\u0435\u0442 \u043f\u0443\u0442\u044c \u0434\u043b\u044f \u0431\u0435\u0437\u043e\u043f\u0430\u0441\u043d\u043e\u0433\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u044f \u0432 URL;<\/li>\n<li><code>mapPathToId<\/code> \u0442\u0440\u0430\u043d\u0441\u0444\u043e\u0440\u043c\u0438\u0440\u0443\u0435\u0442 \u043f\u0443\u0442\u044c \u0432 \u0438\u0434\u0435\u043d\u0442\u0438\u0444\u0438\u043a\u0430\u0442\u043e\u0440, \u0447\u0442\u043e\u0431\u044b \u043e\u0441\u0443\u0449\u0435\u0441\u0442\u0432\u043b\u044f\u0442\u044c \u043f\u043e\u0438\u0441\u043a \u0432 Doctrine-\u0445\u0440\u0430\u043d\u0438\u043b\u0438\u0449\u0435;<\/li>\n<li><code>mapUrlSafePathToId<\/code> \u0442\u0440\u0430\u043d\u0441\u0444\u043e\u0440\u043c\u0438\u0440\u0443\u0435\u0442 URL \u043e\u0431\u0440\u0430\u0442\u043d\u043e \u0432 \u0438\u0434\u0435\u043d\u0442\u0438\u0444\u0438\u043a\u0430\u0442\u043e\u0440.<\/li>\n<\/ul>\n<p>  \u0412 Twig-\u0440\u0430\u0441\u0448\u0438\u0440\u0435\u043d\u0438\u0438 \u0434\u043e\u0441\u0442\u0443\u043f\u043d\u044b \u0433\u043e\u0432\u043e\u0440\u044f\u0449\u0438\u0435 \u0441\u0430\u043c\u0438 \u0437\u0430 \u0441\u0435\u0431\u044f \u0444\u0443\u043d\u043a\u0446\u0438\u0438:<\/p>\n<pre><code>&lt;a href=&quot;{{ cmf_media_download_url(file) }}&quot; title=&quot;Download&quot;&gt;Download&lt;\/a&gt; &lt;img src=&quot;{{ cmf_media_display_url(image) }}&quot; alt=&quot;&quot; \/&gt; <\/code><\/pre>\n<p>  \u041f\u0440\u0438\u043a\u0440\u0435\u043f\u0438\u0442\u044c \u043a\u0430\u0440\u0442\u0438\u043d\u043a\u0443 \u043a \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0443 \u043c\u043e\u0436\u043d\u043e \u0447\u0435\u0440\u0435\u0437 \u043f\u0440\u0435\u0434\u043e\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u043d\u044b\u0439 Form Type:<\/p>\n<pre><code class=\"php\">use Symfony\\Component\\Form\\FormBuilderInterface;  protected function configureFormFields(FormBuilderInterface $formBuilder) {      $formBuilder         -&gt;add('image', 'cmf_media_image', array('required' =&gt; false))      ; } <\/code><\/pre>\n<p>  \u0420\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u043d\u044b \u0430\u0434\u0430\u043f\u0442\u0435\u0440\u044b \u0434\u043b\u044f \u043c\u0435\u0434\u0438\u0430-\u0431\u0440\u0430\u0443\u0437\u0435\u0440\u0430 <a href=\"http:\/\/elfinder.org\/\">elFinder<\/a>, \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0438 <a href=\"https:\/\/github.com\/KnpLabs\/Gaufrette\">Gaufrette<\/a>, \u0434\u0430\u044e\u0449\u0435\u0439 \u0441\u043b\u043e\u0439 \u0430\u0431\u0441\u0442\u0440\u0430\u043a\u0446\u0438\u0438 \u043d\u0430\u0434 \u0444\u0430\u0439\u043b\u043e\u0432\u043e\u0439 \u0441\u0438\u0441\u0442\u0435\u043c\u043e\u0439 \u0438 <a href=\"https:\/\/github.com\/liip\/LiipImagineBundle\">LiipImagine<\/a>, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u0443\u043f\u0440\u043e\u0449\u0430\u0435\u0442 \u043c\u0430\u043d\u0438\u043f\u0443\u043b\u044f\u0446\u0438\u0438 \u0441 \u043a\u0430\u0440\u0442\u0438\u043d\u043a\u0430\u043c\u0438.<\/p>\n<p>  <img decoding=\"async\" src=\"http:\/\/habrastorage.org\/getpro\/habr\/post_images\/906\/914\/423\/9069144230271dcaa099f0622c59dd86.png\" alt=\"\u0444\u0435\u0439\u043b\"\/><\/p>\n<p>  \u041a\u0430\u043a \u044f \u0438 \u0433\u043e\u0432\u043e\u0440\u0438\u043b \u0440\u0430\u043d\u0435\u0435, \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044f \u0431\u0430\u043d\u0434\u043b\u0430 \u043c\u0438\u043d\u0438\u043c\u0430\u043b\u0438\u0441\u0442\u0438\u0447\u043d\u0430\u044f. \u0414\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u0441\u043a\u0430\u0437\u0430\u0442\u044c, \u0447\u0442\u043e \u043a\u0430\u0440\u0442\u0438\u043d\u043a\u0438 \u0441\u043a\u043e\u043f\u043e\u043c \u043d\u0435 \u0437\u0430\u0433\u0440\u0443\u0436\u0430\u044e\u0442\u0441\u044f, \u0430 \u0447\u0442\u043e\u0431\u044b \u0444\u0438\u0437\u0438\u0447\u0435\u0441\u043a\u0438 \u0443\u0434\u0430\u043b\u0438\u0442\u044c \u0444\u0430\u0439\u043b, \u043f\u0440\u0438\u043a\u0440\u0435\u043f\u043b\u0435\u043d\u043d\u044b\u0439 \u043a \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0443, \u043d\u0430\u0434\u043e \u0443\u0434\u0430\u043b\u0438\u0442\u044c \u0438 \u0441\u0430\u043c \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442. \u0413\u043c. <\/p>\n<h4>\u041f\u0435\u0440\u0441\u043f\u0435\u043a\u0442\u0438\u0432\u044b<\/h4>\n<p>  \u041f\u043b\u0430\u043d\u0438\u0440\u0443\u0435\u0442\u0441\u044f (\u0430 \u043c\u0435\u0441\u0442\u0430\u043c\u0438 \u0432 \u043a\u0430\u043a\u043e\u0439-\u0442\u043e \u0441\u0442\u0435\u043f\u0435\u043d\u0438 \u0434\u0430\u0436\u0435 \u0433\u043e\u0442\u043e\u0432\u0430) \u0438\u043d\u0442\u0435\u0433\u0440\u0430\u0446\u0438\u044f \u0441 \u043c\u043e\u0434\u0443\u043b\u044f\u043c\u0438:<\/p>\n<ul>\n<li>SymfonyCmfSearchBundle (\u043f\u043e\u043b\u043d\u043e\u0446\u0435\u043d\u043d\u044b\u0439 \u043f\u043e\u0438\u0441\u043a, \u0440\u0430\u0441\u0448\u0438\u0440\u044f\u0435\u0442 LiipSearchBundle)<\/li>\n<li>SymfonyCmfSimpleCms (\u043f\u0440\u043e\u0441\u0442\u0435\u0439\u0448\u0430\u044f CMS, \u043f\u043e\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u043c\u0430\u044f \u0432\u043c\u0435\u0441\u0442\u0435 \u0441 CMF)<\/li>\n<li>LuneticsLocaleBundle (\u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u043e\u0435 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u0438\u0435 \u043b\u043e\u043a\u0430\u043b\u0438)<\/li>\n<li>\u0434\u0440\u0443\u0433\u0438\u0435 \u0431\u0430\u043d\u0434\u043b\u044b \u043e\u0442 Sonata<\/li>\n<\/ul>\n<p>  \u041d\u0443 \u0438 \u043a\u043e\u043d\u0435\u0447\u043d\u043e, \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0430 \u043d\u043e\u0432\u044b\u0445 \u0444\u0438\u0447 \u0438 \u0443\u0441\u0442\u0440\u0430\u043d\u0435\u043d\u0438\u0435 \u0442\u0435\u043a\u0443\u0449\u0438\u0445 \u043d\u0435\u0434\u043e\u0440\u0430\u0431\u043e\u0442\u043e\u043a.<\/p>\n<h4>\u0412\u0441\u0435 \u043b\u0438 \u0442\u0430\u043a \u0445\u043e\u0440\u043e\u0448\u043e?<\/h4>\n<p>  \u042f \u0442\u0443\u0442 \u0443\u0436\u0435 \u043d\u0430 \u043c\u043d\u043e\u0433\u043e \u043a\u0438\u043b\u043e\u0431\u0430\u0439\u0442 \u0442\u0435\u043a\u0441\u0442\u0430 \u0440\u0430\u0441\u043f\u0438\u043d\u0430\u044e\u0441\u044c, \u043a\u0430\u043a \u0432\u0441\u0435 \u0432 Symfony CMF \u0437\u0430\u043c\u0435\u0447\u0430\u0442\u0435\u043b\u044c\u043d\u043e, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u043b\u043e\u0433\u0438\u0447\u043d\u043e \u0431\u0443\u0434\u0435\u0442 \u0441\u043f\u0440\u043e\u0441\u0438\u0442\u044c, \u0430 \u0433\u0434\u0435 \u0436\u0435 \u043a\u0440\u0438\u0442\u0438\u043a\u0430.<\/p>\n<p>  \u041d\u0435\u0434\u043e\u0441\u0442\u0430\u0442\u043a\u043e\u0432 \u0445\u0432\u0430\u0442\u0430\u0435\u0442.<\/p>\n<p>  Symfony CMF \u043e\u0431\u043d\u043e\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u043d\u0435\u0447\u0430\u0441\u0442\u043e \u2014 \u043d\u0430 \u0433\u0438\u0442\u0445\u0430\u0431\u0435 \u0443\u043a\u0430\u0437\u0430\u043d\u043e, \u0447\u0442\u043e \u043f\u0440\u043e\u0446\u0435\u0441\u0441 \u0432\u044b\u043f\u0443\u0441\u043a\u0430 \u043d\u043e\u0432\u044b\u0445 \u0432\u0435\u0440\u0441\u0438\u0439 \u0430\u043d\u0430\u043b\u043e\u0433\u0438\u0447\u0435\u043d \u0440\u0435\u043b\u0438\u0437\u043d\u043e\u0439 \u0441\u0445\u0435\u043c\u0435 SF2, \u0442\u043e \u0435\u0441\u0442\u044c \u043a\u0430\u0436\u0434\u044b\u0435 \u043f\u043e\u043b\u0433\u043e\u0434\u0430 (\u0447\u0435\u0442\u044b\u0440\u0435 \u043c\u0435\u0441\u044f\u0446\u0430 \u043f\u0438\u0448\u0435\u043c \u043d\u043e\u0432\u044b\u0435 \u0444\u0438\u0447\u0438, \u0434\u0432\u0430 \u043c\u0435\u0441\u044f\u0446\u0430 \u0444\u0438\u043a\u0441\u0438\u043c \u0431\u0430\u0433\u0438 \u0438 \u0433\u043e\u0442\u043e\u0432\u0438\u043c \u0440\u0435\u043b\u0438\u0437). \u041a\u043e\u043d\u0435\u0447\u043d\u043e, \u0431\u0443\u0434\u0443\u0442 \u043c\u0435\u043b\u043a\u0438\u0435 \u0438\u0441\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u044f, \u043d\u0430\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u043d\u044b\u0435 \u043d\u0430 \u0443\u0441\u0442\u0440\u0430\u043d\u0435\u043d\u0438\u0435 \u0443\u044f\u0437\u0432\u0438\u043c\u043e\u0441\u0442\u0435\u0439, \u043d\u043e \u0432 \u0446\u0435\u043b\u043e\u043c, \u0435\u0441\u043b\u0438 \u0445\u043e\u0447\u0435\u0442\u0441\u044f \u043d\u043e\u0432\u0435\u043d\u044c\u043a\u043e\u0433\u043e, \u043f\u0440\u0438\u0434\u0435\u0442\u0441\u044f \u0438\u0437\u0440\u044f\u0434\u043d\u043e \u043f\u043e\u0434\u043e\u0436\u0434\u0430\u0442\u044c. \u041f\u0440\u0438 \u044d\u0442\u043e\u043c \u0441\u0435\u0439\u0447\u0430\u0441 \u0442\u0430\u043a\u043e\u0439 \u044d\u0442\u0430\u043f \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0438, \u043a\u043e\u0433\u0434\u0430 \u043d\u0438\u043a\u0442\u043e \u043d\u0435 \u043e\u0431\u0435\u0449\u0430\u0435\u0442 \u0441\u043e\u0445\u0440\u0430\u043d\u0435\u043d\u0438\u0435 \u043e\u0431\u0440\u0430\u0442\u043d\u043e\u0439 \u0441\u043e\u0432\u043c\u0435\u0441\u0442\u0438\u043c\u043e\u0441\u0442\u0438 \u043c\u0435\u0436\u0434\u0443 \u0440\u0435\u043b\u0438\u0437\u0430\u043c\u0438 \u043b\u044e\u0431\u043e\u0439 \u0446\u0435\u043d\u043e\u0439. \u042d\u0442\u043e \u0437\u043d\u0430\u0447\u0438\u0442 \u2014 \u0447\u0442\u043e \u0440\u0430\u0431\u043e\u0442\u0430\u043b\u043e \u0432 1.0, \u0432 1.1 \u043c\u043e\u0436\u0435\u0442 \u0437\u0430\u043f\u0440\u043e\u0441\u0442\u043e \u0441\u043b\u043e\u043c\u0430\u0442\u044c\u0441\u044f.<\/p>\n<p>  \u0421\u0442\u0440\u0430\u0434\u0430\u0435\u0442 \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0430\u0446\u0438\u044f. \u0412 \u0432\u0438\u043a\u0438 \u043f\u0440\u043e\u0435\u043a\u0442\u0430 \u0431\u0430\u0440\u0434\u0430\u043a, \u043c\u043d\u043e\u0433\u0438\u0435 \u0441\u0442\u0430\u0442\u044c\u0438 \u0443\u0436\u0435 \u043d\u0430\u0434\u043e \u0431\u044b \u0438 \u0443\u0434\u0430\u043b\u0438\u0442\u044c, \u0433\u0434\u0435-\u0442\u043e \u043d\u0430\u043f\u0438\u0441\u0430\u043d \u0443\u0441\u0442\u0430\u0440\u0435\u0432\u0448\u0438\u0439 \u043a\u043e\u0434, \u0434\u0430 \u0438 \u0432 \u0446\u0435\u043b\u043e\u043c Symfony CMF Book \u043d\u0435 \u0442\u0430\u043a \u0434\u0440\u0443\u0436\u0435\u043b\u044e\u0431\u043d\u0430 \u0438 \u043f\u0440\u043e\u0441\u0442\u0430, \u043a\u0430\u043a \u0430\u043d\u0430\u043b\u043e\u0433\u0438\u0447\u043d\u044b\u0439 \u0441\u0431\u043e\u0440\u043d\u0438\u043a \u0434\u043b\u044f SF2.<\/p>\n<p>  \u0423 CMF \u0432\u0435\u0441\u044c\u043c\u0430 \u0432\u044b\u0441\u043e\u043a\u0438\u0439 \u043f\u043e\u0440\u043e\u0433 \u0432\u0445\u043e\u0436\u0434\u0435\u043d\u0438\u044f. \u0427\u0442\u043e\u0431\u044b \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u044c \u0442\u0435\u0441\u0442\u043e\u0432\u0443\u044e \u0441\u0438\u0441\u0442\u0435\u043c\u0443 \u043d\u0435\u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u00ab\u0440\u0430\u0441\u043f\u0430\u043a\u043e\u0432\u0430\u0442\u044c \u0432\u0441\u0435 \u0432 webroot \u0438 \u0437\u0430\u043f\u0443\u0441\u0442\u0438\u0442\u044c install.php\u00bb \u2014 \u043d\u0443\u0436\u043d\u043e \u0445\u043e\u0440\u043e\u0448\u043e \u043f\u043e\u043d\u0438\u043c\u0430\u0442\u044c \u0441\u0432\u044f\u0437\u044c \u043c\u0435\u0436\u0434\u0443 \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u0430\u043c\u0438 \u0438 \u0443\u043c\u0435\u0442\u044c \u043e\u0431\u0440\u0430\u0449\u0430\u0442\u044c\u0441\u044f \u0441 \u043a\u0430\u0436\u0434\u044b\u043c \u0438\u0437 \u043d\u0438\u0445. \u041b\u044e\u0431\u0430\u044f \u0434\u043e\u0440\u0430\u0431\u043e\u0442\u043a\u0430 \u0438\u043b\u0438 \u0432\u043d\u0435\u0434\u0440\u0435\u043d\u0438\u0435 \u0441\u0432\u043e\u0435\u0433\u043e \u043a\u043e\u0434\u0430 \u043f\u043e\u0442\u0440\u0435\u0431\u0443\u044e\u0442 \u0432\u0434\u0443\u043c\u0447\u0438\u0432\u043e\u0433\u043e \u0438\u0437\u0443\u0447\u0435\u043d\u0438\u044f \u0432\u043d\u0443\u0442\u0440\u0435\u043d\u043d\u043e\u0441\u0442\u0435\u0439. \u0425\u043e\u0442\u044f, \u043d\u0430\u0432\u0435\u0440\u043d\u043e, \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e\u0448\u0438\u0445 SF2 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u043e\u0432 \u044d\u0442\u043e \u043d\u0435 \u0438\u0441\u043f\u0443\u0433\u0430\u0435\u0442. \u0410 \u0434\u043b\u044f \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u0435\u0439 \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0430\u0446\u0438\u0438 \u043d\u0435\u0442 \u0432\u043e\u043e\u0431\u0449\u0435&#8230;<\/p>\n<p>  \u0412\u044b\u0432\u043e\u0434, \u043d\u0430\u043f\u0440\u0430\u0448\u0438\u0432\u0430\u044e\u0449\u0438\u0439\u0441\u044f \u043f\u043e \u0443\u0436\u0435 \u0442\u043e\u043b\u044c\u043a\u043e \u043f\u043e \u0441\u043a\u0440\u0438\u043d\u0448\u043e\u0442\u0430\u043c \u2014 \u0441\u0438\u0441\u0442\u0435\u043c\u0430 \u0441\u044b\u0440\u0430\u044f \u0438 \u043f\u043e\u043a\u0430 \u0434\u0430\u043b\u0435\u043a\u0430 \u043e\u0442 \u0442\u043e\u0432\u0430\u0440\u043d\u043e\u0433\u043e \u0432\u0438\u0434\u0430. \u042e\u0437\u0430\u0431\u0438\u043b\u0438\u0442\u0438 \u0430\u0434\u043c\u0438\u043d\u043a\u0438 \u043f\u043e\u0434 \u0432\u043e\u043f\u0440\u043e\u0441\u043e\u043c \u2014 \u0432\u0440\u043e\u0434\u0435 \u0438 \u043e\u043f\u0440\u044f\u0442\u043d\u044b\u0439 Bootstrap, \u0430 \u0432\u0440\u043e\u0434\u0435 \u0438 \u0447\u0443\u0432\u0441\u0442\u0432\u0443\u0435\u0442\u0441\u044f, \u0447\u0442\u043e \u0440\u0443\u043a\u0430 \u0434\u0438\u0437\u0430\u0439\u043d\u0435\u0440\u0430 \u0437\u0434\u0435\u0441\u044c \u043d\u0438\u0447\u0435\u0433\u043e \u043d\u0435 \u043a\u0430\u0441\u0430\u043b\u0430\u0441\u044c. \u041d\u0435\u0441\u043c\u043e\u0442\u0440\u044f \u043d\u0430 \u043a\u0440\u0443\u0442\u043e\u0439 \u0444\u0440\u043e\u043d\u0442\u0435\u043d\u0434-\u0440\u0435\u0434\u0430\u043a\u0442\u043e\u0440, \u0434\u043b\u044f <code>body<\/code>-\u044d\u043b\u0435\u043c\u0435\u043d\u0442\u043e\u0432 \u0432 \u0430\u0434\u043c\u0438\u043d\u043a\u0435 \u043f\u0440\u0435\u0434\u0443\u0441\u043c\u043e\u0442\u0440\u0435\u043d \u043b\u0438\u0448\u044c \u0436\u0430\u043b\u043a\u0438\u0439 textarea \u0432\u044b\u0441\u043e\u0442\u043e\u0439 \u0432 \u0434\u0432\u0435 \u0441\u0442\u0440\u043e\u043a\u0438. \u0414\u043b\u044f \u0442\u0438\u043f\u043e\u0432\u044b\u0445 \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u0439 \u043f\u0440\u0438\u0445\u043e\u0434\u0438\u0442\u0441\u044f \u0441\u043e\u0432\u0435\u0440\u0448\u0430\u0442\u044c \u0441\u043b\u0438\u0448\u043a\u043e\u043c \u043c\u043d\u043e\u0433\u043e \u0442\u0435\u043b\u043e\u0434\u0432\u0438\u0436\u0435\u043d\u0438\u0439 \u0438\u0437-\u0437\u0430 \u043d\u0435\u043f\u0440\u043e\u0434\u0443\u043c\u0430\u043d\u043d\u043e\u0439 \u043d\u0430\u0432\u0438\u0433\u0430\u0446\u0438\u0438.<\/p>\n<p>  <img decoding=\"async\" src=\"http:\/\/habrastorage.org\/getpro\/habr\/post_images\/a39\/159\/f58\/a39159f5822e8699e151f3e71b445b73.png\" alt=\"\u0411\u0435\u0437 \u043b\u044e\u0431\u0432\u0438\"\/><\/p>\n<p>  \u0412 \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0430\u0446\u0438\u0438 \u0447\u0430\u0441\u0442\u043e \u0432\u0441\u0442\u0440\u0435\u0447\u0430\u044e\u0442\u0441\u044f \u043e\u0431\u0435\u0449\u0430\u043d\u0438\u044f \u0441\u0434\u0435\u043b\u0430\u0442\u044c X \u0438\u043b\u0438 Y <em>\u043f\u043e\u0442\u043e\u043c<\/em>. \u0415\u0441\u043b\u0438 \u0437\u0430\u0445\u043e\u0447\u0435\u0442\u0441\u044f \u043a\u043e\u043c\u0443-\u0442\u043e \u043f\u043e\u0440\u0435\u043a\u043b\u0430\u043c\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u043f\u0440\u043e\u0435\u043a\u0442 \u2014 \u0443\u0431\u0435\u0434\u0438\u0442\u044c \u0432 \u0446\u0435\u043b\u0435\u0441\u043e\u043e\u0431\u0440\u0430\u0437\u043d\u043e\u0441\u0442\u0438 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u044f \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u0441\u044f \u0441 \u0442\u0440\u0443\u0434\u043e\u043c, \u044f \u0434\u0443\u043c\u0430\u044e. \u041d\u0435 \u0431\u0443\u0434\u0435\u0442 \u043c\u043e\u0434\u043d\u044b\u0445 \u043d\u044b\u043d\u0447\u0435 eye-candy-\u043f\u0440\u043e\u0441\u0442\u044b\u043d\u043e\u043a, \u043e\u0431\u0435\u0449\u0430\u044e\u0449\u0438\u0445, \u043a\u0430\u043a \u043b\u0435\u0433\u043a\u0430 \u0438 \u0432\u0435\u0441\u0435\u043b\u0430 \u0441\u0442\u0430\u043d\u0435\u0442 \u0432\u0430\u0448\u0430 \u0436\u0438\u0437\u043d\u044c \u043f\u043e\u0441\u043b\u0435 \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0438 Symfony CMF. \u0412 \u043e\u0431\u0449\u0435\u043c, \u00ab\u043a\u043e\u0440\u043e\u0431\u043a\u0438\u00bb, \u0438\u0437 \u043a\u043e\u0442\u043e\u0440\u043e\u0439 \u043c\u043e\u0436\u043d\u043e \u0434\u043e\u0441\u0442\u0430\u0442\u044c \u043f\u0440\u0438\u0432\u043b\u0435\u043a\u0430\u0442\u0435\u043b\u044c\u043d\u0443\u044e \u0440\u0430\u0431\u043e\u0442\u0430\u044e\u0449\u0443\u044e \u0441\u0438\u0441\u0442\u0435\u043c\u0443, \u043d\u0435\u0442. <del>\u0418 \u043d\u0430\u0432\u0435\u0440\u043d\u043e \u043d\u0435 \u0431\u0443\u0434\u0435\u0442<\/del><\/p>\n<p>  \u041e\u0442\u0434\u0435\u043b\u044c\u043d\u043e \u043e\u0442\u043c\u0435\u0447\u0443, \u0447\u0442\u043e \u043f\u0440\u0438\u043c\u0435\u0440\u043e\u0432 \u043f\u0440\u043e\u043c\u044b\u0448\u043b\u0435\u043d\u043d\u043e\u0433\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u044f Symfony CMF <em>\u043f\u043e\u043a\u0430<\/em> \u043d\u0435\u0442. \u041d\u0435\u0438\u0437\u0432\u0435\u0441\u0442\u043d\u043e, \u043a\u0430\u043a \u0441\u0438\u0441\u0442\u0435\u043c\u0430 \u0432\u0435\u0434\u0435\u0442 \u0441\u0435\u0431\u044f \u043f\u043e\u0434 \u043d\u0430\u0433\u0440\u0443\u0437\u043a\u043e\u0439 \u0438 \u0447\u0442\u043e \u0434\u0435\u043b\u0430\u0442\u044c, \u0435\u0441\u043b\u0438 \u0432\u0434\u0440\u0443\u0433 \u043f\u043e\u0442\u0440\u0435\u0431\u0443\u0435\u0442\u0441\u044f \u043c\u0430\u0441\u0448\u0442\u0430\u0431\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 (\u0432 \u0442\u043e\u043c \u0447\u0438\u0441\u043b\u0435 \u0431\u044d\u043a\u0435\u043d\u0434\u0430) \u2014 \u044d\u0442\u0438 \u0432\u043e\u043f\u0440\u043e\u0441\u044b \u043d\u0435 \u0440\u0430\u0441\u043a\u0440\u044b\u0442\u044b \u0432 \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0430\u0446\u0438\u0438 \u0437\u0430 \u0438\u0441\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435\u043c Cache-\u0431\u0430\u043d\u0434\u043b\u043e\u0432 \u0438 \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0438 APC.<\/p>\n<h4>\u041f\u0435\u0440\u0435\u0439\u0434\u0435\u043c \u043a \u0434\u0435\u043b\u0443<\/h4>\n<p>  \u041c\u043e\u0436\u043d\u043e \u0441\u0440\u0430\u0437\u0443 \u0441\u043a\u0430\u0447\u0430\u0442\u044c \u043f\u043e\u0434\u0433\u043e\u0442\u043e\u0432\u043b\u0435\u043d\u043d\u044b\u0439 \u043c\u043d\u043e\u0439 \u043e\u0431\u0440\u0430\u0437 \u0432\u0438\u0440\u0442\u0443\u0430\u043b\u044c\u043d\u043e\u0439 \u043c\u0430\u0448\u0438\u043d\u044b \u0434\u043b\u044f VirtualBox, \u0433\u0434\u0435 \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043b\u0435\u043d\u043e \u0438 \u043d\u0430\u0441\u0442\u0440\u043e\u0435\u043d\u043e \u0432\u0441\u0435, \u0432\u043a\u043b\u044e\u0447\u0430\u044f \u0440\u0430\u0437\u043d\u044b\u0435 \u0431\u044d\u043a\u0435\u043d\u0434\u044b. \u0414\u043b\u044f \u0443\u0434\u043e\u0431\u0441\u0442\u0432\u0430 \u043c\u043e\u0436\u043d\u043e \u043f\u0440\u043e\u043f\u0438\u0441\u0430\u0442\u044c \u043a \u0441\u0435\u0431\u0435 \u0432 hosts-\u0444\u0430\u0439\u043b <code>ip_\u0432\u0438\u0440\u0442\u0443\u0430\u043b\u043a\u0438 cmf-sandbox<\/code> \u0438 \u0437\u0430\u0439\u0442\u0438 \u0442\u0443\u0434\u0430 \u0447\u0435\u0440\u0435\u0437 \u0431\u0440\u0430\u0443\u0437\u0435\u0440, \u043d\u043e \u0432\u043e\u043e\u0431\u0449\u0435 \u0437\u0430\u0445\u043e\u0434\u0438\u0442\u044c \u043c\u043e\u0436\u043d\u043e \u0438 \u043f\u0440\u043e\u0441\u0442\u043e \u043f\u043e \u0430\u0439\u043f\u0438\u0448\u043d\u0438\u043a\u0443, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043e\u043d\u0430 \u043f\u043e\u043f\u0440\u043e\u0431\u0443\u0435\u0442 \u043f\u043e\u0434\u0441\u043a\u0430\u0437\u0430\u0442\u044c \u0441\u0440\u0430\u0437\u0443 \u043f\u043e\u0441\u043b\u0435 \u043b\u043e\u0433\u0438\u043d\u0430 (\u0434\u0435\u0444\u043e\u043b\u0442\u043d\u044b\u0435 \u043b\u043e\u0433\u0438\u043d \u0438 \u043f\u0430\u0440\u043e\u043b\u044c: <code>symfony<\/code>).<\/p>\n<p>  \u0417\u0435\u0440\u043a\u0430\u043b\u0430 (.ova-\u0444\u0430\u0439\u043b, \u2248 1Gb):<\/p>\n<ul>\n<li><a href=\"http:\/\/yadi.sk\/d\/_9tlJiqDH7SAL\">\u042f\u043d\u0434\u0435\u043a\u0441.\u0414\u0438\u0441\u043a<\/a><\/li>\n<li><a href=\"https:\/\/mega.co.nz\/#!0FNBGIyT!R18SXj98cpZxgPAe3q94LFsw0H941Fkasrt29HOtFRg\">mega.co.nz<\/a><\/li>\n<\/ul>\n<p>  \u0415\u0441\u043b\u0438 \u043f\u043e \u043a\u0430\u043a\u0438\u043c-\u0442\u043e \u043f\u0440\u0438\u0447\u0438\u043d\u0430\u043c \u0432\u0430\u043c \u043d\u0435 \u0445\u043e\u0447\u0435\u0442\u0441\u044f \u0441 \u044d\u0442\u0438\u043c \u0432\u043e\u0437\u0438\u0442\u044c\u0441\u044f, \u0434\u0430\u044e \u0441\u0441\u044b\u043b\u043a\u0443 \u043d\u0430 <a href=\"http:\/\/cmf.liip.ch\/en\">\u043e\u043d\u043b\u0430\u0439\u043d-\u043f\u0435\u0441\u043e\u0447\u043d\u0438\u0446\u0443<\/a>, \u043d\u043e \u0442\u0443\u0434\u0430 \u043d\u0435 \u0437\u0430\u043b\u0435\u0437\u0435\u0448\u044c \u043f\u043e\u043a\u043e\u0432\u044b\u0440\u044f\u0442\u044c\u0441\u044f \u0432\u043d\u0443\u0442\u0440\u044c, \u0445\u043e\u0442\u044f \u043f\u043e\u0441\u043c\u043e\u0442\u0440\u0435\u0442\u044c \u043d\u0430 \u0441\u043a\u043e\u0440\u0443\u044e \u0440\u0443\u043a\u0443 \u0442\u043e\u0436\u0435 \u0441\u0433\u043e\u0434\u0438\u0442\u0441\u044f.<\/p>\n<p>  \u0412\u0440\u0443\u0447\u043d\u0443\u044e \u0443\u0441\u0442\u0430\u043d\u0430\u0432\u043b\u0438\u0432\u0430\u0442\u044c \u043d\u0435\u043c\u043d\u043e\u0433\u043e \u043c\u0443\u0442\u043e\u0440\u043d\u043e, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u043f\u043e\u0434\u0440\u043e\u0431\u043d\u043e \u043e\u0441\u0442\u0430\u043d\u0430\u0432\u043b\u0438\u0432\u0430\u0442\u044c\u0441\u044f \u043d\u0430 \u043a\u0430\u0436\u0434\u043e\u043c \u0448\u0430\u0433\u0435, \u043e\u043f\u0438\u0441\u0430\u043d\u043d\u043e\u043c \u0432 <a href=\"http:\/\/symfony.com\/doc\/master\/cmf\/book\/installation.html\">\u0438\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u0438<\/a> \u044f \u043d\u0435 \u0431\u0443\u0434\u0443. \u041f\u0440\u043e\u0441\u0442\u043e \u043a\u0440\u0430\u0442\u043a\u043e \u043f\u0440\u043e\u0439\u0434\u0443\u0441\u044c \u043f\u043e \u043e\u0441\u043d\u043e\u0432\u043d\u044b\u043c \u043c\u043e\u043c\u0435\u043d\u0442\u0430\u043c.<\/p>\n<p>  \u0422\u0440\u0435\u0431\u043e\u0432\u0430\u043d\u0438\u044f \u043a \u043c\u0430\u0448\u0438\u043d\u0435 \u0434\u043b\u044f \u0437\u0430\u043f\u0443\u0441\u043a\u0430 CMF \u043d\u0435\u043c\u043d\u043e\u0433\u043e \u043d\u0435\u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043d\u044b\u0435, \u0445\u043e\u0442\u044f \u043d\u0438\u043a\u0430\u043a\u043e\u0433\u043e \u043a\u0440\u0438\u043c\u0438\u043d\u0430\u043b\u0430.<\/p>\n<p>  \u0412\u043e-\u043f\u0435\u0440\u0432\u044b\u0445, \u043d\u0443\u0436\u043d\u043e \u0443\u0434\u043e\u0432\u043b\u0435\u0442\u0432\u043e\u0440\u0438\u0442\u044c \u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043d\u044b\u0435 \u043f\u043e\u0442\u0440\u0435\u0431\u043d\u043e\u0441\u0442\u0438 \u0434\u043b\u044f Symfony 2 (\u0432\u0435\u0441\u044c\u043c\u0430 \u0432\u0435\u0440\u043e\u044f\u0442\u043d\u043e, \u0447\u0442\u043e \u0441 \u044d\u0442\u0438\u043c \u0443\u0436\u0435 \u0432\u0441\u0435 \u0432 \u043f\u043e\u0440\u044f\u0434\u043a\u0435):<\/p>\n<ul>\n<li>\u0443\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u044c PHP 5.3.3+<\/li>\n<li>\u0432\u043a\u043b\u044e\u0447\u0438\u0442\u044c \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u043a\u0443 JSON<\/li>\n<li>\u0432\u043a\u043b\u044e\u0447\u0438\u0442\u044c \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u043a\u0443 ctype<\/li>\n<li>\u0432 <code>php.ini<\/code> \u043a\u043e\u0440\u0440\u0435\u043a\u0442\u043d\u043e \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u044c <code>date.timezone<\/code>  <\/li>\n<li>\u043f\u043e\u0441\u0442\u0430\u0432\u0438\u0442\u044c PDO-\u0434\u0440\u0430\u0439\u0432\u0435\u0440\u0430 \u0434\u043b\u044f Doctrine<\/li>\n<\/ul>\n<p>  <a href=\"http:\/\/symfony.com\/doc\/current\/reference\/requirements.html\">\u0412\u0441\u0435 \u043e\u0441\u0442\u0430\u043b\u044c\u043d\u043e\u0435<\/a> (APC \u0438 \u0442\u0430\u043a \u0434\u0430\u043b\u0435\u0435) \u2014 \u043f\u043e \u0436\u0435\u043b\u0430\u043d\u0438\u044e.<\/p>\n<p>  \u0414\u0430\u043b\u0435\u0435 \u0438\u0434\u0443\u0442 \u0442\u0440\u0435\u0431\u043e\u0432\u0430\u043d\u0438\u044f Symfony CMF. \u041f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e \u0434\u043b\u044f \u0445\u0440\u0430\u043d\u0435\u043d\u0438\u044f \u0434\u0430\u043d\u043d\u044b\u0445 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f SQLite, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u043f\u0440\u043e\u0432\u0435\u0440\u044c\u0442\u0435, \u0447\u0442\u043e\u0431\u044b \u0431\u044b\u043b\u043e \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043b\u0435\u043d\u043e \u0440\u0430\u0441\u0448\u0438\u0440\u0435\u043d\u0438\u0435 <code>pdo_sqlite<\/code>.<\/p>\n<p>  \u0427\u0442\u043e\u0431\u044b \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0434\u0440\u0443\u0433\u0438\u0435 \u0431\u044d\u043a\u0435\u043d\u0434\u044b, \u0443\u0441\u0442\u0430\u043d\u0430\u0432\u043b\u0438\u0432\u0430\u0435\u043c:<\/p>\n<ul>\n<li><a href=\"http:\/\/jackrabbit.apache.org\/downloads.html\">Apache Jackrabbit<\/a> \u0438 \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0435\u043d\u043d\u043e Java (\u0434\u043b\u044f \u043a\u0430\u0436\u0434\u043e\u0433\u043e \u0434\u0438\u0441\u0442\u0440\u0438\u0431\u0443\u0442\u0438\u0432\u0430 \u0441\u0432\u043e\u0439 \u0441\u043f\u043e\u0441\u043e\u0431 \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0438). \u0412 \u043a\u043e\u0440\u043d\u0435 \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043b\u0435\u043d\u043d\u043e\u0439 CMF \u0434\u043e\u043b\u0436\u0435\u043d \u0431\u044b\u0442\u044c \u0441\u043a\u0440\u0438\u043f\u0442 <code>jack<\/code>, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0441\u043a\u0430\u0447\u0430\u0435\u0442 \u0438 \u043f\u043e\u043c\u043e\u0436\u0435\u0442 \u0437\u0430\u043f\u0443\u0441\u0442\u0438\u0442\u044c Jackrabbit \u0431\u0435\u0437 \u043b\u0438\u0448\u043d\u0438\u0445 \u0442\u0435\u043b\u043e\u0434\u0432\u0438\u0436\u0435\u043d\u0438\u0439. \u041c\u043e\u0436\u043d\u043e \u0432\u043e\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c\u0441\u044f \u0438\u043c, \u043d\u043e Java \u0441\u0442\u0430\u0432\u0438\u0442\u044c \u0432\u0441\u0435 \u0440\u0430\u0432\u043d\u043e \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u043e.<\/li>\n<li><a href=\"http:\/\/midgard-project.org\/phpcr\/\">Midgard2 PHPCR<\/a> \u0438 \u0435\u0433\u043e \u0440\u0430\u0441\u0448\u0438\u0440\u0435\u043d\u0438\u0435 \u0434\u043b\u044f PHP. \u041a \u0441\u043e\u0436\u0430\u043b\u0435\u043d\u0438\u044e, \u043f\u0430\u043a\u0435\u0442\u043e\u0432 \u0434\u043b\u044f \u044d\u0442\u043e\u0433\u043e \u043f\u043e\u043a\u0430 \u043c\u0430\u043b\u043e: \u043e\u043d\u0438 \u043b\u0438\u0431\u043e \u043f\u043e\u043c\u0435\u0447\u0435\u043d\u044b, \u043a\u0430\u043a \u043d\u0435\u0441\u0442\u0430\u0431\u0438\u043b\u044c\u043d\u044b\u0435 (\u044f \u0431\u0440\u0430\u043b \u0432 sid \u0432 \u0441\u043b\u0443\u0447\u0430\u0435 \u0441 Debian), \u043b\u0438\u0431\u043e \u0441\u043e\u0431\u0440\u0430\u043d\u044b \u0434\u0430\u043b\u0435\u043a\u043e \u043d\u0435 \u043f\u043e\u0434 \u0432\u0441\u0435 \u043f\u043b\u0430\u0442\u0444\u043e\u0440\u043c\u044b, \u043b\u0438\u0431\u043e \u0441\u043e\u0431\u0440\u0430\u043d\u044b, \u043d\u043e \u0434\u043b\u044f \u0443\u0441\u0442\u0430\u0440\u0435\u0432\u0448\u0438\u0445 \u0432\u0435\u0440\u0441\u0438\u0439 \u041e\u0421. \u0412 \u0446\u0435\u043b\u043e\u043c, \u0435\u0441\u043b\u0438 \u043f\u043e\u0438\u0441\u043a\u0430\u0442\u044c, \u043c\u043e\u0436\u043d\u043e \u043d\u0430\u0439\u0442\u0438 \u0438 RPM, \u0438 deb-\u043f\u0430\u043a\u0435\u0442\u044b. \u041d\u0430 \u043a\u0440\u0430\u0439\u043d\u0438\u0439 \u0441\u043b\u0443\u0447\u0430\u0439 \u0440\u0430\u0441\u0448\u0438\u0440\u0435\u043d\u0438\u0435 \u043c\u043e\u0436\u043d\u043e \u0441\u043e\u0431\u0440\u0430\u0442\u044c \u0438\u0437 <a href=\"https:\/\/github.com\/midgardproject\/midgard-php5\">\u0438\u0441\u0445\u043e\u0434\u043d\u0438\u043a\u043e\u0432<\/a>, \u043d\u043e \u0434\u0435\u043b\u043e \u0431\u0435\u0441\u043f\u043e\u043b\u0435\u0437\u043d\u043e\u0435 \u2014 \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u043a\u0430 Midgard2 \u0432 CMF \u0432\u0441\u0435 \u0435\u0449\u0435 \u0441\u043b\u043e\u043c\u0430\u043d\u0430.<\/li>\n<\/ul>\n<p>  \u0422\u0430\u043a\u0436\u0435 \u0432 \u043f\u0430\u043f\u043a\u0435 \u0441 \u0441\u044d\u043d\u0434\u0431\u043e\u043a\u0441\u043e\u043c \u043b\u0435\u0436\u0438\u0442 \u043d\u0430\u043f\u0438\u0441\u0430\u043d\u043d\u044b\u0439 \u043c\u043d\u043e\u0439 \u0441\u043a\u0440\u0438\u043f\u0442 <code>switch_backends.py<\/code>, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0441\u0430\u043c \u043f\u043e\u0434\u043c\u0435\u043d\u0438\u0442 \u043a\u043e\u043d\u0444\u0438\u0433 \u043d\u0430 \u043d\u0443\u0436\u043d\u044b\u0439 (\u043e\u0440\u0438\u0433\u0438\u043d\u0430\u043b\u044c\u043d\u044b\u0435 \u0444\u0430\u0439\u043b\u044b \u043f\u0440\u0430\u0432\u044f\u0442\u0441\u044f \u0432 <code>app\/config\/phpcr\/<\/code>) \u0438 \u043f\u043e\u0447\u0438\u0441\u0442\u0438\u0442 production-\u043a\u044d\u0448, \u0447\u0442\u043e\u0431 \u0432\u0441\u0435 \u044d\u0442\u043e \u0432\u0437\u043b\u0435\u0442\u0435\u043b\u043e. \u041f\u043e \u043f\u043e\u043d\u044f\u0442\u043d\u044b\u043c \u043f\u0440\u0438\u0447\u0438\u043d\u0430\u043c \u044f \u043f\u043e\u043a\u0430 \u0437\u0430\u043a\u043e\u043c\u043c\u0435\u043d\u0442\u0438\u0440\u043e\u0432\u0430\u043b midgard-\u0432\u0430\u0440\u0438\u0430\u043d\u0442\u044b \u2014 \u0432\u0441\u0435 \u0440\u0430\u0432\u043d\u043e \u043e\u043d\u0438 \u043d\u0435 \u0440\u0430\u0431\u043e\u0442\u0430\u044e\u0442.<\/p>\n<p>  \u0425\u043e\u0447\u0443 \u043f\u0440\u0435\u0434\u043e\u0441\u0442\u0435\u0440\u0435\u0447\u044c \u043e\u0442 \u0441\u043e\u0431\u043b\u0430\u0437\u043d\u0430 \u043d\u0430\u0431\u0440\u0430\u0442\u044c \u0432 \u043a\u043e\u043d\u0441\u043e\u043b\u0438 <code>git pull<\/code> \u0438\u043b\u0438 <code>composer update<\/code> \u2014 \u043a\u0430\u043a \u044f \u0443\u0436\u0435 \u0433\u043e\u0432\u043e\u0440\u0438\u043b \u0432 \u043d\u0430\u0447\u0430\u043b\u0435 \u0441\u0442\u0430\u0442\u044c\u0438, \u043f\u0440\u0430\u0432\u043a\u0438 \u0432 master-\u0432\u0435\u0442\u043a\u0435 \u043d\u0430\u0440\u0443\u0448\u0430\u044e\u0442 \u0440\u0430\u0431\u043e\u0442\u043e\u0441\u043f\u043e\u0441\u043e\u0431\u043d\u043e\u0441\u0442\u044c \u0441\u0438\u0441\u0442\u0435\u043c\u044b, \u0436\u0434\u0438\u0442\u0435 \u043e\u0447\u0435\u0440\u0435\u0434\u043d\u043e\u0433\u043e \u0441\u0442\u0430\u0431\u0438\u043b\u044c\u043d\u043e\u0433\u043e \u0440\u0435\u043b\u0438\u0437\u0430.<\/p>\n<h3>\u0420\u0435\u0437\u044e\u043c\u0435<\/h3>\n<p>  \u0418\u0442\u0430\u043a, \u043d\u0435\u0441\u043c\u043e\u0442\u0440\u044f \u043d\u0430 \u043c\u043d\u043e\u0433\u043e\u0447\u0438\u0441\u043b\u0435\u043d\u043d\u044b\u0435 \u00ab\u043d\u043e\u00bb, \u043f\u0440\u043e\u0435\u043a\u0442 \u0432\u044b\u0433\u043b\u044f\u0434\u0438\u0442 \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u043e. \u041d\u0430 \u0443\u0434\u0438\u0432\u043b\u0435\u043d\u0438\u0435 \u0443\u0434\u0430\u0447\u043d\u043e \u0440\u0435\u0448\u0435\u043d\u044b \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0444\u0443\u043d\u0434\u0430\u043c\u0435\u043d\u0442\u0430\u043b\u044c\u043d\u044b\u0435 \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u044b \u043a\u043e\u043d\u0442\u0435\u043d\u0442-\u043c\u0435\u043d\u0435\u0434\u0436\u043c\u0435\u043d\u0442\u0430 (\u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440 \u043c\u043d\u043e\u0433\u043e\u044f\u0437\u044b\u0447\u043d\u043e\u0441\u0442\u044c \u0438 \u043c\u0430\u0440\u0448\u0440\u0443\u0442\u0438\u0437\u0430\u0446\u0438\u044f\/\u043c\u0435\u043d\u044e). \u0420\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0430 \u043c\u0435\u0434\u043b\u0435\u043d\u043d\u043e \u0432\u0435\u0434\u0435\u0442\u0441\u044f \u043a\u0440\u0430\u0439\u043d\u0435 \u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0435\u043d\u043d\u044b\u043c \u043a\u0440\u0443\u0433\u043e\u043c \u043b\u044e\u0434\u0435\u0439, \u0443 \u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u0438 \u0431\u0435\u0437 \u0442\u043e\u0433\u043e \u0435\u0441\u0442\u044c \u0440\u0430\u0431\u043e\u0442\u0430, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u0441\u0435\u0439\u0447\u0430\u0441 \u043b\u0443\u0447\u0448\u0430\u044f \u043f\u043e\u043c\u043e\u0449\u044c \u2014 \u0444\u043e\u0440\u043a \u043d\u0430 \u0433\u0438\u0442\u0445\u0430\u0431\u0435 \u0438 \u043f\u043e\u043b\u0435\u0437\u043d\u044b\u0439 \u043f\u0443\u043b\u043b-\u0440\u0435\u043a\u0432\u0435\u0441\u0442, \u0431\u0443\u0434\u044c \u0442\u043e \u043f\u0440\u0430\u0432\u043a\u0430 \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0430\u0446\u0438\u0438 \u0438\u043b\u0438 \u0438\u0441\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u0435 \u043e\u0448\u0438\u0431\u043e\u043a. \u041f\u043e\u043f\u0443\u043b\u044f\u0440\u0438\u0437\u0430\u0446\u0438\u044f CMF \u0442\u043e\u043b\u044c\u043a\u043e \u0432\u043f\u0435\u0440\u0435\u0434\u0438 (\u043f\u043e\u043f\u0440\u043e\u0431\u0443\u0439\u0442\u0435 \u043f\u043e\u0438\u0441\u043a\u0430\u0442\u044c \u0432 \u0441\u0435\u0442\u0438 \u043c\u0430\u0442\u0435\u0440\u0438\u0430\u043b\u044b, \u0438\u0445 \u043f\u0440\u0430\u043a\u0442\u0438\u0447\u0435\u0441\u043a\u0438 \u043d\u0435\u0442), \u0432\u0441\u044f \u043d\u0430\u0434\u0435\u0436\u0434\u0430 \u0442\u043e\u043b\u044c\u043a\u043e \u043d\u0430 \u043e\u043f\u0435\u043d\u0441\u043e\u0440\u0441 \u0438 \u043a\u043e\u043c\u043c\u044c\u044e\u043d\u0438\u0442\u0438.<\/p>\n<p>  \u0418\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0441\u0435\u0439\u0447\u0430\u0441 CMF \u0432 \u043f\u0440\u043e\u0434\u0430\u043a\u0448\u0435\u043d\u0435 \u043c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c \u0440\u0438\u0441\u043a\u043e\u0432\u043e, \u043d\u043e \u0442\u0435\u043c \u043c\u0435\u043d\u0435\u0435, \u0441\u0442\u043e\u0438\u0442 \u0431\u044b\u0442\u044c \u0432 \u043a\u0443\u0440\u0441\u0435. \u041a\u0442\u043e \u0435\u0433\u043e \u0437\u043d\u0430\u0435\u0442, \u043c\u043e\u0436\u0435\u0442 \u0441 <a href=\"http:\/\/fabien.potencier.org\/article\/71\/sensiolabs-raises-5-million-euros-to-boost-the-symfony-ecosystem\">\u0442\u0435\u0445 \u043c\u0438\u043b\u043b\u0438\u043e\u043d\u043e\u0432 \u0435\u0432\u0440\u043e<\/a> \u0447\u0442\u043e-\u043d\u0438\u0431\u0443\u0434\u044c \u0441\u044e\u0434\u0430 \u043f\u0435\u0440\u0435\u043f\u0430\u0434\u0435\u0442 \u0438 \u0447\u0435\u0440\u0435\u0437 \u043f\u0430\u0440\u0443 \u043b\u0435\u0442 \u043c\u044b \u0443\u0432\u0438\u0434\u0438\u043c \u0437\u0430\u043c\u0435\u0447\u0430\u0442\u0435\u043b\u044c\u043d\u044b\u0439 \u043f\u0440\u043e\u0434\u0443\u043a\u0442?<\/p>\n<p>  \u041d\u0430 \u044d\u0442\u043e\u043c \u0432\u0441\u0435. \u041d\u0435\u0431\u043e\u043b\u044c\u0448\u043e\u0439 \u0441\u043f\u0438\u0441\u043e\u043a \u043f\u043e\u043b\u0435\u0437\u043d\u044b\u0445 \u0441\u0441\u044b\u043b\u043e\u043a:<\/p>\n<ul>\n<li><a href=\"http:\/\/symfony.com\/doc\/current\/cmf\/index.html\">\u0414\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0430\u0446\u0438\u044f \u043f\u043e CMF<\/a><\/li>\n<li><a href=\"http:\/\/cmf.symfony.com\/\">\u0421\u0430\u0439\u0442 \u043f\u0440\u043e\u0435\u043a\u0442\u0430<\/a><\/li>\n<li><a href=\"https:\/\/github.com\/symfony-cmf\/symfony-cmf\/wiki\/Roadmap\">Roadmap<\/a><\/li>\n<li><a href=\"http:\/\/symfony.com\/doc\/current\/cmf\/contributing\/index.html\">\u0414\u043b\u044f \u0436\u0435\u043b\u0430\u044e\u0449\u0438\u0445 \u043f\u043e\u0443\u0447\u0430\u0441\u0442\u0432\u043e\u0432\u0430\u0442\u044c \u0432 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0435<\/a><\/li>\n<\/ul>\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\/211086\/\"> http:\/\/habrahabr.ru\/post\/211086\/<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<div class=\"content html_format\">   \t<img decoding=\"async\" src=\"http:\/\/habrastorage.org\/getpro\/habr\/post_images\/606\/322\/bce\/606322bce0a894b6cd0dda6f92c2e3a7.png\" alt=\"image\" align=\"left\"\/>\u041f\u0440\u043e\u0434\u043e\u043b\u0436\u0438\u043c \u0440\u0430\u0437\u0433\u043b\u044f\u0434\u044b\u0432\u0430\u0442\u044c <a href=\"http:\/\/cmf.sandbox.com\">Symfony CMF<\/a>, \u0440\u0435\u0430\u043b\u0438\u0437\u0443\u044e\u0449\u0443\u044e \u043a\u043e\u043d\u0446\u0435\u043f\u0446\u0438\u044e \u043f\u043b\u0430\u0442\u0444\u043e\u0440\u043c\u044b \u0434\u043b\u044f \u043f\u043e\u0441\u0442\u0440\u043e\u0435\u043d\u0438\u044f CMS \u0438\u0437 \u0441\u043b\u0430\u0431\u043e\u0441\u0432\u044f\u0437\u0430\u043d\u043d\u044b\u0445 \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u043e\u0432. \u0412 <a href=\"http:\/\/habrahabr.ru\/post\/197524\/\">\u043f\u0435\u0440\u0432\u043e\u0439 \u0447\u0430\u0441\u0442\u0438<\/a> \u0441\u0442\u0430\u0442\u044c\u0438 \u043c\u044b \u043f\u043e\u0434\u0440\u043e\u0431\u043d\u043e \u0440\u0430\u0441\u0441\u043c\u043e\u0442\u0440\u0435\u043b\u0438 \u0441\u0445\u0435\u043c\u0443 \u0445\u0440\u0430\u043d\u0435\u043d\u0438\u044f \u0438 \u0434\u043e\u0441\u0442\u0443\u043f\u0430 \u043a \u0434\u0430\u043d\u043d\u044b\u043c, \u0432\u043e \u0432\u0442\u043e\u0440\u043e\u0439 \u0447\u0430\u0441\u0442\u0438 \u043d\u0430\u0441 \u0436\u0434\u0435\u0442 \u0432\u0441\u0435 \u043e\u0441\u0442\u0430\u043b\u044c\u043d\u043e\u0435. <\/p>\n<p>  \u041f\u0440\u043e\u0434\u043e\u043b\u0436\u0435\u043d\u0438\u0435 \u0441\u0442\u0430\u0442\u044c\u0438 \u0432\u044b\u0445\u043e\u0434\u0438\u0442 \u0441\u043e \u0437\u043d\u0430\u0447\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0439 \u0437\u0430\u0434\u0435\u0440\u0436\u043a\u043e\u0439 \u0438\u0437-\u0437\u0430 \u043c\u043e\u0435\u0439 \u043b\u0435\u043d\u0438, \u043f\u0440\u043e\u0431\u043b\u0435\u043c \u0441\u043e \u0437\u0434\u043e\u0440\u043e\u0432\u044c\u0435\u043c \u0438 \u0438\u043d\u0442\u0435\u0440\u043d\u0435\u0442\u043e\u043c. \u0417\u0430 \u044d\u0442\u0438 \u043f\u0430\u0440\u0443 \u043c\u0435\u0441\u044f\u0446\u0435\u0432 \u0441\u0438\u0441\u0442\u0435\u043c\u0430 \u0434\u043e\u0440\u043e\u0441\u043b\u0430 \u0434\u043e \u0432\u0435\u0440\u0441\u0438\u0438 1.0.0, \u0438 \u0432\u0441\u0435 \u043f\u043e\u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0435 \u043f\u0440\u0430\u0432\u043a\u0438 \u0432 master-\u0432\u0435\u0442\u043a\u0435 \u0437\u0430\u0447\u0435\u043c-\u0442\u043e \u043b\u043e\u043c\u0430\u044e\u0442 \u0440\u0430\u0431\u043e\u0442\u0443 \u0441\u0438\u0441\u0442\u0435\u043c\u044b, \u043d\u0435 \u0431\u0443\u0434\u0443\u0447\u0438 \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u043c\u0438. \u041d\u0430 \u0441\u043b\u0443\u0447\u0430\u0439, \u0435\u0441\u043b\u0438 \u043a\u0442\u043e \u0437\u0430\u0445\u043e\u0447\u0435\u0442 \u0441\u0442\u0430\u0432\u0438\u0442\u044c \u0441\u0438\u0441\u0442\u0435\u043c\u0443 \u0440\u0443\u043a\u0430\u043c\u0438, \u043f\u043e\u043c\u043d\u0438\u0442\u0435 \u2014 \u043e\u043f\u0438\u0440\u0430\u0439\u0442\u0435\u0441\u044c \u043d\u0430 \u0441\u0442\u0430\u0431\u0438\u043b\u044c\u043d\u044b\u0435 \u0432\u0435\u0440\u0441\u0438\u0438, \u043f\u043e\u043c\u0435\u0447\u0435\u043d\u043d\u044b\u0435 \u0442\u0435\u0433\u0430\u043c\u0438.<\/p>\n<p>  \u0421\u0430\u043c\u044b\u0435 \u043d\u0435\u0442\u0435\u0440\u043f\u0435\u043b\u0438\u0432\u044b\u0435 \u043c\u043e\u0433\u0443\u0442 \u043f\u0440\u043e\u043c\u043e\u0442\u0430\u0442\u044c \u0432\u043d\u0438\u0437, \u0441\u043a\u0430\u0447\u0430\u0442\u044c \u0432\u0438\u0440\u0442\u0443\u0430\u043b\u044c\u043d\u0443\u044e \u043c\u0430\u0448\u0438\u043d\u0443 \u0441 \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043b\u0435\u043d\u043d\u043e\u0439 \u0441\u0438\u0441\u0442\u0435\u043c\u043e\u0439 (\u043f\u043e\u0442\u0440\u0435\u0431\u0443\u0435\u0442\u0441\u044f VirtualBox) \u0438 \u043f\u043e\u0449\u0443\u043f\u0430\u0442\u044c \u0432\u0441\u0435 \u0441\u0430\u043c\u043e\u043c\u0443, \u043d\u043e \u0434\u043b\u044f \u043f\u043e\u043b\u043d\u043e\u0442\u044b \u043e\u043f\u044b\u0442\u0430 \u044f \u0431\u044b \u0440\u0435\u043a\u043e\u043c\u0435\u043d\u0434\u043e\u0432\u0430\u043b \u0441\u043d\u0430\u0447\u0430\u043b\u0430 \u043f\u0440\u043e\u0447\u0438\u0442\u0430\u0442\u044c \u0441\u0442\u0430\u0442\u044c\u044e.<\/p>\n<p>  \u0418\u0442\u0430\u043a. \u0427\u0442\u043e \u0443 \u043d\u0430\u0441 \u043f\u043e \u043f\u043b\u0430\u043d\u0443 \u043f\u043e\u0441\u043b\u0435 \u0445\u0440\u0430\u043d\u0435\u043d\u0438\u044f \u0434\u0430\u043d\u043d\u044b\u0445?  <\/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-211086","post","type-post","status-publish","format-standard","hentry"],"_links":{"self":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/211086","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=211086"}],"version-history":[{"count":0,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/211086\/revisions"}],"wp:attachment":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=211086"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=211086"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=211086"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}