рд╕рд┐рдореНрдлрдиреА 2.4 рдПрдХ рдирдП рдШрдЯрдХ рдХрд╛ рдкрд░рд┐рдЪрдп рджреЗрддрд╛ рд╣реИ -
рдПрдХреНрд╕рдкреНрд░реЗрд╢рдирд▓рдВрдЧреЗрдЬ ред рдШрдЯрдХ "рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐рдпреЛрдВ" рдХреЛ рд╕рдВрдХрд▓рд┐рдд рдХрд░рдиреЗ рдФрд░ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдЗрдВрдЬрди рд╣реИред
рдпрд╣ рднрд╛рд╖рд╛ рдЯреНрд╡рд┐рдЧ рдХрд╛ рдЫреАрди рд▓рд┐рдпрд╛ рдЧрдпрд╛ рд╕рдВрд╕реНрдХрд░рдг рд╣реИред рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐рдпрд╛рдБ рдПрдХ рдкрдВрдХреНрддрд┐ рдореЗрдВ рдлрд┐рдЯ рд╣реЛрддреА рд╣реИрдВ рдФрд░ рдЖрдорддреМрд░ рдкрд░ рдмреВрд▓рд┐рдпрди рдорд╛рди рд▓реМрдЯрд╛рддреА рд╣реИрдВ, рд▓реЗрдХрд┐рди рдпрд╣ рд╕реАрдорд┐рдд рдирд╣реАрдВ рд╣реИрдВред
рдЯрд╣рдиреА рдХреЗ рд╡рд┐рдкрд░реАрдд, рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ рд╡рд┐рдЪрд▓рди рджреЛ рдореЛрдб рдореЗрдВ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ:
- рд╕рдВрдХрд▓рди: рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ рдХреЛ рдмрд╛рдж рдХреЗ рдирд┐рд╖реНрдкрд╛рджрди рдХреЗ рд▓рд┐рдП PHP рдХреЛрдб рдореЗрдВ рд╕рдВрдХрд▓рд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ (рдХреЛрдб рд░рдирдЯрд╛рдЗрдо рдкрд░ рдирд┐рд░реНрднрд░ рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ)
- рдирд┐рд╖реНрдкрд╛рджрди: рдкреНрд░рд╛рд░рдВрднрд┐рдХ рд╕рдВрдХрд▓рди рдХреЗ рдмрд┐рдирд╛ рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХреА рдЬрд╛рддреА рд╣реИ
PHP рдХреЛрдб рдореЗрдВ рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐рдпреЛрдВ рдХреЛ рд╕рдВрдХрд▓рд┐рдд рдХрд░рдирд╛ рд╕рдВрднрд╡ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдЬрд┐рд╕реЗ рдЪрд▓рд╛рдиреЗ рдХреЗ рд╕рдордп рдСрдкрд░реЗрдЯрд░ рдХреЛ рд╕рдВрд╢реЛрдзрд┐рдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИ
.
рдпрд╣ рд╕реНрдкрд╖реНрдЯ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП рдФрд░ рдХреЗрд╡рд▓ рдПрдХ рд╣реА рд╕рдВрднрд╡ рд╡реНрдпрд╡рд╣рд╛рд░ рдХрд╛ рдорддрд▓рдм рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП:
foo.bar
- рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЗ рдЧреБрдгреЛрдВ рдХреЗ рд▓рд┐рдП, рд╕рд░рдгреА рдХреЛ
foo.getBar()
рдХреЙрд▓ рдХрд░рдиреЗ рдХреЗ рддрд░реАрдХреЛрдВ рдХреЛ рдПрдХреНрд╕реЗрд╕ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП
foo['bar']
ред
рдШрдЯрдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдпрдерд╛рд╕рдВрднрд╡ рд╕рд░рд▓ рд╣реИ:
use Symfony\Component\ExpressionLanguage\ExpressionLanguage; $language = new ExpressionLanguage(); echo $language->evaluate('1 + 1');
рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ рдХреА рднрд╛рд╖рд╛ рдЯрд╣рдиреА рдХреЗ рд╕рдорд╛рди рд╕рднреА рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рддреА рд╣реИ: рдЧрдгрд┐рддреАрдп рдСрдкрд░реЗрдЯрд░, рддрд╛рд░, рд╕рдВрдЦреНрдпрд╛, рд╕рд░рдгрд┐рдпрд╛рдБ, рд╣реИрд╢, рдмреВрд▓рд┐рдпрди рдЪрд░ ... рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ рдХреЛ рдмрд╣реБрдд рд╕реАрдорд┐рдд PHP рд╕реИрдВрдбрдмреЙрдХреНрд╕ рдХреЗ рд░реВрдк рдореЗрдВ рдорд╛рдирд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдЬрд┐рд╕рдореЗрдВ рдмрд╛рд╣рд░реА рдкреНрд░рднрд╛рд╡ рдЕрд╕рдВрднрд╡ рд╣реИрдВ, рд╕рдВрдХрд▓рди рдпрд╛ рдирд┐рд╖реНрдкрд╛рджрди рд╕реЗ рдкрд╣рд▓реЗ рд╕рднреА рдЪрд░ рдШреЛрд╖рд┐рдд рдХрд┐рдП рдЬрд╛рдиреЗ рдЪрд╛рд╣рд┐рдП рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ред
$language->evaluate('a.b', array('a' => new stdClass())); $language->compile('a.b', array('a'));
рдЕрдВрддрд┐рдо рд▓реЗрдХрд┐рди рдХрдо рд╕реЗ рдХрдо, рдЖрдк рдЖрд╕рд╛рдиреА рд╕реЗ рдлрд╝рдВрдХреНрд╢рди рдХреЗ рд╕рд╛рде рднрд╛рд╖рд╛ рдХрд╛ рд╡рд┐рд╕реНрддрд╛рд░ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рд╡реЗ рдЯреНрд╡рд┐рдЧ рдореЗрдВ рдЕрдкрдиреЗ рд╕рдордХрдХреНрд╖реЛрдВ рдХреА рддрд░рд╣ рдХрд╛рдо рдХрд░рддреЗ рд╣реИрдВ
register()
рд╡рд┐рд╡рд░рдг рдХреЗ рд▓рд┐рдП
register()
рд╡рд┐рдзрд┐ рджреЗрдЦреЗрдВ)
рдЙрдкрдпреЛрдЧ рдорд╛рдорд▓реЛрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХреНрдпрд╛? рд╣рдордиреЗ рд╕рд┐рдореНрдлрдиреА рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд┐рдП рдЬрд╛рдиреЗ рд╡рд╛рд▓реЗ рдХрдИ рдЕрдиреНрдп рдШрдЯрдХреЛрдВ рдореЗрдВ рдШрдЯрдХ рдХреЛ рдПрдореНрдмреЗрдбреЗрдб рдХрд┐рдпрд╛ рд╣реИред
рд╕реЗрд╡рд╛ рдХрдВрдЯреЗрдирд░
рдЖрдк рдХрд╣реАрдВ рднреА рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдЬрд╣рд╛рдВ рдЖрдк рдПрдХ рдХрдВрдЯреЗрдирд░ рдореЗрдВ рдПрдХ рддрд░реНрдХ рджреЗ рд╕рдХрддреЗ рд╣реИрдВ:
$c->register('foo', 'Foo')->addArgument(new Expression('bar.getvalue()'));
рдХрдВрдЯреЗрдирд░ рдореЗрдВ, рднрд╛рд╡ рджреЛ рдХрд╛рд░реНрдпреЛрдВ рдХреЗ рдкреВрд░рдХ рд╣реИрдВ:
service()
рд╕реЗрд╡рд╛ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдФрд░
parameter
рдорд╛рди рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП:
service("bar").getValue(parameter("value"))
XML рдореЗрдВ:
<service id="foo" class="Foo"> <argument type="expression">service('bar').getvalue(parameter('value'))</argument> </service>
PHP рдбрдореНрдкрд░ рдХреЗ рднрд╛рд╡ рд╕рдВрдХрд▓рд┐рдд рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж рд╕реЗ рд░рдирдЯрд╛рдЗрдо рдкрд░ рдХреЛрдИ рдУрд╡рд░рд╣реЗрдб рдирд╣реАрдВ рд╣реИред рдкрд┐рдЫрд▓рд╛ рдЙрджрд╛рд╣рд░рдг рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд PHP рдХреЛрдб рдореЗрдВ рд╕рдВрдХрд▓рд┐рдд рд╣реИ:
$this->get("bar")->getvalue($this->getParameter("value"))
рдЕрднрд┐рдЧрдо рдирд┐рдпрдВрддреНрд░рдг рдирд┐рдпрдо
рдПрдХреНрд╕реЗрд╕ рдирд┐рдпрдореЛрдВ рдХреЛ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд░рдирд╛ рднреНрд░рд╛рдордХ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ, рдЬрд┐рд╕рд╕реЗ
рдЕрд╕реБрд░рдХреНрд╖рд┐рдд рдПрдкреНрд▓рд┐рдХреЗрд╢рди рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВ
рдирдпрд╛
allow_if
рдирд┐рд░реНрджреЗрд╢ рдЖрдкрдХреЗ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдореЗрдВ рдкрд╣реБрдБрдЪ рдирд┐рдпрдореЛрдВ рдХреЛ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд░рдирд╛ рдЖрд╕рд╛рди
allow_if
рд╣реИ:
access_control: - { path: ^/_internal/secure, allow_if: "'127.0.0.1' == request.getClientIp() or has_role('ROLE_ADMIN')" }
рдпрд╣ рдирд┐рдпрдо
/_internal/secure
рд╕рд╛рде рдпрд╛ рдмрд┐рдирд╛ рдкреНрд░рд╢рд╛рд╕рдХ рд╡рд┐рд╢реЗрд╖рд╛рдзрд┐рдХрд╛рд░реЛрдВ рдХреЗ рд▓реЙрдЧрд┐рдВрдЧ рдХреЗ рд▓рд┐рдП
/_internal/secure
рд╕рд╛рде рд╢реБрд░реВ рд╣реЛрдиреЗ рд╡рд╛рд▓реЗ рд░рд╛рд╕реНрддреЛрдВ рдХреЛ рдкреНрд░рддрд┐рдмрдВрдзрд┐рдд рдХрд░рддрд╛ рд╣реИред
request
,
token
рдФрд░
user
рд╡реЗ рдЪрд░ рд╣реИрдВ рдЬрд┐рдирдХреА рдЖрдкрдХреЗ рдкрд╛рд╕ рдкрд╣реБрдВрдЪ рд╣реИ,
is_anonymous()
,
is_authenticated()
,
is_fully_authenticated()
,
is_rememberme()
,
and has_role()
рдлрд╝рдВрдХреНрд╢рди рд╣реИрдВ рдЬреЛ рдПрдХреНрд╕реЗрд╕ рдирд┐рдпрдо рд╕реЗрдЯ рдХрд░рддреЗ рд╕рдордп рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ рдореЗрдВ рдЙрдкрд▓рдмреНрдз рд╣реИрдВред
рдлрд╝реИрд╢рди
рдЖрдк
expression
рдлрд╝рдВрдХреНрд╢рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЕрдкрдиреЗ рдЯреЗрдореНрдкреНрд▓реЗрдЯ рдореЗрдВ рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐рдпреЛрдВ рдХрд╛ рднреА рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ
{% if is_granted(expression('has_role("FOO")')) %} ... {% endif %}
рдпрджрд┐ рдЖрдк
SensioFrameworkExtraBundle рдХрд╛ рдЙрдкрдпреЛрдЧ
рдХрд░рддреЗ рд╣реИрдВ , рддреЛ рдЖрдкрдХреЗ рдкрд╛рд╕
@ Security
рдПрдиреЛрдЯреЗрд╢рди рдХреЗ рд╕рд╛рде рдирд┐рдпрдВрддреНрд░рдХреЛрдВ рдХреЛ рд╕реБрд░рдХреНрд╖рд┐рдд рдХрд░рдиреЗ рдХрд╛ рд╡рд┐рдХрд▓реНрдк рднреА рд╣реИ
public function showAction(Post $post) { }
рдиреЛрдЯ : @ Security
рдПрдиреЛрдЯреЗрд╢рди рдЙрд╕ рдмрдВрдбрд▓ рдХреЗ рд╕рдВрд╕реНрдХрд░рдг 3 рдХрд╛ рд╣рд┐рд╕реНрд╕рд╛ рд╣реЛрдЧрд╛ рдЬреЛ рд╕рд┐рдореНрдлрдиреА 2.4 рд╕реЗ рдкрд╣рд▓реЗ рдЬрд╛рд░реА рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛рдХреИрд╢рд┐рдВрдЧ
SensioFrameworkExtraBundle рдХреЗ рддреАрд╕рд░реЗ рд╕рдВрд╕реНрдХрд░рдг рдореЗрдВ
, @ рдХреИрд╢ рдПрдиреЛрдЯреЗрд╢рди рднреА рдЙрдкрд▓рдмреНрдз рд╣реЛрдЧрд╛, рдЬреЛ HTTP рдХреИрд╢рд┐рдВрдЧ рдХреА рд╕реБрд╡рд┐рдзрд╛ рджреЗрддрд╛ рд╣реИред рдмреЙрдпрд▓рд░рдкреНрд▓реЗрдЯ рдХреЛрдб рдХреЛ рд╕рд╛рдзрд╛рд░рдг рд╕реНрдерд┐рддрд┐рдпреЛрдВ рдореЗрдВ рдмрд╛рд░-рдмрд╛рд░ рд▓рд┐рдЦрдиреЗ рдХреЗ рдмрдЬрд╛рдп:
public function showAction(Request $request, Post $post) { $response = new Response(); $response->setLastModified($post->getUpdated()); if ($response->isNotModified($request)) { return $response; }
рдЖрдк рдПрдиреЛрдЯреЗрд╢рди рдореЗрдВ рд╕рдм рдХреБрдЫ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ (рдпрд╣ ETag рдХреЗ рд▓рд┐рдП рднреА рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ):
public function showAction(Post $post) {
рд░реВрдЯрд┐рдВрдЧ (рд░реВрдЯрд┐рдВрдЧ)
рдмреЙрдХреНрд╕ рд╕реЗ рдмрд╛рд╣рд░, рд╕рд┐рдореНрдлрдиреА рдкреВрд░реНрд╡рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдЪрд░ (рдЬреИрд╕реЗ рдХрд┐
info
,
method
,
sheme
) рджреНрд╡рд╛рд░рд╛ рдПрдХ рдорд╛рд░реНрдЧ рдХрд╛ рдЪрдпрди рдХрд░ рд╕рдХрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдХреБрдЫ рдХреЛ рдЕрдиреБрд░реЛрдз (
Request
рд╡рд╕реНрддреБ) рд╕реЗ рдЬрд╛рдирдХрд╛рд░реА рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рдЕрдзрд┐рдХ рдЬрдЯрд┐рд▓ рддрд░реНрдХ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ
рдЗрди рд╡рд┐рд╢реЗрд╖ рдорд╛рдорд▓реЛрдВ рдХреЛ рдХрд╡рд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдк
condition
рдирд┐рд░реНрджреЗрд╢ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдЬреЛ рдЖрдкрдХреЛ
request
рдФрд░ рд░реВрдЯрд┐рдВрдЧ
context
рдЪрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдХрд┐рд╕реА рднреА рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ рдХреЛ рдЬреЛрдбрд╝рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ:
hello: path: /hello/{name} condition: "context.getMethod() in ['GET', 'HEAD'] and request.headers.get('User-Agent') =~ '/firefox/i'"
рдФрд░ рдлрд┐рд░, PHP рд░реВрдЯрд┐рдВрдЧ рдирд┐рдпрдо рдбрдореНрдкрд░ (URL рдорд┐рд▓рд╛рди) рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реБрдП, рдХреЛрдИ рдЙрдкрд░рд┐ рдирд╣реАрдВ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рд╕рднреА рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐рдпрд╛рдБ PHP рдХреЛрдб рдореЗрдВ рд╕рдВрдХрд▓рд┐рдд рд╣реИрдВ:
рдзреНрдпрд╛рди рд░рдЦреЗрдВ рдХрд┐ URL рдмрдирд╛рддреЗ рд╕рдордп рдЗрди рд╢рд░реНрддреЛрдВ рдХрд╛ рдХрд┐рд╕реА рднреА рддрд░рд╣ рд╕реЗ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛редрдорд╛рдиреНрдпрдХрд░рдг
рдирдИ
Expression
рд╕реНрдерд┐рддрд┐ рдЖрдкрдХреЛ рд╕рддреНрдпрд╛рдкрди рдХреЗ рд▓рд┐рдП рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддреА рд╣реИ:
use Symfony\Component\Validator\Constraints as Assert; class Obj { public function getFoo() { return 'foo'; } }
рд╕рддреНрдпрд╛рдкрдирдХрд░реНрддрд╛ рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐рдпреЛрдВ рдореЗрдВ,
this
рд╡рд░реНрддрдорд╛рди рд╕рддреНрдпрд╛рдкрди рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЛ рд╕рдВрджрд░реНрднрд┐рдд рдХрд░рддрд╛ рд╣реИред
рдмрд┐рдЬрдиреЗрд╕ рд░реВрд▓ рдЗрдВрдЬрди
рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдлреНрд░реЗрдорд╡рд░реНрдХ рдореЗрдВ рдШрдЯрдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реБрдП, рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ рднрд╛рд╖рд╛ рд╡реНрдпрд╡рд╕рд╛рдп рдирд┐рдпрдо рдЗрдВрдЬрди рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдЙрддреНрдХреГрд╖реНрдЯ рдЙрдореНрдореАрджрд╡рд╛рд░ рд╣реИред рдпрд╣ рд╡рд┐рдЪрд╛рд░ рд╣реИ рдХрд┐ рд╕рд╛рдЗрдЯ рдХреЗ рд╡реЗрдмрдорд╛рд╕реНрдЯрд░ (рд╡реНрдпрд╡рд╕реНрдерд╛рдкрдХ) рд▓рдЪреАрд▓реЗ рдврдВрдЧ рд╕реЗ рд╕рд╛рдЗрдЯ рдХреЛ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, PHP рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдП рдмрд┐рдирд╛ рдФрд░ рд╕реБрд░рдХреНрд╖рд╛ рд╕рдорд╕реНрдпрд╛рдУрдВ рдХреЗ рд▓рд┐рдП рдЦреБрдж рдХреЛ рд╕рдорд░реНрдкрд┐рдд рдХрд┐рдП рдмрд┐рдирд╛:
# Get the special price if user.getGroup() in ['good_customers', 'collaborator'] # Promote article to the homepage when article.commentCount > 100 and article.category not in ["misc"] # Send an alert when product.stock < 15
рдпрд╣ рдЖрдЦрд┐рд░реА рдкреЛрд╕реНрдЯ рд╣реИ рдЬрд┐рд╕рдореЗрдВ рдореИрдВ рд╕рд┐рдореНрдлрдиреА 2.4 рдХреА рдирдИ рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рдХреЛ рджреЗрдЦрддрд╛ рд╣реВрдВред рдХреБрдЫ рджрд┐рдиреЛрдВ рдХреЗ рднреАрддрд░ рдкрд╣рд▓рд╛ рдкреНрд░реА-рд░рд┐рд▓реАрдЬрд╝ рд╕рдВрд╕реНрдХрд░рдг (рд░рд┐рд▓реАрдЬрд╝ рдЙрдореНрдореАрджрд╡рд╛рд░) рдЙрдкрд▓рдмреНрдз рд╣реЛрдЧрд╛ред
рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рд╣рд░ рдХреЛрдИ PHP рдХреЗ рдЗрд╕ рдЙрдкрдпреЛрдЧ рдХреЛ рдкрд╕рдВрдж рдирд╣реАрдВ рдХрд░реЗрдЧрд╛, рд▓реЗрдХрд┐рди рдХреГрдкрдпрд╛ рдзреНрдпрд╛рди рд░рдЦреЗрдВ рдХрд┐ рдореИрдВ рдПрдХ рдЕрдиреБрд╡рд╛рджрдХ, рд▓реЗрдЦ, рдФрд░ рдЗрд╕ рдШрдЯрдХ рдХрд╛ рдирд┐рд░реНрдорд╛рддрд╛ рдирд╣реАрдВ рд╣реВрдВ, рдФрд░ рдЬрдм рддрдХ рдореБрдЭреЗ рдпрд╣ рдкрддрд╛ рдирд╣реАрдВ рдЪрд▓рд╛ рдХрд┐ рдореБрдЭреЗ рдпрд╣ рдкрд╕рдВрдж рд╣реИ рдпрд╛ рдирд╣реАрдВ (рдпрд╣ рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рд╣рдбрд╝рддрд╛рд▓реА рдерд╛ рдХрд┐ рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ рдХреЛ рдЯрд╣рдиреА рдореЗрдВ рдХреНрдпреЛрдВ рдмрдирд╛рдпрд╛ рдЧрдпрд╛ рдерд╛)ред
рд╕рднреА рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ рдФрд░ рд╕реБрдЭрд╛рд╡ рдХреГрдкрдпрд╛ рдкреАрдПрдо рдореЗрдВ