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

рд╢реНрд░реГрдВрдЦрд▓рд╛ рдХреЗ рдкрд╛рдВрдЪрд╡реЗрдВ рднрд╛рдЧ рдореЗрдВ рд╣рдо рдирд┐рдпрдВрддреНрд░рдХреЛрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╛рдд рдХрд░реЗрдВрдЧреЗред



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

рдЬреЛ рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ, рдПрдХ рдЕрдЪреНрдЫрд╛ рд╡рд┐рдЪрд╛рд░ рдирд╣реАрдВ рд╣реИ, рдЦрд╛рд╕рдХрд░ рдпрджрд┐ рдЖрдк рд╕рд┐рд╕реНрдЯрдо рдХреЛ рдЕрд▓рдЧ-рдЕрд▓рдЧ рдХрд╛рд░реНрдпрд╛рддреНрдордХ рд╕рдВрд░рдЪрдирд╛рдУрдВ рдореЗрдВ рд╡рд┐рднрд╛рдЬрд┐рдд рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рдереЗред
рдЪрд▓реЛ рдПрдХ рдирдИ рдкрд░рдд рдЬреЛрдбрд╝рдХрд░ рдЯреЗрдореНрдкрд▓реЗрдЯ рдХреЛрдб рдХреЛ рддрд░реНрдХ рд╕реЗ рдЕрд▓рдЧ рдХрд░рддреЗ рд╣реИрдВ - рдирд┐рдпрдВрддреНрд░рдХ: "рдирд┐рдпрдВрддреНрд░рдХ рдХрд╛ рдХрд╛рд░реНрдп рдЧреНрд░рд╛рд╣рдХ рдХреЗ рдЕрдиреБрд░реЛрдз рджреНрд╡рд╛рд░рд╛ рдкреНрд░реЗрд╖рд┐рдд рдЬрд╛рдирдХрд╛рд░реА рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рдПрдХ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдмрдирд╛рдирд╛ рд╣реИред"
рдирд┐рдореНрдирд╛рдиреБрд╕рд╛рд░ рдкреНрд░рддрд┐рдкрд╛рджрди рдХреЗ рд▓рд┐рдП рдЬрд┐рдореНрдореЗрджрд╛рд░ рдЯреЗрдореНрдкрд▓реЗрдЯ рдХреЗ рднрд╛рдЧ рдХреЛ рдмрджрд▓реЗрдВ:

<?php // example.com/web/front.php // ... try { $request->attributes->add($matcher->match($request->getPathInfo())); $response = call_user_func('render_template', $request); } catch (Routing\Exception\ResourceNotFoundException $e) { $response = new Response('Not Found', 404); } catch (Exception $e) { $response = new Response('An error occurred', 500); } 


