Silex PHP рдлреНрд░реЗрдорд╡рд░реНрдХ рдХреЗ рд▓рд┐рдП рдореВрд▓ рдирд┐рд╡рд╛рд╕реА MVC

MVC рдЖрд░реНрдХрд┐рдЯреЗрдХреНрдЪрд░ рдХреЗ рд▓рд┐рдП Silex рдорд╛рдЗрдХреНрд░реЛ-рдлреНрд░реЗрдорд╡рд░реНрдХ рдХреЛ рдХреИрд╕реЗ рд╕рдВрд╢реЛрдзрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдП, рдпрд╣ рдмрддрд╛рддреЗ рд╣реБрдП рдПрдХ рд▓реЗрдЦ рдкрдврд╝рдиреЗ рдХреЗ рдмрд╛рдж, рдореБрдЭреЗ рдПрдХ рджреЛрд╣рд░рд╛ рдкреНрд░рднрд╛рд╡ рдорд┐рд▓рд╛ред рд╡рд┐рдзрд┐ рдХреЛ рдЬреАрд╡рди рдХрд╛ рдЕрдзрд┐рдХрд╛рд░ рд╣реИ, рд╣рд╛рд▓рд╛рдВрдХрд┐:

  1. ORM рдХреЛ рд╣рдореЗрд╢рд╛ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реЛрддреА рд╣реИ, рдореИрдВ рдореЙрдбрд▓ рдХрд╛ рдПрдХ рд╕рд░рд▓ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ;
  2. Silex рдореЗрдВ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА (рдмрд╣реБрдд рд╕реНрдкрд╖реНрдЯ рдирд╣реАрдВ рд╣реИ) рджреЗрд╢реА рдирд┐рдпрдВрддреНрд░рдХреЛрдВ;
  3. рдЕрдкрдиреЗ рдСрдЯреЛрд▓рд░рд╛рдЗрдЯрд░ рд▓рд┐рдЦрдирд╛ рдЬрдм рдЖрдк рд╕рд╣реА рдЪреАрдЬрд╝ рдХреЛ рдЬреЛрдбрд╝ рд╕рдХрддреЗ рд╣реИрдВ рддреЛ рд╕рдВрдЧреАрддрдХрд╛рд░ рдЕрдЪреНрдЫрд╛ рдирд╣реАрдВ рд╣реИред

рдЖрдЗрдП рджреЗрдЦреЗрдВ рдХрд┐ рдХреНрдпрд╛ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред

рд╣рдо рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдЖрд╡реЗрджрди рд╕рдВрд░рдЪрдирд╛ рдХрд╛ рдкрд╛рд▓рди рдХрд░реЗрдВрдЧреЗ:
+ project | + protected | composer.json | composer.phar | composer.lock | + app | + Controllers | + Models | + Views | + vendor | + providers | + Providers | + public | .htaccess | index.php | + css | + img | + js 

рдореИрдВрдиреЗ project/public рдлрд╝реЛрд▓реНрдбрд░ рдкрд░ рд╡рд░реНрдЪреБрдЕрд▓ рд╣реЛрд╕реНрдЯ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд┐рдпрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдПрдХ .htaccess
 # project/public/.htaccess <IfModule mod_rewrite.c> Options -MultiViews RewriteEngine On RewriteCond %{REQUEST_FILENAME} !-f RewriteRule ^ index.php [L] </IfModule> 

рдХрдореНрдкреЛрдЬрд╝рд░ рдкреИрдХреЗрдЬ рдореИрдиреЗрдЬрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ Silex рдХреЛ рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдирд╛


рд╣рд╛рд▓ рд╣реА рдореЗрдВ, Silex рдЗрд╕ рд╕реНрдерд╛рдкрдирд╛ рд╡рд┐рдзрд┐ рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рддрд╛ рд╣реИ, рдФрд░ рдпрд╣рд╛рдБ рдЖрдкрдХреЛ рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдХреНрдпреЛрдВ рд╣реИ:

