рдЖрдЗрдП рдкрд░рд┐рдпреЛрдЬрдирд╛рдУрдВ рдХреЗ рдмреАрдЪ рдХреЙрдкреА-рдкреЗрд╕реНрдЯ рдХреЛ рд░реЛрдХрдиреЗ рдФрд░ рдХреЛрдб рдХреЛ рдлрд┐рд░ рд╕реЗ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдпреЛрдЧреНрдп рд╕рд┐рдореНрдлрдиреА 5 рдкреНрд▓рдЧ-рдЗрди рдмрдВрдбрд▓ рдореЗрдВ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░рдиреЗ рдХреЗ рддрд░реАрдХреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╛рдд рдХрд░рддреЗ рд╣реИрдВред рдмрдВрдбрд▓ рдХреЗ рд╕рд╛рде рдореЗрд░реЗ рдЕрдиреБрднрд╡ рдХреЛ рд╕рд╛рд░рд╛рдВрд╢рд┐рдд рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рд▓реЗрдЦреЛрдВ рдХреА рдПрдХ рд╢реНрд░реГрдВрдЦрд▓рд╛, рдПрдХ рдиреНрдпреВрдирддрдо рдмрдВрдбрд▓ рдмрдирд╛рдиреЗ рдФрд░ рдкрд░реАрдХреНрд╖рдг рдФрд░ рдмрдВрдбрд▓ рд░рд┐рд▓реАрдЬ рдЪрдХреНрд░ рдХреЗ рд▓рд┐рдП рдПрдХ рдбреЗрдореЛ рдЖрд╡реЗрджрди рдХреЛ рдлрд┐рд░ рд╕реЗ рдмрдирд╛рдиреЗ рд╕реЗ рдЕрднреНрдпрд╛рд╕ рдореЗрдВ рд▓реЗ рдЬрд╛рдПрдЧреАред
рдореЗрдВ рдкрд┐рдЫрд▓реЗ рд▓реЗрдЦ, рд╣рдо рдмрдВрдбрд▓ рдореЗрдВ рдореБрдЦреНрдп рдХреЛрдб рдФрд░ рдЯреЗрдореНрдкрд▓реЗрдЯреНрд╕ рд╣рдЯрд╛ рджрд┐рдпрд╛, рдорд╛рд░реНрдЧ рдФрд░ рдирд┐рд░реНрднрд░рддрд╛ рдЗрдВрдЬреЗрдХреНрд╢рди рдХрдВрдЯреЗрдирд░ рдореЗрдВ рд╕реЗрд╡рд╛рдУрдВ рдХреЗ рд╕рдВрдмрдВрдз рдХреА рд╕реНрдерд╛рдкрдирд╛ рдХреАред рдЗрд╕ рд▓реЗрдЦ рдореЗрдВ, рд╣рдо рдмрдВрдбрд▓ рдХреЛ рд╣реЛрд╕реНрдЯ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдореЗрдВ рдПрдореНрдмреЗрдб рдХрд░реЗрдВрдЧреЗ:
- рдЯреЗрдореНрдкрд▓реЗрдЯ рдПрдХреАрдХрд░рдг: 2 рддрд░реАрдХреЗ
- рдЯреЗрдореНрдкрд▓реЗрдЯ рдПрдХреАрдХрд░рдг: рд╕реНрд╡рддрдВрддреНрд░ рдореЙрдбреНрдпреВрд▓
- рдПрдХ рд╡рд┐рдзрд╛рдирд╕рднрд╛ рдХреЗ рд▓рд┐рдП рдмрдВрдбрд▓ рд╢реИрд▓рд┐рдпреЛрдВ рдХреЛ рдЬреЛрдбрд╝рдирд╛
- рдЯреЗрдореНрдкрд▓реЗрдЯ рдПрдХреАрдХрд░рдг: рд╣реЛрд╕реНрдЯ рдЯреЗрдореНрдкрд▓реЗрдЯреНрд╕ рдореЗрдВ рдПрдореНрдмреЗрдб рдХрд░рдирд╛
- рдУрд╡рд░рд░рд╛рдЗрдбрд┐рдВрдЧ рд╕реНрдЯрд╛рдЗрд▓ рдФрд░ рдЬреЗрдПрд╕
рд╢реНрд░реГрдВрдЦрд▓рд╛ рд╕рд╛рдордЧреНрд░реА рдпрджрд┐ рдЖрдк рдЯреНрдпреВрдЯреЛрд░рд┐рдпрд▓ рдХреЛ рдХреНрд░рдорд┐рдХ рд░реВрдк рд╕реЗ рдкреВрд░рд╛ рдирд╣реАрдВ рдХрд░ рд░рд╣реЗ рд╣реИрдВ, рддреЛ рд░рд┐рдкреЙрдЬрд┐рдЯрд░реА рд╕реЗ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдбрд╛рдЙрдирд▓реЛрдб рдХрд░реЗрдВ:
https://github.com/bravik/symfony-bundles-tutorial/
рдФрд░ 2-basic-refactoring рд╢рд╛рдЦрд╛ рдореЗрдВ рд╕реНрд╡рд┐рдЪ рдХрд░реЗрдВ ред
рдПрдХ рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдХреЛ рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдиреЗ рдФрд░ рд╢реБрд░реВ рдХрд░рдиреЗ рдХреЗ рдирд┐рд░реНрджреЗрд╢ README.md
ред 3-рдПрдХреАрдХрд░рдг
рд╡реЗрдХреНрдЯрд░ рдореЗрдВ рдЖрдкрдХреЛ рдЗрд╕ рд▓реЗрдЦ рдХреЗ рд▓рд┐рдП рдХреЛрдб рдХрд╛ рдЕрдВрддрд┐рдо рд╕рдВрд╕реНрдХрд░рдг рдорд┐рд▓реЗрдЧрд╛ ред
рдЯреЗрдореНрдкрд▓реЗрдЯ рдПрдХреАрдХрд░рдг
, .
. base.html.twig
, -:
{% extends 'base.html.twig' %}
HTML- , . , , - . ?
2 : , .
, .
:
reusability, . base.html.twig
, .
:
include menu.html.twig
тАФ{{ encore_entry_link_tags('host-styles') }}
{{ encore_entry_script_tags('host-app') }}
тАФ entry- , webpack encore
templates/editor/*
:
{% extends 'base.html.twig' %}
{% extends '@Calendar/base.html.twig' %}
. .
, . тАж HTML HTML- .
SCSS, тАФ Symfony Encore ( Symfony, Webpack).
entry-. Entry- тАФ , . webpack.config.js
.
Entry- twig- encore_entry_link_tags(entry-file)
encore_entry_script_tags(entry-file)
, Encore.
entry- . assets
:
cp ./assets ./bundles/CalendarBundle/assets -R
entry-:
mv host-app.js calendar-editor-app.js
mv host-styles.scss calendar-editor-styles.scss
assets/scss/events/_main.scss
calendar-editor-styles.scss
.
, scss/events/calendar.scss
, тАФ . , assets
. hosts-styles.scss
:
@import "../../vendor/bravik/calendar-bundle/assets/scss/widget/calendar";
, calendar-editor-styles.scss
.
WebpackEncore entry- webpack.config.js
:
Encore
.addEntry(
'calendar-editor-app',
'./vendor/bravik/calendar-bundle/assets/js/calendar-editor-app.js'
)
.addStyleEntry(
'calendar-editor-styles',
'./vendor/bravik/calendar-bundle/assets/scss/calendar-editor-styles.scss'
)
, ./bundles/CalendarBundle
, vendors
. composer
. vendors
() .
.
Encore-: npm start
.
тАФ .
- , git- 3-integration .
entry- .
@Calendar/base.html.twig
stylesheets
:
{{ encore_entry_link_tags('calendar-editor-styles') }}
javascripts
:
{{ encore_entry_script_tags('calendar-editor-app') }}

: .
тАФ : , , , , .
:
тАФ , . , , , .
,
?
API? , API? , .
, : , . , .
Symfony . , .
templates
bundles/CalendarBundle
. .
Symfony templates
, templates/bundles/< >
. , templates
.
, templates/bundles/CalendarBundle
, .
base.html.twig
. :
cp ./bundles/CalendarBundle/templates/base.html.twig ./templates/bundles/CalendarBundle/base.html.twig
. <body>
:
{% include 'menu.html.twig' %}
, тАФ !
, . , . .
. , . , . .
templates/bundles/CalendarBundle/base.html.twig
:
{% extends 'base.html.twig' %}
base.html.twig
тАФ .
HTML . , , . , .
{% extends 'base.html.twig' %}
{% block title %} {% endblock %}
{% block stylesheets %}
{{ parent() }}
{{ encore_entry_link_tags('calendar-editor-styles') }}
{% endblock %}
{% block javascripts %}
{{ parent() }}
{{ encore_entry_script_tags('calendar-editor-app') }}
{% endblock %}
{{ parent() }}
, :
, . .
тАФ .
, . :
{% extends 'base.html.twig' %}
{% block title %}
{%- block calendar_title %} {% endblock -%}
{% endblock %}
{% block stylesheets %}
{{ parent() }}
{{ encore_entry_link_tags('calendar-editor-styles') }}
{% block calendar_styles %}{% endblock %}
{% endblock %}
{% block body %}
{%- block calendar_body %}{% endblock -%}
{% endblock %}
{% block javascripts %}
{{ parent() }}
{{ encore_entry_script_tags('calendar-editor-app') }}
{% block calendar_scripts %}{% endblock %}
{% endblock %}
, , / .
entry- .
, , , entry-, .
, overriden-calendar-styles.scss
:
//
@import "../../vendor/bravik/calendar/assets/scss/calendar-styles";
//
@import "calendar/customizations";
entry- , .
- , entry- -. , .
JavaScript
entry- JavaScript.
JS-. entry- :
import CalendarApp from "../calendar/CalendarApp";
global.bravikCalendar = new CalendarApp();
global.bravikCalendar.init();
Entry- . , .
, CalendarApp
.
, . :
import CalendarApp from "../../vendor/bravik/calendar/assets/js/calendar/CalendarApp";
import myCustomLogic from "./MyCutomLogic";
global.bravikCalendar = new CalendarApp();
global.bravikCalendar.registerSomeCustomLogic(myCustomLogic);
global.bravikCalendar.init();
-: - , JS , . , ┬л┬╗ .
3-integration.
, .
:
рднрд╛рдЧ 1. рдиреНрдпреВрдирддрдо рдмрдВрдбрд▓
рднрд╛рдЧ 2. рд╣рдо рдХреЛрдб рдФрд░ рдЯреЗрдореНрдкрд▓реЗрдЯреНрд╕ рдХреЛ рдмрдВрдбрд▓ рдореЗрдВ рдирд┐рдХрд╛рд▓рддреЗ рд╣реИрдВред
рднрд╛рдЧ 3. рдореЗрдЬрдмрд╛рди рдХреЗ рд╕рд╛рде рдмрдВрдбрд▓ рдХрд╛ рдПрдХреАрдХрд░рдг: рдЯреЗрдореНрдкрд▓реЗрдЯреНрд╕, рд╢реИрд▓реА, JS
рднрд╛рдЧ 4. рдмрдВрдбрд▓ рдХреЗ рд╡рд┐рд╕реНрддрд╛рд░ рдХреЗ рд▓рд┐рдП рдЗрдВрдЯрд░рдлрд╝реЗрд╕
5. рдкреИрд░рд╛рдореАрдЯрд░ рдФрд░ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди
рднрд╛рдЧ 6. рдкрд░реАрдХреНрд╖рдг, рдмрдВрдбрд▓ рднрд╛рдЧ 7 рдХреЗ рдЕрдВрджрд░ рд╕реВрдХреНрд╖реНрдо рдкрд░реАрдХреНрд╖рдгред
рд░рд┐рд▓реАрдЬ рдЪрдХреНрд░, рд╕реНрдерд╛рдкрдирд╛ рдФрд░ рдЕрджреНрдпрддрди