рдЪреВрдВрдХрд┐ рд░реЗрдВрдбрд░ рдЕрдм рдмрд╛рд╣рд░реА рд░реЗрдВрдбрд░_рдЯреЗрдордкреНрд▓реЗрдЯ () рдлрд╝рдВрдХреНрд╢рди рджреНрд╡рд╛рд░рд╛ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рд╣рдореЗрдВ рдЗрд╕реЗ URL рд╕реЗ рдирд┐рдХрд╛рд▓реЗ рдЧрдП рдЧреБрдгреЛрдВ рдХреЛ рдкрд╛рд╕ рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред рд╣рдо рдЙрдиреНрд╣реЗрдВ рд░реЗрдВрдбрд░_template () рдХреЗ рд▓рд┐рдП рдПрдХ рдЕрддрд┐рд░рд┐рдХреНрдд рддрд░реНрдХ рдХреЗ рд░реВрдк рдореЗрдВ рдкрд╛рд░рд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдЗрд╕рдХреЗ рдмрдЬрд╛рдп рд╣рдо рдЕрдиреБрд░реЛрдз рд╡рд░реНрдЧ - рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рдХреЗ рдПрдХ рдЕрдиреНрдп рд╡рд┐рд╢реЗрд╖рддрд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВред рдЕрдиреБрд░реЛрдз рд╡рд┐рд╢реЗрд╖рддрд╛рдПрдБ рдЖрдкрдХреЛ рдЕрдиреБрд░реЛрдз рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЕрддрд┐рд░рд┐рдХреНрдд рдЬрд╛рдирдХрд╛рд░реА рд╢рд╛рдорд┐рд▓ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддреА рд╣реИрдВ, рдЬреЛ рд╕реАрдзреЗ HTTP рдЕрдиреБрд░реЛрдз рдХреЗ рдбреЗрдЯрд╛ рд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд рдирд╣реАрдВ рд╣реИред
рдЕрдм рд╣рдо рд░реЗрдВрдбрд░_рдЯреИрдореНрдкрд▓реЗрдЯ () рдлрд╝рдВрдХреНрд╢рди рдХреЛ рд▓рд┐рдЦрддреЗ рд╣реИрдВ, рд╕рд╛рдорд╛рдиреНрдп рдирд┐рдпрдВрддреНрд░рдХ рдЬреЛ рдЯреЗрдореНрдкрд▓реЗрдЯ рдХреЛ рдкреНрд░рд╕реНрддреБрдд рдХрд░рддрд╛ рд╣реИ, рдмрд┐рдирд╛ рдЕрдзрд┐рдХ рддрд░реНрдХ рдХреЗред рдЯреЗрдореНрдкреНрд▓реЗрдЯ рдХреА рдкреБрд░рд╛рдиреА рд╕рдВрд░рдЪрдирд╛ рдХреЛ рд╕рдВрд░рдХреНрд╖рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЯреЗрдореНрдкреНрд▓реЗрдЯ рдХреЗ рдкреНрд░рд╕реНрддреБрдд рд╣реЛрдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рдХреНрд╡реЗрд░реА рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рдХреЛ рдкреБрдирдГ рдкреНрд░рд╛рдкреНрдд рдХрд░ рд▓рд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ:

 function render_template($request) { extract($request->attributes->all(), EXTR_SKIP); ob_start(); include sprintf(__DIR__.'/../src/pages/%s.php', $_route); return new Response(ob_get_clean()); } 


рдЪреВрдВрдХрд┐ render_template рдХрд╛ рдЙрдкрдпреЛрдЧ PHP call_user_func () рдХреЗ рддрд░реНрдХ рдХреЗ рд░реВрдк рдореЗрдВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рд╣рдо рдЗрд╕реЗ рдХрд┐рд╕реА рднреА рдорд╛рдиреНрдп PHP рдХреЙрд▓рдмреИрдХ рдлрд╝рдВрдХреНрд╢рди рд╕реЗ рдмрджрд▓ рд╕рдХрддреЗ рд╣реИрдВред рдпрд╣ рдЖрдкрдХреЛ рдПрдХ рдлрд╝рдВрдХреНрд╢рди, рдПрдХ рдЕрдирд╛рдо рдлрд╝рдВрдХреНрд╢рди рдпрд╛ рдПрдХ рдирд┐рдпрдВрддреНрд░рдХ рд╡рд░реНрдЧ рд╡рд┐рдзрд┐ ... рдЕрдкрдиреА рдкрд╕рдВрдж рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрдЧрд╛ред
рдХрд┐рд╕реА рднреА рдкрде рдХреА рдкрд░рд┐рднрд╛рд╖рд╛ рдХреЛ рдорд╛рдирдХреАрдХреГрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╕рдВрдмрдВрдзрд┐рдд рдирд┐рдпрдВрддреНрд░рдХ _controller рдорд╛рд░реНрдЧ рд╡рд┐рд╢реЗрд╖рддрд╛ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ:

 $routes->add('hello', new Routing\Route('/hello/{name}', array( 'name' => 'World', '_controller' => 'render_template', ))); try { $request->attributes->add($matcher->match($request->getPathInfo())); $response = call_user_func($request->attributes->get('_controller'), $request); } catch (Routing\Exception\ResourceNotFoundException $e) { $response = new Response('Not Found', 404); } catch (Exception $e) { $response = new Response('An error occurred', 500); } 


