рдЖрдЗрдП рдкрд░рд┐рдпреЛрдЬрдирд╛рдУрдВ рдХреЗ рдмреАрдЪ рдХреЙрдкреА-рдкреЗрд╕реНрдЯ рдХреЛ рд░реЛрдХрдиреЗ рдФрд░ рдХреЛрдб рдХреЛ рдлрд┐рд░ рд╕реЗ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдпреЛрдЧреНрдп рд╕рд┐рдореНрдлрдиреА 5 рдкреНрд▓рдЧ-рдЗрди рдмрдВрдбрд▓ рдореЗрдВ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░рдиреЗ рдХреЗ рддрд░реАрдХреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╛рдд рдХрд░рддреЗ рд╣реИрдВред рдмрдВрдбрд▓ рдХреЗ рд╕рд╛рде рдореЗрд░реЗ рдЕрдиреБрднрд╡ рдХреЛ рд╕рд╛рд░рд╛рдВрд╢рд┐рдд рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рд▓реЗрдЦреЛрдВ рдХреА рдПрдХ рд╢реНрд░реГрдВрдЦрд▓рд╛, рдПрдХ рдиреНрдпреВрдирддрдо рдмрдВрдбрд▓ рдмрдирд╛рдиреЗ рдФрд░ рдкрд░реАрдХреНрд╖рдг рдФрд░ рдмрдВрдбрд▓ рд░рд┐рд▓реАрдЬ рдЪрдХреНрд░ рдХреЗ рд▓рд┐рдП рдПрдХ рдбреЗрдореЛ рдЖрд╡реЗрджрди рдХреЛ рдлрд┐рд░ рд╕реЗ рдмрдирд╛рдиреЗ рд╕реЗ рдЕрднреНрдпрд╛рд╕ рдореЗрдВ рд▓реЗ рдЬрд╛рдПрдЧреАред
рдореЗрдВ рдкрд┐рдЫрд▓реЗ рд▓реЗрдЦ, рд╣рдо рджреЛ рдлрд╝рд╛рдЗрд▓реЛрдВ рдХрд╛ рдПрдХ рдиреНрдпреВрдирддрдо рдмрдВрдбрд▓ рдмрдирд╛рдпрд╛ рд╣реИ рдФрд░ рдЗрд╕ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдореЗрдВ рдпрд╣ рднреА рд╢рд╛рдорд┐рд▓ рдереЗред
рдЗрд╕ рд▓реЗрдЦ рдореЗрдВ:
- рдмрдВрдбрд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкреЛрд░реНрдЯрд┐рдВрдЧ рдХреЛрдб
- рдирд┐рд░реНрднрд░рддрд╛ рдЗрдВрдЬреЗрдХреНрд╢рди: рдбрд┐ рдХрдВрдЯреЗрдирд░ рдореЗрдВ рдмрдВрдбрд▓ рд╕реЗрд╡рд╛рдУрдВ рдХреЛ рдкрдВрдЬреАрдХреГрдд рдХрд░рдирд╛
- рдирд┐рдпрдВрддреНрд░рдХреЛрдВ рдХреЛ рдорд╛рдЗрдЧреНрд░реЗрдЯ рдХрд░рдирд╛ рдФрд░ рд░реВрдЯрд┐рдВрдЧ рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдирд╛
- рд╕рдВрд╕рд╛рдзрди рдкрде рдирд┐рд░реНрдзрд╛рд░рдг рддрдВрддреНрд░
- рдмрдВрдбрд▓реЛрдВ рдХреЛ рдЯреЗрдореНрдкрд▓реЗрдЯ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░рдирд╛
рд╢реНрд░реГрдВрдЦрд▓рд╛ рд╕рд╛рдордЧреНрд░реА рдпрджрд┐ рдЖрдк рдЯреНрдпреВрдЯреЛрд░рд┐рдпрд▓ рдХреЛ рдХреНрд░рдорд┐рдХ рд░реВрдк рд╕реЗ рдкреВрд░рд╛ рдирд╣реАрдВ рдХрд░ рд░рд╣реЗ рд╣реИрдВ, рддреЛ рд░рд┐рдкреЙрдЬрд┐рдЯрд░реА рд╕реЗ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдбрд╛рдЙрдирд▓реЛрдб рдХрд░реЗрдВ рдФрд░ 1-рдмрдВрдбрд▓-рдореЙрдХ рд╢рд╛рдЦрд╛ рдореЗрдВ рд╕реНрд╡рд┐рдЪ рдХрд░реЗрдВ ред
рдПрдХ рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдХреЛ рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдиреЗ рдФрд░ рд╢реБрд░реВ рдХрд░рдиреЗ рдХреЗ рдирд┐рд░реНрджреЗрд╢ README.md
ред
2-рдмреЗрд╕рд┐рдХ-рд░реАрдлреИрдХреНрдЯрд░рд┐рдВрдЧ рд╢рд╛рдЦрд╛ рдореЗрдВ рдЖрдкрдХреЛ рдЗрд╕ рд▓реЗрдЦ рдХреЗ рд▓рд┐рдП рдХреЛрдб рдХрд╛ рдЕрдВрддрд┐рдо рд╕рдВрд╕реНрдХрд░рдг рдорд┐рд▓реЗрдЧрд╛ ред
рдЖрдЗрдП рд░рд┐рдлреНрд▓реЗрдХреНрдЯрд┐рдВрдЧ рдХреЗ рд▓рд┐рдП рдЖрдЧреЗ рдмрдврд╝реЗрдВред
рд╣рдо рдореБрдЦреНрдп рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЛ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░рддреЗ рд╣реИрдВ
рдПрдХ рдмрдВрдбрд▓ рдореЗрдВ рдирд┐рдпрдорд┐рдд рд░реВрдк рд╕реЗ рд╕рд┐рдореНрдлрдиреА рдЕрдиреБрдкреНрд░рдпреЛрдЧреЛрдВ рдХреЗ рд░реВрдк рдореЗрдВ рд╕рднреА рд╕рдорд╛рди рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВ: рдирд┐рдХрд╛рдп, рдирд┐рдпрдВрддреНрд░рдХ рдФрд░ рдЖрджреЗрд╢, рдЯреЗрдореНрдкрд▓реЗрдЯ, рд╕рдВрдкрддреНрддрд┐, рдкрд░реАрдХреНрд╖рдг, рдФрд░ рдХреЛрдИ рдЕрдиреНрдп рдХреЛрдбред
, , bundles/CalendarBundle/src
( ):
# Crate dirs
cd bundles/CalendarBundle/src/
mkdir Controller Entity Service
cd ../../../src
# Move files
mv Form Repository ../bundles/CalendarBundle/src/
mv Controller/EditorController.php Controller/EventController.php ../bundles/CalendarBundle/src/Controller
mv Entity/Event.php ../bundles/CalendarBundle/src/Entity
mv Service/EventExporter ../bundles/CalendarBundle/src/Service/EventExporter
mv Twig ../bundles/CalendarBundle/src/Twig

