рд╣рдо Symfony2 рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рдЕрдкрдирд╛ рдврд╛рдВрдЪрд╛ рдмрдирд╛рддреЗ рд╣реИрдВред (рднрд╛рдЧ 3)

рд╕рд╛рдордЧреНрд░реА рдХреА рддрд╛рд▓рд┐рдХрд╛





рдЕрдм рддрдХ, рд╣рдорд╛рд░рд╛ рдЖрд╡реЗрджрди рдХрд╛рдлреА рд╕рд░рд▓ рд░рд╣рд╛ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдЗрд╕рдореЗрдВ рдХреЗрд╡рд▓ рдПрдХ рдкреГрд╖реНрда рд╣реИред
рдЪреАрдЬреЛрдВ рдХреЛ рдереЛрдбрд╝рд╛ рдЬрдЯрд┐рд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, "рдЕрд▓рд╡рд┐рджрд╛" рдХрд╣рддреЗ рд╣реБрдП рдПрдХ рдФрд░ рдкреЗрдЬ рдЬреЛрдбрд╝реЗрдВ:
<?php // framework/bye.php require_once __DIR__.'/autoload.php'; use Symfony\Component\HttpFoundation\Request; use Symfony\Component\HttpFoundation\Response; $request = Request::createFromGlobals(); $response = new Response('Goodbye!'); $response->send(); 

рдЬреИрд╕рд╛ рдХрд┐ рдЖрдк рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ, рдЕрдзрд┐рдХрд╛рдВрд╢ рдХреЛрдб рдкрд╣рд▓реЗ рдкреГрд╖реНрда рдХреЗ рд▓рд┐рдП рдмрд┐рд▓реНрдХреБрд▓ рд╕рдорд╛рди рд╣реИред
рдЖрдЗрдП рд╣рдорд╛рд░реЗ рд╕рднреА рдкреГрд╖реНрдареЛрдВ рдХреЗ рд▓рд┐рдП рд╕рдорд╛рди рд░реВрдк рд╕реЗ рд╕рд╛рдорд╛рдиреНрдп рдХреЛрдб рдХреЛ рд╣рд╛рдЗрд▓рд╛рдЗрдЯ рдХрд░реЗрдВред
"рдПрдХ рд╕рд╛рдЭрд╛ рдХреЛрдб рд╕рд╛рдЭрд╛ рдХрд░рдирд╛" рд╣рдорд╛рд░реЗ рдкрд╣рд▓реЗ "рд╡рд╛рд╕реНрддрд╡рд┐рдХ" рдврд╛рдВрдЪреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдорд╣рд╛рди рдпреЛрдЬрдирд╛ рдХреА рддрд░рд╣ рд▓рдЧрддрд╛ рд╣реИ!

PHP рдХреЗ рднреАрддрд░, рд░реАрдлреИрдХреНрдЯрд░рд┐рдВрдЧ рдореЗрдВ рд╢рд╛рдорд┐рд▓ рдлрд╝рд╛рдЗрд▓ рдмрдирд╛рдирд╛ рд╢рд╛рдорд┐рд▓ рд╣реЛрдЧрд╛:
  <?php // framework/init.php require_once __DIR__.'/autoload.php'; use Symfony\Component\HttpFoundation\Request; use Symfony\Component\HttpFoundation\Response; $request = Request::createFromGlobals(); $response = new Response(); 

рдЖрдЗрдП рдЗрд╕реЗ рдХрд╛рд░реНрд░рд╡рд╛рдИ рдореЗрдВ рджреЗрдЦреЗрдВ:
  <?php // framework/index.php require_once __DIR__.'/init.php'; $input = $request->get('name', 'World'); $response->setContent(sprintf('Hello %s', htmlspecialchars($input, ENT_QUOTES, 'UTF-8'))); $response->send(); 

рдФрд░ рдЕрд▓рд╡рд┐рджрд╛ рдкреЗрдЬ рдХреЗ рд▓рд┐рдП:
  <?php // framework/bye.php require_once __DIR__.'/init.php'; $response->setContent('Goodbye!'); $response->send(); 