рдорд╛рд░реНрдЧ рдЕрдм рдХрд┐рд╕реА рднреА рдирд┐рдпрдВрддреНрд░рдХ рд╕реЗ рдЬреБрдбрд╝рд╛ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдФрд░ рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ, рдирд┐рдпрдВрддреНрд░рдХ рдореЗрдВ, рдЖрдк рд░реЗрдВрдбрд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд░реЗрдВрдбрд░_ template () рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:

 $routes->add('hello', new Routing\Route('/hello/{name}', array( 'name' => 'World', '_controller' => function ($request) { return render_template($request); } ))); 


рдпрд╣ рдЕрдзрд┐рдХ рд▓рдЪреАрд▓рд╛ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдЖрдк рд░рд┐рд╕реНрдкрд╛рдВрд╕ рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЛ рдмрджрд▓ рд╕рдХрддреЗ рд╣реИрдВ, рдФрд░ рдЖрдк рдЯреЗрдореНрдкреНрд▓реЗрдЯ рдореЗрдВ рдЕрддрд┐рд░рд┐рдХреНрдд рддрд░реНрдХ рднреА рджреЗ рд╕рдХрддреЗ рд╣реИрдВ:

 $routes->add('hello', new Routing\Route('/hello/{name}', array( 'name' => 'World', '_controller' => function ($request) { // $foo will be available in the template $request->attributes->set('foo', 'bar'); $response = render_template($request); // change some header $response->headers->set('Content-Type', 'text/plain'); return $response; } ))); 


рдпрд╣рд╛рдБ рд╣рдорд╛рд░реЗ рд╕рд┐рд╕реНрдЯрдо рдХрд╛ рдПрдХ рдЕрджреНрдпрддрди рдФрд░ рдмреЗрд╣рддрд░ рд╕рдВрд╕реНрдХрд░рдг рд╣реИ:

 <?php // example.com/web/front.php require_once __DIR__.'/../vendor/.composer/autoload.php'; use Symfony\Component\HttpFoundation\Request; use Symfony\Component\HttpFoundation\Response; use Symfony\Component\Routing; function render_template($request) { extract($request->attributes->all(), EXTR_SKIP); ob_start(); include sprintf(__DIR__.'/../src/pages/%s.php', $_route); return new Response(ob_get_clean()); } $request = Request::createFromGlobals(); $routes = include __DIR__.'/../src/app.php'; $context = new Routing\RequestContext(); $context->fromRequest($request); $matcher = new Routing\Matcher\UrlMatcher($routes, $context); try { $request->attributes->add($matcher->match($request->getPathInfo())); $response = call_user_func($request->attributes->get('_controller'), $request); } catch (Routing\Exception\ResourceNotFoundException $e) { $response = new Response('Not Found', 404); } catch (Exception $e) { $response = new Response('An error occurred', 500); } $response->send(); 


рд╣рдорд╛рд░реЗ рдврд╛рдВрдЪреЗ рдХреЗ рдЬрдиреНрдорджрд┐рди рдХреЗ рд╕рдореНрдорд╛рди рдореЗрдВ, рдЖрдЗрдП рд╕рдмрд╕реЗ рд╕рд░рд▓ рддрд░реНрдХ рдХреЗ рд╕рд╛рде рдПрдХ рдирдпрд╛ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдмрдирд╛рдПрдВред рд╣рдорд╛рд░реЗ рдЖрд╡реЗрджрди рдореЗрдВ рдПрдХ рдкреГрд╖реНрда рд╣реЛрддрд╛ рд╣реИ рдЬреЛ рдХрд╣рддрд╛ рд╣реИ: рдЪрд╛рд╣реЗ рджрд┐рдпрд╛ рдЧрдпрд╛ рд╡рд░реНрд╖ рд▓реАрдк рд╡рд░реНрд╖ рд╣реЛ рдпрд╛ рди рд╣реЛред рдЬрдм рдЖрдк / is_leap_year рдХреЛ рдХреЙрд▓ рдХрд░рддреЗ рд╣реИрдВ , рддреЛ рдЖрдкрдХреЛ рд╡рд░реНрддрдорд╛рди рд╡рд░реНрд╖ рдХреЗ рд▓рд┐рдП рдЙрддреНрддрд░ рдорд┐рд▓ рдЬрд╛рдПрдЧрд╛, рд▓реЗрдХрд┐рди рдЖрдк рд╡рд░реНрд╖ рдХреЛ рдкреНрд░рдкрддреНрд░ / is_leap_year / 2009 рдореЗрдВ рднреА рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рд╕рд╛рд░реНрд╡рднреМрдорд┐рдХ рд╣реЛрдиреЗ рдХреЗ рдирд╛рддреЗ, рд░реВрдкрд░реЗрдЦрд╛ рдХреЛ рдмрджрд▓рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИ, рдмрд╕ рдПрдХ рдирдпрд╛ рдРрдк рдмрдирд╛рдПрдВред рдкреАрдбреАрдПрдл рдлрд╛рдЗрд▓:

 <?php // example.com/src/app.php use Symfony\Component\Routing; use Symfony\Component\HttpFoundation\Response; function is_leap_year($year = null) { if (null === $year) { $year = date('Y'); } return 0 == $year % 400 || (0 == $year % 4 && 0 != $year % 100); } $routes = new Routing\RouteCollection(); $routes->add('leap_year', new Routing\Route('/is_leap_year/{year}', array( 'year' => null, '_controller' => function ($request) { if (is_leap_year($request->attributes->get('year'))) { return new Response('Yep, this is a leap year!'); } return new Response('Nope, this is not a leap year.'); } ))); return $routes; 


Is_leap_year () рд╕рд╣реА рд╣реИ рдЕрдЧрд░ рджрд┐рдпрд╛ рдЧрдпрд╛ рд╡рд░реНрд╖ рдПрдХ рд▓реАрдк рд╡рд░реНрд╖ рд╣реИ, рдЕрдиреНрдпрдерд╛ рдЧрд▓рдд рд╣реИред рдпрджрд┐ рд╡рд░реНрд╖ рд╢реВрдиреНрдп рд╣реИ, рддреЛ рдЪрд╛рд▓реВ рд╡рд░реНрд╖ рдХреА рдЬрд╛рдБрдЪ рдХреА рдЬрд╛рддреА рд╣реИред рдирд┐рдпрдВрддреНрд░рдХ рд╕рд░рд▓ рд╣реИ: рдпрд╣ рдЕрдиреБрд░реЛрдз рдХреА рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рд╕реЗ рд╡рд░реНрд╖ рдкреНрд░рд╛рдкреНрдд рдХрд░рддрд╛ рд╣реИ, рдЗрд╕реЗ is_leap_year () рдореЗрдВ рднреЗрдЬрддрд╛ рд╣реИ , рдФрд░ рд╡рд╛рдкрд╕реА рдореВрд▓реНрдп рдХреЗ рдЕрдиреБрд╕рд╛рд░, рдпрд╣ рдПрдХ рдирдпрд╛ рд░рд┐рд╕реНрдкрд╛рдВрд╕ рдСрдмреНрдЬреЗрдХреНрдЯ рдмрдирд╛рддрд╛ рд╣реИред
рд╣рдореЗрд╢рд╛ рдХреА рддрд░рд╣, рдЖрдк рд╡рд╣рд╛рдВ рд░реБрдХрдиреЗ рдФрд░ рдлреНрд░реЗрдорд╡рд░реНрдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХрд╛ рдирд┐рд░реНрдгрдп рд▓реЗ рд╕рдХрддреЗ рд╣реИрдВред рдпрд╣, рд╢рд╛рдпрдж, рд╕рд░рд▓ рдПрдХ-рдкреГрд╖реНрда рд╕рд╛рдЗрдЯ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдкрд░реНрдпрд╛рдкреНрдд рд╣реИ рдФрд░ рдпрд╣рд╛рдВ рддрдХ тАЛтАЛрдХрд┐ рд╕рдВрднрд╡рддрдГ рджреЛ рдкреГрд╖реНрдареЛрдВ рдпрд╛ рдЕрдзрд┐рдХ рдХреЗ рд╕рд╛рдеред

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


All Articles