рд▓рдЧрднрдЧ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рд╕рд╛рдордЧреНрд░реА рдХреЗ рд╕рд╛рде рдПрдХ project/protected/composer.json рдлрд╝рд╛рдЗрд▓ рдмрдирд╛рдПрдБ (рдпрд╣ рдЖрдкрдХреА рдЬрд░реВрд░рдд рдХреЗ рдЖрдзрд╛рд░ рдкрд░):

  {
     "рдЖрд╡рд╢реНрдпрдХрддрд╛": {
         "silex / silex": "1.0ред *"
     }
     "рдиреНрдпреВрдирддрдо-рд╕реНрдерд┐рд░рддрд╛": "рджреЗрд╡",
     "рдСрдЯреЛрд▓реЙрдб": {
         "psr-0": {
             "рдкреНрд░рджрд╛рддрд╛": "",
             "рдирд┐рдпрдВрддреНрд░рдХреЛрдВ": "рдПрдкреНрд▓рд┐рдХреЗрд╢рди /"
         }
     }
 }

рдпрд╣рд╛рдБ рд╣рдо рдЦреБрдж Silex рдХреЛ рдкреНрд░рд╛рдкреНрдд рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ рдФрд░ рд╕рдВрдХреЗрдд рджреЗрддреЗ рд╣реИрдВ рдХрд┐ рд╣рдо project/protected/Providers рд╕реЗ рдЕрдкрдиреЗ рдкреНрд░реЛрд╡рд╛рдЗрдбрд░реНрд╕ (рдЙрдирдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЕрдзрд┐рдХ рдмрд╛рдж рдореЗрдВ) рдХреЛ рд▓реЛрдб рдХрд░реЗрдВрдЧреЗ, рдФрд░ project/protected/app/Controllers ред
рд╕реНрдерд╛рдкрдирд╛ рдХреЗ рд▓рд┐рдП рдЖрджреЗрд╢реЛрдВ рдХрд╛ рдПрдХ рд╕реЗрдЯ:

  рд╕реАрдбреА / рдкрде / рд╕реЗ / рдкрд░рд┐рдпреЛрдЬрдирд╛ / рд╕рдВрд░рдХреНрд╖рд┐рдд
 curl -s http://getcomposer.org/installer |  php
 php рдХрдВрдкреЛрдЬрд░


Silex рдкреНрд░рджрд╛рддрд╛рдУрдВ


рдкреНрд░рджрд╛рддрд╛ Silex рдХреА рдПрдХ рдорд╣рд╛рди рд╡рд┐рд╢реЗрд╖рддрд╛ рд╣реИ, рдЬрд┐рд╕рд╕реЗ рдЖрдк рддреГрддреАрдп-рдкрдХреНрд╖ рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рдХреЛ рд▓рд╛рдЧреВ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рджреЛ рдкреНрд░рдХрд╛рд░ рдХреЗ рдкреНрд░рджрд╛рддрд╛ рд╣реИрдВ: рдирд┐рдпрдВрддреНрд░рдХ рдХреЗ рд▓рд┐рдП рдХрдВрдЯреНрд░реЛрд▓рд░рдкреНрд░реЛрд╡рд╛рдЗрдбрд░рдЗрдВрдЯрд░рдлреЗрд╕ рдФрд░ рдмрд╛рдХреА рд╕рдм рдХреЗ рд▓рд┐рдП рд╕рд░реНрд╡рд┐рд╕рдкреНрд░реЛрд╡рд╛рдЗрдбрд░рдЗрдВрдЯрд░рдлреЗрд╕ (рд╣рдорд╛рд░реЗ рдорд╛рдорд▓реЗ рдореЗрдВ, рдореЙрдбрд▓ рдХреЗ рд▓рд┐рдП)ред

рдЖрджрд░реНрд╢


