Symfony2 рдореЗрдВ рдПрдХ рдирд┐рдпрдВрддреНрд░рдХ рдХрд╛ рдкрд░реАрдХреНрд╖рдг

рдореИрдВ Symfony2 рдореЗрдВ рдирд┐рдпрдВрддреНрд░рдХреЛрдВ рдХреЗ рдпреВрдирд┐рдЯ рдкрд░реАрдХреНрд╖рдг рдХреЗ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ Symfony2 рдбреЗрд╡рд▓рдкрд░реНрд╕ рдореЗрдВ рд╕реЗ рдПрдХ рджреНрд╡рд╛рд░рд╛ рдХрд▓ рдХреЗ рдкреЛрд╕реНрдЯ рдХреЗ рдЕрдиреБрд╡рд╛рдж рдкрд░ рдЖрдкрдХрд╛ рдзреНрдпрд╛рди рдЖрдХрд░реНрд╖рд┐рдд рдХрд░рддрд╛ рд╣реВрдВред рд╕рд┐рдореНрдлрдиреА 2 рдбреЗрд╡рд▓рдкрд░реНрд╕ рдХреЗ рд▓рд┐рдП рд╡рд┐рд╖рдп рдмрд╣реБрдд рдкреНрд░рд╛рд╕рдВрдЧрд┐рдХ рд╣реИред рдпрд╣ рднреА рдзреНрдпрд╛рди рджреЗрдиреЗ рдпреЛрдЧреНрдп рд╣реИ рдХрд┐ рдЗрд╕ рдкреЛрд╕реНрдЯ рдореЗрдВ рд╕рд┐рдореНрдлрдиреА 2 рдореЗрдВ рд╕реЗрд╡рд╛ рдХреЗ рд░реВрдк рдореЗрдВ рдПрдХ рдирд┐рдпрдВрддреНрд░рдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рджреЗрд╡-рд╕рдореВрд╣реЛрдВ рдкрд░ рдПрдХ рдЪрд░реНрдЪрд╛ рдХреЗ рдкрд░рд┐рдгрд╛рдо рдХрд╛ рдЙрд▓реНрд▓реЗрдЦ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред


MVC рдлреНрд░реЗрдорд╡рд░реНрдХ рдХреЗ рд╕рд╛рде рдмрд╣реБрдд рд╕рд╛рд░реЗ рдЕрдиреБрднрд╡ рдХреЗ рд╕рд╛рде, рдПрдХ рдЪреАрдЬ рд▓рдЧрд╛рддрд╛рд░ рдЕрдирд╕реБрд▓рдЭреА рдмрдиреА рд╣реБрдИ рд╣реИ - рдирд┐рдпрдВрддреНрд░рдХреЛрдВ рдХрд╛ рдкрд░реАрдХреНрд╖рдг рдХреИрд╕реЗ рдХрд░реЗрдВред рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЗрд╕рдХрд╛ рдореБрдЦреНрдп рдХрд╛рд░рдг рдкрд░реАрдХреНрд╖рдг рдХреА рдЧреИрд░-рд╕реНрдкрд╖реНрдЯрддрд╛ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдирд┐рдпрдВрддреНрд░рдХ рдврд╛рдВрдЪреЗ рдХреЗ "рдХрд╛рд▓реЗ рдЬрд╛рджреВ" рдХреЗ рддрддреНрд╡реЛрдВ рдХреЗ рдкреНрд░рдХрд╛рд░ рд╣реИрдВред рдлрд╝рд╛рдЗрд▓ рд╕рд┐рд╕реНрдЯрдо рдореЗрдВ рдирд┐рдпрдВрддреНрд░рдХреЛрдВ рдХреА рдирд┐рдпреБрдХреНрддрд┐ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХрдИ рд╕рдордЭреМрддреЗ рд╣реИрдВ, рдЙрдиреНрд╣реЗрдВ рдХрд┐рди рдирд┐рд░реНрднрд░рддрд╛рдУрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдкрддрд╛ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП рдФрд░ рдирд┐рдпрдВрддреНрд░рдХ рдХреЗ рдкрд╛рд╕ рдХреНрдпрд╛ рдХрдареЛрд░ рдХрдиреЗрдХреНрд╢рди рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП (рджреЗрдЦреЗрдВ рдкрд░рдд)ред