рдЗрд╕рд▓рд┐рдП, рд╣рдордиреЗ рдПрдХ рд╕рд╛рде рдПрдХ рд╕рдорд╛рди рдХреЛрдб рдПрдХ рд╕рд╛рде рд░рдЦрд╛ рд╣реИред рд▓реЗрдХрд┐рди рдпрд╣ рдЕрдореВрд░реНрдд рдХреЗ рдПрдХ рдЕрдЪреНрдЫреЗ рд╕реНрддрд░ рдХреА рддрд░рд╣ рдирд╣реАрдВ рджрд┐рдЦрддрд╛ рд╣реИ, рд╣реИ рдирд╛?
рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдЕрднреА рднреА рд╕рднреА рдкреГрд╖реНрдареЛрдВ рдкрд░ рднреЗрдЬрдиреЗ () рд╡рд┐рдзрд┐ рдХреЗ рд▓рд┐рдП рдПрдХ рдХреЙрд▓ рд╣реИ, рдпрд╣реА рдХрд╛рд░рдг рд╣реИ рдХрд┐ рд╣рдорд╛рд░реЗ рдкреГрд╖реНрда рдирд┐рдпрдорд┐рдд рдЯреЗрдореНрдкрд▓реЗрдЯ рдХреА рддрд░рд╣ рдирд╣реАрдВ рд╣реИрдВ, рдФрд░ рд╣рдо рдЕрднреА рднреА "рд╕рд╣реА рдврдВрдЧ рд╕реЗ" рдХреЛрдб рдХрд╛ рдкрд░реАрдХреНрд╖рдг рдирд╣реАрдВ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред

рдПрдХ рдФрд░ рдЧрдВрднреАрд░ рд╕рдорд╕реНрдпрд╛ рдпрд╣ рд╣реИ рдХрд┐ рдПрдХ рдирдпрд╛ рдкреЗрдЬ рдЬреЛрдбрд╝рдиреЗ рдХрд╛ рдорддрд▓рдм рд╣реИ рдХрд┐ рд╣рдореЗрдВ рдПрдХ рдирдИ PHP рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдмрдирд╛рдиреА рд╣реЛрдЧреА,
рдЬрд┐рд╕рдХрд╛ рдирд╛рдо URL (http://example.com/bye.php) рдореЗрдВ рдкреНрд░реЗрд╖рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ рдФрд░ рдЬрд┐рд╕реЗ рд╡реЗрдм рд╕рд░реНрд╡рд░ рджреНрд╡рд╛рд░рд╛ рдмреБрд▓рд╛рдпрд╛ рдЬрд╛рдПрдЧрд╛ред
рдмреЗрд╣рддрд░ рд▓рдЪреАрд▓реЗрдкрди рдХреЗ рд▓рд┐рдП рдХреЙрд▓ рдХреЛ рд╣рдорд╛рд░реЗ рдХреЛрдб рдореЗрдВ рд╡рд╛рдВрдЫрд┐рдд рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдореЗрдВ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░рдирд╛ рдПрдХ рдЕрдЪреНрдЫрд╛ рд╡рд┐рдЪрд╛рд░ рд╣реИред
рдпрд╣ рдПрдХ рд╣реА PHP рд╕реНрдХреНрд░рд┐рдкреНрдЯ - рдлреНрд░рдВрдЯ рдХрдВрдЯреНрд░реЛрд▓рд░ рдХреЗ рд╕рднреА рдЕрдиреБрд░реЛрдзреЛрдВ рдХреЛ рдкреБрдирд░реНрдирд┐рд░реНрджреЗрд╢рд┐рдд рдХрд░рдХреЗ рдкреНрд░рд╛рдкреНрдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред



рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдЦреБрдж рдЗрд╕ рддрд░рд╣ рджрд┐рдЦ рд╕рдХрддреА рд╣реИ:
  <?php // framework/front.php require_once __DIR__.'/autoload.php'; use Symfony\Component\HttpFoundation\Request; use Symfony\Component\HttpFoundation\Response; $request = Request::createFromGlobals(); $response = new Response(); $map = array( '/hello' => __DIR__.'/hello.php', '/bye' => __DIR__.'/bye.php', ); $path = $request->getPathInfo(); if (isset($map[$path])) { require $map[$path]; } else { $response->setStatusCode(404); $response->setContent('Not Found'); } $response->send(); 

рдФрд░ рдирдП hello.php рдХрд╛ рдПрдХ рдЙрджрд╛рд╣рд░рдг:
  <?php // framework/hello.php $input = $request->get('name', 'World'); $response->setContent(sprintf('Hello %s', htmlspecialchars($input, ENT_QUOTES, 'UTF-8'))); 

Front.php рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдореЗрдВ, $ рдореИрдк URL рдореЗрдВ рдкрдереЛрдВ рдХреЛ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЗ рд╕рдВрдЧрдд рдкрдереЛрдВ рд╕реЗ рдЬреЛрдбрд╝рддрд╛ рд╣реИред

рдПрдХ рдмреЛрдирд╕ рдХреЗ рд░реВрдк рдореЗрдВ, рдпрджрд┐ рдХреНрд▓рд╛рдЗрдВрдЯ рдПрдХ рдкрде рдХрд╛ рдЕрдиреБрд░реЛрдз рдХрд░рддрд╛ рд╣реИ рдЬреЛ рдореИрдЪреЛрдВ рдХреА рд╕рд░рдгреА рдореЗрдВ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдирд╣реАрдВ рд╣реИ, рддреЛ рд╣рдо 404 рддреНрд░реБрдЯрд┐ рд▓реМрдЯрд╛рддреЗ рд╣реИрдВред
рдЕрдм рдЖрдк рд╕реНрд╡рдпрдВ рд╕рд╛рдЗрдЯ рдХреЛ рдирд┐рдпрдВрддреНрд░рд┐рдд рдХрд░реЗрдВред

рдЕрдм рдЙрди рдкреГрд╖реНрдареЛрдВ рдХреЛ рдПрдХреНрд╕реЗрд╕ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЬрд┐рдиреНрд╣реЗрдВ рдЖрдкрдХреЛ рдлреНрд░рдВрдЯ рдХрдВрдЯреНрд░реЛрд▓рд░ рдХреА рдлреНрд░рдВрдЯ.рдлрдкреА рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП:


/ рд╣реИрд▓реЛ рдФрд░ / рдмрд╛рдп рдкреГрд╖реНрда рдкрде рд╣реИрдВред

рдЯрд┐рдкред
рдЕрдзрд┐рдХрд╛рдВрд╢ рд╡реЗрдм рд╕рд░реНрд╡рд░, рдЬреИрд╕реЗ рдХрд┐ Apache рдпрд╛ nginx, рдкреБрдирд░реНрд▓реЗрдЦрди рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реИрдВ
рдкреГрд╖реНрдареЛрдВ рдХреЗ рдЕрдиреБрд░реЛрдзрд┐рдд URL рдЬрд┐рд╕рд╕реЗ рдЙрдирдХреЗ рд╕рд╛рдордиреЗ рдирд┐рдпрдВрддреНрд░рдХ рдХреА рдлрд╝рд╛рдЗрд▓ ( front.php ) рдХрд╛ рдирд╛рдо рд╣рдЯрд╛ рджрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ,
рдЗрд╕рд▓рд┐рдП рдЖрдкрдХреЗ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХреЛ рдХреЗрд╡рд▓ example.com/hello?name=Fabien рдЯрд╛рдЗрдк рдХрд░рдирд╛ рд╣реЛрдЧрд╛, рдЬреЛ рдмрд╣реБрдд рдмреЗрд╣рддрд░ рджрд┐рдЦрддрд╛ рд╣реИред


рддреЛ, рдЪрд╛рд▓ рдЕрдиреБрд░реЛрдз :: getPathInfo () рд╡рд┐рдзрд┐ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рд╣реИ рдЬреЛ " рдЕрдиреБрд░реЛрдз " рд╕реЗ рдкрде рдХрд╛ рд╣рд┐рд╕реНрд╕рд╛ рд▓реМрдЯрд╛рддрд╛ рд╣реИ
рд╕рднреА рдЙрдкрдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛рдУрдВ рд╕рд╣рд┐рдд рдЗрд╕рдореЗрдВ рд╕реЗ рдлреНрд░рдВрдЯ рдХрдВрдЯреНрд░реЛрд▓рд░ рдХреА рдлрд╝рд╛рдЗрд▓ рдХрд╛ рдирд╛рдо рд╣рдЯрд╛рдирд╛ (рдХреЗрд╡рд▓ рдпрджрд┐ рдЖрд╡рд╢реНрдпрдХ рд╣реЛ - рдКрдкрд░ рджреА рдЧрдИ рд╕рд╣рд╛рдпрддрд╛ рджреЗрдЦреЗрдВ)ред

рдЖрдкрдХреЛ рд╡реЗрдм рд╕рд░реНрд╡рд░ рдХреЛ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд░рдиреЗ рдХреА рднреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИред рдХреЗрд╡рд▓
рдХреЙрд▓ $ рдЕрдиреБрд░реЛрдз рдХреЛ рдмрджрд▓реЗрдВ = рдЕрдиреБрд░реЛрдз :: createFromGlobals (); $ рд░рд┐рдХреНрд╡реЗрд╕реНрдЯ = рд░рд┐рдХреНрд╡реЗрд╕реНрдЯ :: create ('/ hello; name = Fabien') рдЬреИрд╕реА рдХрд┐рд╕реА рдЪреАрдЬрд╝ рдХреЗ рд▓рд┐рдП ; ред
рдЬрд╣рд╛рдВ рддрд░реНрдХ рд╡рд╣ рдХреНрд╡реЗрд░реА рд╣реИ рдЬрд┐рд╕реЗ рдЖрдк рдЕрдиреБрдХрд░рдг рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВред

рдЕрдм рдЬрдм рд╣рдорд╛рд░реЗ рдкреГрд╖реНрдареЛрдВ рдХреЗ рд▓рд┐рдП рд╕рднреА рдЕрдиреБрд░реЛрдз рдПрдХ рд╕реНрдХреНрд░рд┐рдкреНрдЯ (рдлреНрд░рдВрдЯред рдПрдлрдкреА) рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдЬрд╛рддреЗ рд╣реИрдВ,
рд╣рдо рд░реВрдЯ рд╡реЗрдм рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рдХреЗ рдмрд╛рд╣рд░ рдЕрдиреНрдп рд╕рднреА PHP рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЛ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░рдХреЗ рд╕реБрд░рдХреНрд╖рд╛ рдореЗрдВ рдпреЛрдЧрджрд╛рди рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:
     example.com
     + - рд╕рдВрдЧреАрддрдХрд╛рд░редрдЬрд╕рди
     ┬ж src
     ┬ж + - рдСрдЯреЛрд▓реИрдб.php
     Pages L-- рдкреГрд╖реНрда
     ┬ж + - рд╣реИрд▓реЛред php
     E рдПрд▓-- bye.php
     + - рд╡рд┐рдХреНрд░реЗрддрд╛
     рдПрд▓-- рд╡реЗрдм
         рдПрд▓-- рд╕рд╛рдордиреЗредрдЦрд╛рд╕

рдЕрдм, рдЕрдкрдиреЗ рд╡реЗрдм рд╕рд░реНрд╡рд░ рдХреЛ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд░реЗрдВ рддрд╛рдХрд┐ рд╡реЗрдм / рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рдЗрд╕рдХреЗ рд▓рд┐рдП рд░реВрдЯ рд╣реЛред
рдЕрдиреНрдп рд╕рднреА рдлрд╛рдЗрд▓реЗрдВ рдЕрдм рдХреНрд▓рд╛рдЗрдВрдЯ рдХреЗ рд▓рд┐рдП рдЙрдкрд▓рдмреНрдз рдирд╣реАрдВ рд╣реИрдВред

рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЗрд╕ рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рд╕рдВрд░рдЪрдирд╛ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ рдХреБрдЫ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдлрд╝рд╛рдЗрд▓реЛрдВ рдореЗрдВ рдкрде рдмрджрд▓рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдЧреА;
рдпреЗ рдмрджрд▓рд╛рд╡ рдкрд╛рдардХ рдХреЗ рд▓рд┐рдП рд╣реЛрдорд╡рд░реНрдХ рд╣реЛрдВрдЧреЗред

рд╣рд░ рдкреГрд╖реНрда рдкрд░ рджреЛрд╣рд░рд╛рдИ рдЬрд╛рдиреЗ рд╡рд╛рд▓реА рдЕрдВрддрд┐рдо рдЪреАрдЬрд╝ рд╕реЗрдЯрдХреЙрдиреНрдЯреЗрдВрдЯ () рд╣реИ ред
рдЕрдм рд╣рдо рдЕрдкрдиреЗ рд╕рднреА рдкреЗрдЬреЛрдВ рдХреЛ рдХрдВрдЯреЗрдВрдЯ рдЖрдЙрдЯрдкреБрдЯ рдХрд░рдХреЗ "рдЯреЗрдореНрдкреНрд▓реЗрдЯ" рдореЗрдВ рдмрджрд▓ рд╕рдХрддреЗ рд╣реИрдВ
рдФрд░ рдХреЙрд▓ рдирд┐рдпрдВрддреНрд░рдХ () рд╕рд╛рдордиреЗ рдирд┐рдпрдВрддреНрд░рдХ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рд╕реЗ рд╕реАрдзреЗ:
  <?php // example.com/web/front.php // ... $path = $request->getPathInfo(); if (isset($map[$path])) { ob_start(); include $map[$path]; $response->setContent(ob_get_clean()); } else { $response->setStatusCode(404); $response->setContent('Not Found'); } // ... 

рдЕрдм hello.php рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЛ рдЯреЗрдореНрдкреНрд▓реЗрдЯ рдореЗрдВ рдлрд┐рд░ рд╕реЗ рдмрдирд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ:
  <!-- example.com/src/pages/hello.php --> <?php $name = $request->get('name', 'World') ?> Hello <?php echo htmlspecialchars($name, ENT_QUOTES, 'UTF-8') ?> 

рдЖрдЬ, рд╣рдорд╛рд░реА рд░реВрдкрд░реЗрдЦрд╛ рдЗрд╕ рддрд░рд╣ рджрд┐рдЦрддреА рд╣реИ:
  <?php // example.com/web/front.php require_once __DIR__.'/../src/autoload.php'; use Symfony\Component\HttpFoundation\Request; use Symfony\Component\HttpFoundation\Response; $request = Request::createFromGlobals(); $response = new Response(); $map = array( '/hello' => __DIR__.'/../src/pages/hello.php', '/bye' => __DIR__.'/../src/pages/bye.php', ); $path = $request->getPathInfo(); if (isset($map[$path])) { ob_start(); include $map[$path]; $response->setContent(ob_get_clean()); } else { $response->setStatusCode(404); $response->setContent('Not Found'); } $response->send(); 

рдкреГрд╖реНрдареЛрдВ рдХреЛ рдЬреЛрдбрд╝рдирд╛ рджреЛ рдЪрд░рдгреЛрдВ рдореЗрдВ рд╣реЛрддрд╛ рд╣реИ: рддрддреНрд╡реЛрдВ рдХреЛ рдореИрдЪреЛрдВ рдХреА рд╕рд░рдгреА рдореЗрдВ рдЬреЛрдбрд╝реЗрдВ рдФрд░ рдмрдирд╛рдПрдВ
PHP рдЯреЗрдореНрдкрд▓реЗрдЯ src / рдкреЗрдЬ / рдореЗрдВ ред рдЯреЗрдореНрдкрд▓реЗрдЯ рд╕реЗ, " рдЕрдиреБрд░реЛрдз " рдбреЗрдЯрд╛ $ рдЕрдиреБрд░реЛрдз рдЪрд░ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рд╣рдорд╛рд░реЗ рд▓рд┐рдП рдЙрдкрд▓рдмреНрдз рд╣реИ
рдФрд░ рд╣рдо $ рдкреНрд░рддрд┐рд╕рд╛рдж рдЪрд░ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рд╢реАрд░реНрд╖рдХреЛрдВ (" рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ ") рдореЗрдВ рд╣реЗрд░рдлреЗрд░ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред

рдпрджрд┐ рдЖрдк рдЕрднреА рд░реБрдХрдиреЗ рдХрд╛ рдирд┐рд░реНрдгрдп рд▓реЗрддреЗ рд╣реИрдВ, рддреЛ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдлрд╝рд╛рдЗрд▓ рдореЗрдВ URL рдорд┐рд▓рд╛рдиреЛрдВ рдХреА рдПрдХ рд╕рд░рдгреА рдХреЛ рдЖрдмрд╛рдж рдХрд░рдирд╛ рдПрдХ рдЕрдЪреНрдЫрд╛ рд╡рд┐рдЪрд╛рд░ рд╣реИред

Source: https://habr.com/ru/post/In136471/


All Articles