рдЖрдЗрдП рдПрдХ рд╕рд░рд▓ рд╕реЗрд╡рд╛ рдкреНрд░рджрд╛рддрд╛ рдФрд░ рдореЙрдбрд▓ рд▓реЛрдбрд░ рд▓рд┐рдЦреЗрдВред

 <?php // project/protected/Providers/ModelsServiceProvider.php namespace Providers; use Silex\Application; use Silex\ServiceProviderInterface; class ModelsServiceProvider implements ServiceProviderInterface { public function register(Application $app) { $app['models.path'] = array(); $app['models'] = $app->share(function($app) { return new Models($app); }); } public function boot(Application $app) { } } class Models { private $app; public function __construct(Application $app) { $this->app = $app; } public function load($modelName, $modelMethod, $data = array()) { require_once $this->app['models.path'] . $modelName . '.php'; $Model = new $modelName($this->app); return $Model->$modelMethod($data); } } 

рдореЙрдбрд▓ рдХреЗ рд╕рд╛рде, рд╕рд╛рдорд╛рдиреНрдп рддреМрд░ рдкрд░, рдпрд╣ рд╕рдм рд╣реИред рдЕрдм рд╣рдо project/protected/app/Models рдбрд╛рдпрд░реЗрдХреНрдЯрд░реА рдореЗрдВ $app['models']->load('Class', 'Method', $data) рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдХрд┐рд╕реА рднреА рдПрдХ рдХреЛ рд▓реЛрдб рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ $app['models']->load('Class', 'Method', $data) рд▓рд┐рдП рдЖрд╡рд╢реНрдпрдХ рдбреЗрдЯрд╛ $data рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░рдиреЗ рдХреА рдХреНрд╖рдорддрд╛ рдХреЗ рд╕рд╛рде рдирд┐рд░реНрдорд╛рдг рдХрд░рддреЗ рд╣реИрдВред ред рдпрд╣ рдХреЗрд╡рд▓ рд╣рдорд╛рд░реЗ рдкреНрд░рджрд╛рддрд╛ рдХреЛ Silex рдореЗрдВ рдкрдВрдЬреАрдХреГрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдмрдиреА рд╣реБрдИ рд╣реИред

рдирд┐рдпрдВрддреНрд░рдХ


рдХреЗрд╡рд▓ рдПрдХ рдЪреАрдЬ рдЬреЛ рд╣рдореЗрдВ рд╕реАрдзреЗ рдзреНрдпрд╛рди рдореЗрдВ рд░рдЦрдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ рд╡рд╣ рд╣реИ рдирд┐рдпрдВрддреНрд░рдХ рдХрдХреНрд╖рд╛рдУрдВ рдХрд╛ рдСрдЯреЛрд▓реЙрдбред рддреЛ рдЕрдм рд╣рдо рдирд┐рдпрдВрддреНрд░рдХреЛрдВ рдХреЛ рдорд╛рдирдХ Silex mount рд╡рд┐рдзрд┐ рд╕реЗ рдЬреЛрдбрд╝ рд╕рдХрддреЗ рд╣реИрдВред рдЖрдЗрдП рджреЗрдЦреЗрдВ рдХрд┐ index.php рдлрд╝рд╛рдЗрд▓, рд╕рдмрд╕реЗ рд╕рд░рд▓ рдирд┐рдпрдВрддреНрд░рдХ рдФрд░ рдореЙрдбрд▓ рдХреИрд╕рд╛ рджрд┐рдЦреЗрдЧрд╛ред

index.php
 <?php // project/public/index.php require_once __DIR__ . '/../protected/vendor/autoload.php'; $app = new Silex\Application(); $app->register(new Providers\ModelsServiceProvider(), array( 'models.path' => __DIR__ . '/../protected/app/models/' )); $app->mount('/', new Controllers\Index()); $app->run(); 


рдирд┐рдпрдВрддреНрд░рдХ
 <?php // project/protected/Controllers/Index.php namespace Controllers; use Silex\Application; use Silex\Route; use Silex\ControllerProviderInterface; use Silex\ControllerCollection; class Index implements ControllerProviderInterface { public function connect(Application $app) { $index = new ControllerCollection(new Route()); $index->get('/', function() use ($app) { $label = $app['models']->load('Pages', 'index'); return $label; }); $index->get('/{name}', function($name) use ($app) { $name = $app['models']->load('Pages', 'hello', $name); return "Hello{$name}"; }); return $index; } } 