, . namespace
use
App\
bravik\CalendarBundle\
.
App\
: .
IDE .
IDE PhpStorm Ctrl/Cmd + Shift + R
.
use App\Repository\EventRepository
SiteController

.
:

SiteController
: EventRepository
. autowiring Symfony typehints DI-.
src/Services
, .
Dependency Injection
, DI- , .
, .
, Symfony- services.yaml
, DI-.
src
config/services.yaml
:
parameters:
#
services:
#
_defaults:
#
# typehints ( )
# https://symfony.com/doc/current/service_container.html#the-autowire-option
autowire: true
# :
#
# https://symfony.com/doc/current/service_container.html#the-autoconfigure-option
autoconfigure: true
# DI-
bravik\CalendarBundle\Repository\EventRepository: ~
bravik\CalendarBundle\Controller\EventController: ~
bravik\CalendarBundle\Controller\EditorController: ~
3 .
- config/services.yaml
, .
@todo
:
# Twig
bravik\CalendarBundle\Twig\TwigRuDateFilter: ~
# EventExporter DI-
bravik\CalendarBundle\Service\EventExporter\:
resource: '../src/Service/EventExporter/*'
# ExporterProvider DI-
# 2
bravik\CalendarBundle\Service\EventExporter\ExporterManager:
arguments:
$exporters:
- '@bravik\CalendarBundle\Service\EventExporter\Exporters\GoogleCalendarExporter'
- '@bravik\CalendarBundle\Service\EventExporter\Exporters\ICalendarExporter'
, , . , . src
DependencyInjection/CalendarExtension.php
:
<?php
namespace bravik\CalendarBundle\DependencyInjection;
use Exception;
use Symfony\Component\DependencyInjection\ContainerBuilder;
use Symfony\Component\DependencyInjection\Extension\Extension;
class CalendarExtension extends Extension
{
public function load(array $configs, ContainerBuilder $container)
{
}
}
. <BundleName>Extension
, src/DependencyInjection
Symfony\Component\DependencyInjection\Extension\Extension
.
Symfony DI-, Extension-. , Extension::load()
.
, . , PHP-. .
services.yaml
:
public function load(array $configs, ContainerBuilder $container)
{
$loader = new YamlFileLoader(
$container,
new FileLocator(__DIR__.'/../../config')
);
$loader->load('services.yaml');
}
, :

.
Symfony :
config/routes.yaml #
config/routes/annotations.yaml # ,
#
. annotations.yaml
:
controllers: #
type: annotation #
resource: ../../src/Controller/ # ,
: config/routes.yaml
.
calendar_routes:
type: annotation
resource: '../src/Controller/'
config/routes/annotations.yaml
.
:
calendar_bundle:
resource: '@CalendarBundle/config/routes.yaml'
.
@CalendarBundle
тАФ .
Symfony .
, /admin
- : /admin ?
, :
calendar_bundle:
resource: '@CalendarBundle/config/routes.yaml'
prefix: /admin
name_prefix: cms.
security
. , .
, Symfony vendor_name_
. .
, Twig ┬л┬╗ .
:
@<BundleName>Bundle/path/to/config
тАФ@<BundleName>/path/to/template
тАФ .
Symfony ┬л ┬╗. . .
./src
. , Symfony 4 src/Resources
. 4 Symfony , тАФ . , .
CalendarBundle
getPath()
:
public function getPath(): string
{
return dirname(__DIR__);
}
@CalendarBundle
.
, !

? .
. , , -.
templates
templates/event
:
mkdir bundles/CalendarBundle/templates
mv templates/event/* bundles/CalendarBundle/templates
тАФ , . .
┬л ┬╗ IDE . event/
@Calendar/
.

@Calendar
Twig , namespace Twig. templates
, Symfony namespace, templates
Resources/views
( ).
site/index.html.twig
twig-. :

, тАФ .
: base.html.twig
-:
{% extends 'base.html.twig' %}
.
, , DI-. Example Project 2-basic-refactoring.
- , тАФ namespace .
App
- , тАФ Extension-. DI- . , .
- . . .
- , , .., ┬л┬╗ , . .
, JS -.
:
1.
2.
3. : , , JS
4.
5.
6. ,
7. ,