рдРрд╕реА рд╕реНрдерд┐рддрд┐ рдирд┐рдпрдВрддреНрд░рдХреЛрдВ рдХрд╛ рдкрд░реАрдХреНрд╖рдг рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЖрд╕рд╛рди рддрд░реАрдХреЗ рдирд╣реАрдВ рджреЗрддреА рд╣реИ, рдЬрдм рддрдХ рдХрд┐ рдЖрдк рдПрдХ рдирд┐рдпрдВрддреНрд░рдХ рдХрд╛ рдЪрдпрди рдирд╣реАрдВ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рдкрд░реАрдХреНрд╖рдг рдмрд╛рддрдЪреАрдд рдХреЗ рд▓рд┐рдП рдЗрд╕рдХреА рдХреБрдЫ рдореБрдЦреНрдп рдирд┐рд░реНрднрд░рддрд╛рдПрдВ рд╣реИрдВ - рдЖрдкрдХреЛ рдкреВрд░реЗ рдврд╛рдВрдЪреЗ рдХреЛ рдЪрд▓рд╛рдиреЗ рдФрд░ рдХрд╛рд░реНрдпрд╛рддреНрдордХ рдкрд░реАрдХреНрд╖рдг рдЪрд▓рд╛рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред

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

Symfony2 рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдЪреАрдЬреЛрдВ рдХреЛ рдмрджрд▓ рд░рд╣рд╛ рд╣реИред

рдкреНрд░рд╛рд░рдВрдн рдореЗрдВ, Symfony2 рдврд╛рдВрдЪреЗ рдореЗрдВ, рдХреЗрд╡рд▓ рдирд┐рдпрдВрддреНрд░рдХ рд▓реЛрдбрд┐рдВрдЧ рд╕рдордЭреМрддрд╛ рд╣реИред рдирд┐рдпрдВрддреНрд░рдХ рдЙрджрд╛рд╣рд░рдг рдмрд╣реБрдд рд╣рд▓реНрдХрд╛ рд░рд╣рддрд╛ рд╣реИ рдФрд░ рдЗрд╕рдХреЗ рд╕рдВрдЪрд╛рд▓рди рдХреЗ рд▓рд┐рдП рдХреБрдЫ рдореВрд▓ рд╡рд░реНрдЧ рдХреЗ рд╡рд┐рд╕реНрддрд╛рд░ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реЛрддреА рд╣реИред рдпрджрд┐ рдЖрдкрдХреЗ рдирд┐рдпрдВрддреНрд░рдХ рдХрдВрдЯреЗрдирд░рд╡реЗрдпрд░ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдЖрдкрдХреЛ рдХрдВрдЯреЗрдирд░рдХреЗрд╡реЗрдпрд░ :: setContainer () рд╡рд┐рдзрд┐ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рд┐рдд рдПрдХ рдбреАрдЖрдИрд╕реА (рдирд┐рд░реНрднрд░рддрд╛ рдЗрдВрдЬреЗрдХреНрд╢рди рдХрдВрдЯреЗрдирд░) рдорд┐рд▓реЗрдЧрд╛, рдЬрд┐рд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдЖрдк рдбреАрдЖрдИрд╕реА рдореЗрдВ рдШреЛрд╖рд┐рдд рдХрд┐рд╕реА рднреА рд╕реЗрд╡рд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред

рдЬрдм рдЖрдк рдЖрд╡реЗрджрди рдХреЗ рд▓рд┐рдП рдкреВрд░реНрдг рдЕрдиреБрд░реЛрдзреЛрдВ рдХрд╛ рдкрд░реАрдХреНрд╖рдг рдХрд░рддреЗ рд╣реИрдВ рдФрд░ рдЗрд╕ рдмрд╛рд░реЗ рдореЗрдВ рдЖрдЙрдЯрдкреБрдЯ рдХреА рдЬрд╛рдВрдЪ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдХреБрдЫ рд╕рдордп рдХреЗ рд▓рд┐рдП рдирд┐рдпрдВрддреНрд░рдХреЛрдВ рдХреЗ рдкрд░реАрдХреНрд╖рдг рдХреЗ рд▓рд┐рдП рдЕрдиреБрд╢рдВрд╕рд┐рдд рд╡рд┐рдзрд┐ рдмреНрд▓реИрдХ рдмреЙрдХреНрд╕ рдХреЗ рдкрд░реАрдХреНрд╖рдг рдХреА рд╕рдиреНрдирд┐рдХрдЯрди рдереА:
<?php
$client = $ this ->createClient();

$client->request( 'GET' , '/index' );
$response = $client->getResponse();

$ this ->assertEquals(200, $response->getStatusCode());
$ this ->assertRegExp( '/<h1>My Cool Website<\/h1>/' , $response->getContent());
рдЗрд╕ рддрдереНрдп рдХреЗ рдмрд╛рд╡рдЬреВрдж рдХрд┐ рдпрд╣ рд╡рд┐рдзрд┐ рдкрдврд╝рдиреЗ рдФрд░ рд╕рдордЭрдиреЗ рдореЗрдВ рдЖрд╕рд╛рди рд╣реИ, рдЗрд╕рдХреЗ рдиреБрдХрд╕рд╛рди рд╣реИрдВ:рдПрдХ рдЖрджрд░реНрд╢ рджреБрдирд┐рдпрд╛ рдореЗрдВ, рдореИрдВ рдЕрдкрдиреЗ рдЖрд╡реЗрджрди рдореЗрдВ рдЕрдиреНрдп рд╕реЗрд╡рд╛рдУрдВ рдХреЗ рд╕рд╛рде рдирд┐рдпрдВрддреНрд░рдХ рдХреА рдмрд╛рддрдЪреАрдд рдХрд╛ рдкрд░реАрдХреНрд╖рдг рдХрд░рдирд╛ рдЪрд╛рд╣реВрдВрдЧрд╛, рдЬреИрд╕реЗ:
<?php