рд╕рдВрдХреНрд╖реЗрдк рдореЗрдВ рдХреЛрдб рдкрд░ред connect() рд╡рд┐рдзрд┐ Silex рдХреЛ рдмрддрд╛рддреА рд╣реИ рдХрд┐ рдЕрдВрджрд░ рд╡рд░реНрдгрд┐рдд рдорд╛рд░реНрдЧреЛрдВ рдХреЛ рдЙрд╕ рдирд┐рдпрдВрддреНрд░рдХ рдХреЗ рд╣рд┐рд╕реНрд╕реЗ рдХреЗ рд░реВрдк рдореЗрдВ рд╕рдВрд╕рд╛рдзрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП рдЬрд┐рд╕реЗ рд╣рдордиреЗ index.php (рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ, рдЗрд╕ рдирд┐рдпрдВрддреНрд░рдХ рдХреЗ рд▓рд┐рдП рдЖрдзрд╛рд░ URL рдЕрдиреБрдкреНрд░рдпреЛрдЧ рд░реВрдЯ - /) рдореЗрдВ рдорд╛рдЙрдВрдЯ рдХрд┐рдпрд╛ рд╣реИред рдЕрдЧрд▓рд╛, $index рд╡реИрд░рд┐рдПрдмрд▓ рдмрдирд╛рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдпрд╣ $app рд╣рд┐рд╕реНрд╕реЗ рдХреА рддрд░рд╣ рд╣реИ рдФрд░ рдЗрд╕рдореЗрдВ рдХреЗрд╡рд▓ рд░реВрдЯрд┐рдВрдЧ рдлрд╝рдВрдХреНрд╢рди рд╣реИрдВред рдорд╛рд░реНрдЧреЛрдВ рдХреЛ рд╣рдореЗрд╢рд╛ рдХреА рддрд░рд╣ рд▓рд┐рдЦрд╛ рдЬрд╛рддрд╛ рд╣реИред

рдЖрджрд░реНрд╢
 <?php // project/protected/Models/Pages.php class Pages { public function index() { return "Index"; } public function hello($name) { return ", {$name}!"; } } 


рдкрд░рд┐рдгрд╛рдо рдХреНрдпрд╛ рд╣реИ? MVC рдХрд╛ рд╕рдмрд╕реЗ рд╕рд░рд▓ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди, рдХрд┐рд╕реА рднреА рд╕рдордп рдорд╛рдирдХ Silex рд╢реИрд▓реА рдореЗрдВ рд▓рд┐рдЦрдирд╛ рд╢реБрд░реВ рдХрд░рдиреЗ рдХреА рдХреНрд╖рдорддрд╛ рдХреЗ рд╕рд╛рдеред рдЗрд╕ рд╕рдВрджрд░реНрдн рдореЗрдВ, рджреГрд╢реНрдп рдкрд░ рд╡рд┐рдЪрд╛рд░ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛, рдХреНрдпреЛрдВрдХрд┐ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдХрдИ рддреИрдпрд╛рд░ рдХрд┐рдП рдЧрдП рд╕рдорд╛рдзрд╛рди рд╣реИрдВ, рдЬрд┐рдирдореЗрдВ рд╕реЗ рдореИрдВ рд╡реНрдпрдХреНрддрд┐рдЧрдд рд░реВрдк рд╕реЗ рд╡реНрдпрдХреНрддрд┐рдЧрдд рд░реВрдк рд╕реЗ рдЯреНрд╡рд┐рдЧ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдкрд╕рдВрдж рдХрд░рддрд╛ рд╣реВрдВ, рдХреНрдпреЛрдВрдХрд┐ рдЗрд╕рдореЗрдВ Silex рдХреЗ рд╕рд╛рде 100% рдПрдХреАрдХрд░рдг рд╣реИред
рдкреВрд░рд╛ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдЬреАрдердм рдкрд░ рдЙрдкрд▓рдмреНрдз рд╣реИред

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


All Articles