рд▓рдЧрднрдЧ рдПрдХ рд╕рд╛рд▓ рдкрд╣рд▓реЗ, рдореИрдВрдиреЗ PHP рдореЗрдВ рд▓рд┐рдЦреЗ рдЧрдП 'рд╡рд╕рд╛ рд░рд╣рд┐рдд' рдирд╛рдордХ рдорд╛рдЗрдХреНрд░реЛрдлреНрд░рд╛рдорд╡рд░реНрдХ рдкрд░ рдПрдХ рд▓реЗрдЦ
рдкреНрд░рдХрд╛рд╢рд┐рдд рдХрд┐рдпрд╛ рдерд╛ред рдлрд┐рд░ рдЗрд╕ рд░реВрдкрд░реЗрдЦрд╛ рдФрд░ рд▓реЗрдЦ рдиреЗ рд╕реНрд╡рдпрдВ рдХреБрдЫ рд░реБрдЪрд┐ рдкреИрджрд╛ рдХреА, рдЗрд╕рд▓рд┐рдП рдореИрдВрдиреЗ рд▓реЛрдХрдкреНрд░рд┐рдп рд╕рд┐рдирд╛рддреНрд░рд╛ рдХреА рд╢реИрд▓реА рдореЗрдВ рдПрдХ рдФрд░ PHP рдорд╛рдЗрдХреНрд░реЛрдлреНрд░рд╛рдорд╡рд░реНрдХ рдХреА рд╕рдореАрдХреНрд╖рд╛ рдХрд░рдиреЗ рдХрд╛ рдлреИрд╕рд▓рд╛ рдХрд┐рдпрд╛ - рд╕рд┐рд▓реЗрдХреНрд╕ рдкреНрд░реЛрдЬреЗрдХреНрдЯред
PHP рд╕рд░реНрдХрд┐рд▓ рд╕реЗрдВрд╕рд┐рдпреЛ рд▓реИрдмреНрд╕ рдореЗрдВ рдкреНрд░рд╕рд┐рджреНрдз, рдХреЛрдИ рдХрдо рдкреНрд░рд╕рд┐рджреНрдз рдлреЗрдмрд┐рдпрди рдкреЙрдЯреЗрдирд╕реАрдпрд░ - рдЖрдЬ рд╕рдмрд╕реЗ рд▓реЛрдХрдкреНрд░рд┐рдп PHP рдлреНрд░реЗрдорд╡рд░реНрдХ рдореЗрдВ рд╕реЗ рдПрдХ рдХреЗ рд▓реЗрдЦрдХ рдХреЗ рд░реВрдк рдореЗрдВ рдмрдирд╛рдпрд╛ рдЧрдпрд╛ - рд╕рд┐рдореНрдлрдиреА, Silex рдкреНрд░рд╢рдВрд╕рдХреЛрдВ рдХреА рд╕реЗрдирд╛ рджреНрд╡рд╛рд░рд╛ рдЕрдкреЗрдХреНрд╖рд┐рдд рдХрд╛ рдПрдХ рд╣рд▓реНрдХрд╛ рд╕рдВрд╕реНрдХрд░рдг рд╣реИ (рдЬреЛ рдореИрдВ рдЦреБрдж рдХреЛ рд╢рд╛рдорд┐рд▓ рдХрд░рдиреЗ рдХреА рд╣рд┐рдореНрдордд рдХрд░рддрд╛ рд╣реВрдВ) рд╕рд┐рдореНрдлрдиреА 2ред
рдЕрдкрдиреЗ рдХрд╛рдо рдХреЗ рд▓рд┐рдП, Silex рд╕рд┐рдореНрдлрдиреА 2 рдХреЗ рдкреНрд░рдореБрдЦ рдШрдЯрдХреЛрдВ рдХреЛ "рдбрд┐рдкреЗрдВрдбреЗрдВрд╕реА
рдЗрдВрдЬреЗрдХреНрд╢рди " рдбрд┐рдЬрд╛рдЗрди рдкреИрдЯрд░реНрди рдХреЗ рд╕рд░рд▓ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЗ рд╕рд╛рде рд╕рдВрдпреЛрдЬрди рдХреЗ рд░реВрдк рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ, рдЬреЛ рдХрд┐
рдкрд┐рдВрдкрд▓ рд╕рд░реНрд╡рд┐рд╕ рдХрдВрдЯреЗрдирд░ рдХреЗ рд░реВрдк рдореЗрдВ рд╣реИ, рдЬреЛ рдЖрдкрдХреЛ рдХреЛрдб рдХреЗ рддрд╛рд░реНрдХрд┐рдХ рднрд╛рдЧреЛрдВ рдХреЛ рдЖрд╕рд╛рдиреА рд╕реЗ рдЕрд▓рдЧ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ - рдЙрдиреНрд╣реЗрдВ рд╕реНрд╡рддрдВрддреНрд░ рдмрдирд╛рддрд╛ рд╣реИред
Symfony2 рдХреА рддрд░рд╣, Silex рдореЗрдВ рдПрдХ рд╕рд╣рдЬ рдЬреНрдЮрд╛рди рдпреБрдХреНрдд рдПрдкреАрдЖрдИ рд╣реИ, рдЬреЛ рд╡рд┐рдХрд╛рд╕ рдХреА рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреЛ рдХрд╛рдлреА рд╕реБрдЦрдж рдмрдирд╛рддрд╛ рд╣реИ рдФрд░ рдЖрдкрдХреЛ рд▓рдЧрднрдЧ рдХреБрдЫ рдЪрд░рдгреЛрдВ рдореЗрдВ рдлреНрд░реЗрдорд╡рд░реНрдХ рдореЗрдВ рдЕрдкрдиреА рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рдЬреЛрдбрд╝рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред
рдЖрд╡реЗрджрди рдЙрджрд╛рд╣рд░рдг
рд╕рдмрд╕реЗ рд╕рд░рд▓ Silex рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдЗрд╕ рддрд░рд╣ рджрд┐рдЦрддрд╛ рд╣реИ:
require_once __DIR__.'/silex.phar';
рдЬреИрд╕рд╛ рдХрд┐ рдЖрдк рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ, рд╕рдм рдХреБрдЫ рдмрд╣реБрдд рд╕рд░рд▓ рд╣реИред рдпрджрд┐ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ / рд╣реИрд▓реЛ / {name} рдХреЗ рд▓рд┐рдП GET рдЕрдиреБрд░реЛрдз рдХрд░рддрд╛ рд╣реИ, рддреЛ рдХреЛрдб рдХреЛ рдХреНрд▓реЛрдЬрд░ рдлрд╝рдВрдХреНрд╢рди рдХреЗ рдЕрдВрджрд░ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред
рд╕реНрдерд╛рдкрдирд╛
рдХрд╛рдо рдХрд░рдиреЗ рдХреА рд░реВрдкрд░реЗрдЦрд╛ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ php.ini рдореЗрдВ рд╕реНрдерд╛рдкрд┐рдд PHP рд╕рдВрд╕реНрдХрд░рдг рдХреА рддреБрд▓рдирд╛ рдореЗрдВ 5.3 рд╕реЗ рдХрдо рдирд╣реАрдВ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП
phar.readonly = Off
phar.require_hash = Off .
рдлрд╝реЙрд░ рдЖрд░реНрдХрд╛рдЗрд╡ рдХреЛ рд▓реЛрдб рдХрд░рдиреЗ рдФрд░ рдЗрд╕реЗ рд╣рдорд╛рд░реЗ рдмреВрдЯрд╕реНрдЯреНрд░реИрдк рдлрд╝рд╛рдЗрд▓ (index.php) рдореЗрдВ рд╕рдВрд▓рдЧреНрди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдлреНрд░реЗрдорд╡рд░реНрдХ рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдирд╛ рдиреАрдЪреЗ рджрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдЬреИрд╕рд╛ рдХрд┐ рдКрдкрд░ рджрд┐рдП рдЧрдП рдЙрджрд╛рд╣рд░рдг рдореЗрдВ рджрд┐рдЦрд╛рдпрд╛ рдЧрдпрд╛ рд╣реИред
рдпрд╣ рдзреНрдпрд╛рди рджреЗрдиреЗ рдпреЛрдЧреНрдп рд╣реИ рдХрд┐ рд╕рднреА рдЕрдиреБрд░реЛрдзреЛрдВ рдХреЛ рдЗрд╕ рдлрд╝рд╛рдЗрд▓ рдкрд░ рдкреБрдирд░реНрдирд┐рд░реНрджреЗрд╢рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред
рдпрджрд┐ рдЖрдк рдЕрдкрд╛рдЪреЗ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдЕрдиреБрдХреНрд░рдордгрд┐рдХрд╛ рдХреЗ рдЖрдЧреЗ рд░реВрдЯ рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рдореЗрдВ рдирд┐рдореНрди рд╕рд╛рдордЧреНрд░реА рдХреЗ рд╕рд╛рде .htaccess рдмрдирд╛рдПрдВ:
<IfModule mod_rewrite.c>
RewriteEngine On
#RewriteBase /path/to/app
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ index.php [QSA,L]
рдорд╛рд░реНрдЧ
Silex рдЖрдкрдХреЛ рдЕрд╕реАрдорд┐рдд рд▓рдВрдмрд╛рдИ рдХреЗ рдорд╛рд░реНрдЧреЛрдВ рдХреЛ рд╕реНрд╡реАрдХрд╛рд░ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ:
$app->get('/hello/awesome/pink/ponnies', function(){ ... });
рдЖрдк рдорд╛рд░реНрдЧреЛрдВ рдореЗрдВ рдЪрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:
$app->get('/hello/awesome/pink/{animal}', function($animal) { ... });
рдЕрд╕реАрдорд┐рдд рдЪрд░:
$app->get('/hello/{impression}/{color}/{animal}', function($impression, $color, $animal) { ... });
рдЕрдиреБрд░реЛрдз, рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ POST рд╣реЛ рд╕рдХрддрд╛ рд╣реИ:
$app->post('/ponnies', function() use ($app) {
рдФрд░ рдкреВрдд:
$app->put('/blog', function() { ... });
рдФрд░ DELETE:
$app->delete('/blog', function() { ... });
рд╕рддреНрдпрд╛рдкрдирдХрд░реНрддрд╛рдУрдВ рдХреА рдПрдХ рд╢реНрд░реГрдВрдЦрд▓рд╛ рдкреНрд░рддреНрдпреЗрдХ рдорд╛рд░реНрдЧ рд╕реЗ рдЬреБрдбрд╝реА рд╣реЛ рд╕рдХрддреА рд╣реИ:
$app->get('/blog/show/{postId}/{commentId}', function($postId, $commentId) { ... }) ->assert('postId', '\d+')
рдФрд░ рдПрдХ рдирд╛рдо рднреА рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░реЗрдВ:
$app->get('/', function() { ... }) ->bind('homepage');
рдЬреЛ рдЗрди рдорд╛рд░реНрдЧреЛрдВ рдХреЗ рд▓рд┐рдВрдХ рдЙрддреНрдкрдиреНрди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧреА рд╣реИред
рдкреНрд░рддреНрдпреЗрдХ рдЕрдиреБрд░реЛрдз рдХреЗ рдкрд╣рд▓реЗ рдФрд░ рдмрд╛рдж рдореЗрдВ, рдЖрдк рдлрд╝рд┐рд▓реНрдЯрд░ рд╕реЗ рдкрд╣рд▓реЗ / рдмрд╛рдж рдореЗрдВ рдЙрдкрдпреБрдХреНрдд рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдордирдорд╛рдиреЗ рдХреЛрдб рдХреЛ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:
$app->before(function() {
рд╕реЗрд╡рд╛рдПрдВ
рдкрд┐рдВрдкрд▓ рдХреЗ рд░реВрдк рдореЗрдВ рдбрд┐рдкреЗрдВрдбреЗрдВрд╕реА рдЗрдВрдЬреЗрдХреНрд╢рди рдХрд╛ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХрд╛рдлреА рд╕рд░рд▓ рдФрд░ рд╕реАрдзрд╛ рд╣реИред
рдПрдХ рдирдпрд╛ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдЗрдВрд╕реНрдЯреЗрдВрд╕ рдмрдирд╛рдПрдВ:
use Silex\Application; $app = new Application();
рдФрд░ рдЗрд╕реЗ рдПрдХ рд╕рд░рдгреА рдХреЗ рд░реВрдк рдореЗрдВ рджреЗрдЦреЗрдВ, рдЗрд╕реЗ рд╕рд╛рдорд╛рдиреНрдп рдЪрд░ рдХреЗ рд░реВрдк рдореЗрдВ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░реЗрдВ:
$app['some_parameter'] = 'value';
рдФрд░ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдкрд░рд┐рдЪрд┐рдд рдмрдВрдж:
$app['some_service'] = function() { return new Service(); };
рдЙрдирдХреЗ рдЖрдЧреЗ рдХреЗ рдЙрдкрдпреЛрдЧ рдХреЗ рд▓рд┐рдП, рдЙрдиреНрд╣реЗрдВ рдПрдХ рд╕рд░рдгреА рдХреЗ рддрддреНрд╡реЛрдВ рдХреЗ рд░реВрдк рдореЗрдВ рд╕рдВрджрд░реНрднрд┐рдд рдХрд░рдирд╛ рдкрд░реНрдпрд╛рдкреНрдд рд╣реИ:
$service = $app['some_service'];
рдпрджрд┐ рд╕реЗрд╡рд╛ рдХреЛ рдПрдХ рд╣реА рдЙрджрд╛рд╣рд░рдг рдореЗрдВ рдмрдирд╛рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП, рддреЛ рд╣рдо рдПрдкреНрд▓рд┐рдХреЗрд╢рди рд╢реЗрдпрд░ рд╡рд┐рдзрд┐ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ:
$app['some_service'] = $app->share(function() { return new Service(); });
рдЗрд╕ рд╕реНрдерд┐рддрд┐ рдореЗрдВ, $ app ['some_service'] рдХреЗрд╡рд▓ рдПрдХ рдмрд╛рд░ рдХреЙрд▓ рдХреЗ рджреМрд░рд╛рди рдмрдирд╛рдпрд╛ рдЬрд╛рдПрдЧрд╛, рдФрд░ рдмрд╛рдж рдХреА рдХреЙрд▓ рдкрд░, рдЗрд╕рдХрд╛ рдЙрджрд╛рд╣рд░рдг рд╡рд╛рдкрд╕ рдЖ рдЬрд╛рдПрдЧрд╛ред
рд╡рд┐рд╕реНрддрд╛рд░
рдврд╛рдВрдЪрд╛ рдЕрдкрдиреЗ рд╕реНрд╡рдпрдВ рдХреЗ рд▓рд┐рдЦрдиреЗ рдХреА рдХреНрд╖рдорддрд╛ рдХреЗ рд╕рд╛рде рд╡рд┐рд╕реНрддрд╛рд░ рдХреА рдПрдХ рд▓рдЪреАрд▓реА рдкреНрд░рдгрд╛рд▓реА рдХреЛ рд▓рд╛рдЧреВ рдХрд░рддрд╛ рд╣реИред
рдбреЗрдЯрд╛рдмреЗрд╕ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рджреВрд░-рджреВрд░ рдХреЗ рд╡рд┐рд╕реНрддрд╛рд░ рдХреЛ рдЬреЛрдбрд╝рдиреЗ рдФрд░ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХрд╛ рдПрдХ рдЙрджрд╛рд╣рд░рдг:
use Acme\DatabaseExtension; $app = new Application(); $app->register(new DatabaseExtension(), array( 'database.dsn' => 'mysql:host=localhost;dbname=myapp', 'database.user' => 'root', 'database.password' => 'secret_root_password', ));
рдЕрдм рдЙрдкрд▓рдмреНрдз рдорд╛рдирдХ рдПрдХреНрд╕рдЯреЗрдВрд╢рди рдореЗрдВ рд╕реЗ:
- рдПрдХрд╛рд▓рд╛рдк - рд▓рдХрдбрд╝рд╣рд╛рд░рд╛
- рд╕рддреНрд░ рдкреНрд░рдмрдВрдзрди - рд╕рддреНрд░ рдкреНрд░рдмрдВрдзрди
- TwigExtension - рдЯреЗрдореНрдкрд▓реЗрдЯ рдЗрдВрдЬрди
- UrlGeneratorExtension - URL рдЬрдирд░реЗрд╢рди
рд░рд╛рд╕реНрддреЗ рдореЗрдВ - Doctrine2 рдФрд░ рд╡реНрдпрд╡рд╕реНрдерд╛рдкрдХ рдкреИрдирд▓ рдЬрдирд░реЗрдЯрд░ред
рдФрд░ рдпрд╣ рд╕рд┐рд░реНрдл рд╢реБрд░реБрдЖрдд рд╣реИред Silex рдХреЗ рдПрдХреНрд╕рдЯреЗрдВрд╢рди рдХреЗ рд░реВрдк рдореЗрдВ рддреАрд╕рд░реЗ рдкрдХреНрд╖ рдХреЗ рдкреБрд╕реНрддрдХрд╛рд▓рдпреЛрдВ рдХрд╛ рдЕрдиреБрдХреВрд▓рди рдХрд╛рдлреА рд╕рд░рд▓ рд╣реИ, рдЗрд╕рд▓рд┐рдП, рдЬреИрд╕реЗ рд╣реА рд╕рдореБрджрд╛рдп рдЗрд╕ рдврд╛рдВрдЪреЗ рдХреЗ рдЖрд╕рдкрд╛рд╕ рдмрдирддрд╛ рд╣реИ, рдЙрдирдореЗрдВ рд╕реЗ рдмрд╣реБрдд рдХреБрдЫ рд╣реЛрдЧрд╛ред
рдкрд░рд┐рдгрд╛рдо
рдорд╛рдЗрдХреНрд░реЛрдлрд╝реНрд░реЗрдо рд╣рдореЗрд╢рд╛ рдПрдХ рд╕рд░рд▓ рд╕рдВрд░рдЪрдирд╛ рдХреЗ рд╕рд╛рде рд╡реЗрдм рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдмрдирд╛рдиреЗ рдореЗрдВ рдПрдХ рдареЛрд╕ рд╕реНрдерд╛рди рдкрд░ рдХрдмреНрдЬрд╛ рдХрд░ рд▓реЗрддреЗ рд╣реИрдВ, рдФрд░ рд╕рд┐рдореНрдлрдиреА 2 рдХреЗ рд░реВрдк рдореЗрдВ рдЗрд╕ рддрд░рд╣ рдХреЗ рд╡рд┐рд╢рд╛рд▓ рдХреЗ рдХрдВрдзреЛрдВ рдкрд░ рдЖрдзрд╛рд░рд┐рдд рдорд╛рдЗрдХреНрд░реЛрдлрд╝реНрд░рд╛рдорд╡рд░реНрдХ рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ PHP рдХреА рджреБрдирд┐рдпрд╛ рдореЗрдВ рдПрдХ рдмрд╣реБрдд рд╣реА рдорд╣рддреНрд╡рдкреВрд░реНрдг рдШрдЯрдирд╛ рд╣реИред
рдлреНрд░реЗрдорд╡рд░реНрдХ рд╡реЗрдмрд╕рд╛рдЗрдЯ: http://silex-project.orgрдЙрдкрдпреЛрдЧреА рд▓рд┐рдВрдХ:
Symfony2 рд╡реЗрдмрд╕рд╛рдЗрдЯрдЪрд░рдг рдкреНрд░рд▓реЗрдЦрдирдирд┐рд░реНрднрд░рддрд╛ рдЗрдВрдЬреЗрдХреНрд╢рди