namespace Company\ApplicationBundle\Tests\Controller;
use Company\ApplicationBundle\Controller\IndexController;

class IndexControllerTest extends \PHPUnit_Framework_TestCase
{
//...
public function testIndexAction()
{
$templating = $ this ->getMock( 'Symfony\Bundle\FrameworkBundle\Templating\Engine' );
$templating->expects($ this ->once())
->method( 'render' )
->with( 'Application:Index:index' )
->will($ this ->returnValue( 'success' ))
;

$controller = new IndexController();
$controller->setTemplating($templating);

$ this ->assertEquals( 'success' , $controller->indexAction());
}
}
рдиреЛрдЯ: рдирд┐рдпрдВрддреНрд░рдХ рдЕрдм рдЖрдзрд╛рд░ рд╡рд░реНрдЧ рдХреЗ рдмрд┐рдирд╛ POPO (рд╕рд╛рджрд╛ рдкреБрд░рд╛рдирд╛ PHP рдСрдмреНрдЬреЗрдХреНрдЯ) рд╣реИ, рдЬрд┐рд╕реЗ рдЗрд╕реЗ рд╡рд┐рд╕реНрддрд╛рд░рд┐рдд рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред Symfony2 рдХреЛ рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрдВрдЯреНрд░реЛрд▓рд░ рдХреНрд▓рд╛рд╕ рдХреЗ рдЕрд▓рд╛рд╡рд╛ рдХрд┐рд╕реА рдФрд░ рдЪреАрдЬ рдХреА рдЬрд░реВрд░рдд рдирд╣реАрдВ рд╣реИред

рдиреЛрдЯ: PHPUnit рдореЗрдВ рдирдХрд▓реА рд╡рд╕реНрддреБрдУрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЕрдзрд┐рдХ рдкрдврд╝реЗрдВ ред

рдЕрдЪреНрдЫреА рдЦрдмрд░ рдпрд╣ рд╣реИ рдХрд┐ Symfony2 рдпрд╣ рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред рдЕрдм рдЖрдкрдХреЗ рд╕рднреА рдирд┐рдпрдВрддреНрд░рдХ рд╕реЗрд╡рд╛рдУрдВ рдХреЗ рд░реВрдк рдореЗрдВ рдХрд╛рд░реНрдп рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдЕрддреАрдд, рдЖрдо рддреМрд░ рдкрд░ рд╕реНрд╡реАрдХреГрдд рд╕рдВрд╕реНрдХрд░рдг рднреА рдЫреЛрдЯреЗ рдирд┐рдпрдВрддреНрд░рдХреЛрдВ рдХреЗ рд▓рд┐рдП рд╕рдорд░реНрдерд┐рдд рдФрд░ рдЕрдкрд░рд┐рд╣рд╛рд░реНрдп рд╣реИ рдЬрд┐рдиреНрд╣реЗрдВ рдЗрдХрд╛рдИ рдкрд░реАрдХреНрд╖рдг рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИред

рдКрдкрд░ рджрд┐рдП рдЧрдП рдЙрджрд╛рд╣рд░рдг рд╕реЗ рдирд┐рдпрдВрддреНрд░рдХ рдХреЗ рд▓рд┐рдП рд╕рд┐рдореНрдлрдиреА 2 рдХреЗ рд╕рд╛рде рд╕рд╣реА рдврдВрдЧ рд╕реЗ рдмрд╛рддрдЪреАрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдФрд░ рдЬреИрд╕рд╛ рдХрд┐ рдпрд╣ рдЪрд╛рд╣рд┐рдП, рд╣рдореЗрдВ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред

рдПрдХ рдирд┐рдпрдВрддреНрд░рдХ рд╡рд░реНрдЧ рдмрдирд╛рдПрдБ:
<?php

namespace Company\ApplicationBundle\Controller;
use Symfony\Bundle\FrameworkBundle\Templating\Engine;

class IndexController
{
/**
* @var Symfony\Bundle\FrameworkBundle\Templating\Engine
*/
private $templating;

/**
* @param Symfony\Bundle\FrameworkBundle\Templating\Engine $templating
*/
public function setTemplating(Engine $templating)
{
$ this ->templating = $templating;
}

/**
* @return Symfony\Component\HttpFoundation\Response
*/
public function indexAction()
{
return $ this ->templating->render( 'ApplicationBundle:Index:index' );
}
}

рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд xml рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ DIC рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдмрдирд╛рдПрдБ:
<? xml version ="1.0" ? >

< container xmlns ="http://www.symfony-project.org/schema/dic/services"
xmlns:xsi ="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation ="http://www.symfony-project.org/schema/dic/services www.symfony-project.org/schema/dic/services/services-1.0.xsd" >

< services >
< service id ="index_controller" class ="Company\ApplicationBundle\Controller\IndexController" >
< call method ="setTemplating" />
< argument type ="service" id ="templating" />
</ call >
</ service >
</ services >
</ container >

рдПрдХ рд░реВрдЯрд┐рдВрдЧ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдмрдирд╛рдПрдБ:
<? xml version ="1.0" encoding ="UTF-8" ? >

< routes xmlns ="http://www.symfony-project.org/schema/routing"
xmlns:xsi ="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation ="http://www.symfony-project.org/schema/routing www.symfony-project.org/schema/routing/routing-1.0.xsd" >

< route id ="index" pattern ="/index" >
< default key ="_controller" > index_controller:indexAction </ default >
</ route >
</ routes >

рдиреЛрдЯ: рдКрдкрд░ рдХреЗ рдЙрджрд╛рд╣рд░рдг рдореЗрдВ, service_id: рдХреНрд░рд┐рдпрд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рд╕рд╛рдорд╛рдиреНрдп рдмрдВрдбрд▓ рдХреЗ рдмрдЬрд╛рдп рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред рдмрдВрдбрд▓: рдирд┐рдпрдВрддреНрд░рдХ: рдХрд╛рд░реНрд░рд╡рд╛рдИ (рдкреНрд░рддреНрдпрдп 'рдПрдХреНрд╢рди' рдХреЗ рдмрд┐рдирд╛)ред

рдЬрдм рдпрд╣ рд╕рдм рд╣реЛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рд╣рдореЗрдВ рдЕрдкрдиреА рд╕реЗрд╡рд╛рдУрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ Symfony2 рдХреЛ рд╕реВрдЪрд┐рдд рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдПред рдирд┐рд░реНрднрд░рддрд╛ рдЗрдВрдЬреЗрдХреНрд╢рди рд╡рд┐рд╕реНрддрд╛рд░ рдирд╣реАрдВ рдмрдирд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ рдФрд░ рд╡рд┐рдиреНрдпрд╛рд╕ рдлрд╛рдЗрд▓ рдХреЗ рдмрд┐рдВрджреБ рдмрдирд╛рдпрд╛ рдЬрд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдо рд╕реАрдзреЗ рд╣рдорд╛рд░реА рд╕реЗрд╡рд╛рдУрдВ рдХреЛ рдкрдВрдЬреАрдХреГрдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:

<?php

namespace Company\ApplicationBundle;

use Symfony\Component\HttpKernel\Bundle\Bundle;
use Symfony\Component\DependencyInjection\ContainerBuilder;
use Symfony\Component\DependencyInjection\Loader\XmlFileLoader;

class ApplicationBundle extends Bundle {
public function registerExtensions(ContainerBuilder $container) {
parent::registerExtensions($container);

// register controllers
$loader = new XmlFileLoader($container);
$loader->load(__DIR__. '/Resources/config/controllers.xml' );
}
}

рдиреЛрдЯ: рдЙрдХреНрдд рддрдХрдиреАрдХ рдореВрд▓ рд░реВрдк рд╕реЗ рдХреНрд░рд╛рдЗрд╕ рд╡рд╛рд▓рд╕реНрдорд┐рде рджреНрд╡рд╛рд░рд╛ рдУрдкрдирд╕реНрдХреА рдореЗрдВ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХреЗ рд╕рдВрдпреБрдХреНрдд рд╡рд┐рдХрд╛рд╕ рдХреЗ рджреМрд░рд╛рди рдЖрд╡рд╛рдЬ рджреА рдЧрдИ рдереАред

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

Company
| - ApplicationBundle
| | - Controller
| | | - IndexController.php
| | - Resources
| | | - config
| | | | - controller_routing.xml
| | | | - controllers.xml
| | | - views
| | | | - Index
| | | | | - index.php
| | - ApplicationBundle.php

рдЗрди рдЪрд░рдгреЛрдВ рдХреЛ рдкреВрд░рд╛ рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж, рдЖрдк URL рдЯрд╛рдЗрдк рдХрд░рдХреЗ рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдореЗрдВ рдЗрд╕реЗ рдЖрдЬрд╝рдорд╛ рд╕рдХрддреЗ рд╣реИрдВ:
your_application/your_front_controller.php/index

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


All Articles