рдлрд╛рд▓реНрдХрди PHP рдлреНрд░реЗрдорд╡рд░реНрдХред рдПрдиреЛрдЯреЗрд╢рди рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░реЗрдВ

"рд╡рд┐рд╡реЛ, рдкреНрд░реЗрд╕реНрдЯреЛ, рдкреНрд░реЗрд╕реНрдЯрд┐рд╕рд┐рдореЛ ..."

рдлрд╛рд▓реНрдХрди рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЕрднреА рднреА рдмрд╣реБрдд рдХрдо рд╕рд╛рдордЧреНрд░реА рд╣реИ, рд▓реЗрдХрд┐рди рд░реВрдкрд░реЗрдЦрд╛ рдХрд╛рдлреА рджрд┐рд▓рдЪрд╕реНрдк рд╣реИ рдФрд░ рдзреНрдпрд╛рди рджреЗрдиреЗ рдпреЛрдЧреНрдп рд╣реИред рджрд┐рд▓рдЪрд╕реНрдк рдлрд╛рд▓реНрдХрди рд╕рдорд╛рдзрд╛рдиреЛрдВ рдореЗрдВ рд╕реЗ рдПрдХ рдЙрдиреНрдирдд рдПрдиреЛрдЯреЗрд╢рди рд╡рд┐рд╢реЗрд╖рддрд╛рдПрдВ рд╣реИрдВред рдкрд╛рд░реНрд╕рд░ рд╕реА рдореЗрдВ рд▓рд┐рдЦрд╛ рд╣реИ, рдпрд╣ рдмрд╣реБрдд рддреЗрдЬреА рд╕реЗ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред рдЖрдкрдХреЛ рдЖрд╕рд╛рдиреА рд╕реЗ рдФрд░ рд╕реНрд╡рд╛рднрд╛рд╡рд┐рдХ рд░реВрдк рд╕реЗ рд╕реЗрдЯрд┐рдВрдЧреНрд╕ (рд▓рдЧрднрдЧ рдмрд╣реБрдордд) рдХреЗ рд╣рд┐рд╕реНрд╕реЗ рдХреЛ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдлрд╝рд╛рдЗрд▓реЛрдВ рд╕реЗ рдХреЛрдб рддрдХ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред



рднрд╛рдЧ I рд╡рд┐рд╡реЛ (рдлрд╛рд╕реНрдЯ)ред


рдлрд╛рд▓реНрдХрди рдореЗрдВ рд░реВрдЯрд┐рдВрдЧ рдПрдХ рд╕реБрдВрджрд░ "рд░рдЪрдирд╛рддреНрдордХ" рдХрд╛рд░реНрдп рд╣реИред
рдХрдИ рдЙрджрд╛рд╣рд░рдг рдорд╛рд░реНрдЧреЛрдВ рдХреЛ рдЕрд╕рд╛рдЗрди рдХрд░рдиреЗ рдХреЗ рд╡рд┐рднрд┐рдиреНрди рддрд░реАрдХреЛрдВ рд╕реЗ рднрд░реЗ рд╣реБрдП рд╣реИрдВред
Habr рдкрд░ рднреА xml рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЗ рдЙрдкрдпреЛрдЧ рдХрд╛ рдЙрджрд╛рд╣рд░рдг рдлрд┐рд╕рд▓ рдЧрдпрд╛ ...
рдФрд░ рдпрд╣ рдПрдХ рдРрд╕реЗ рд╕рдордп рдореЗрдВ рд╣реИ рдЬрдм рдХрдИ рд░реВрдкрд░реЗрдЦрд╛ рдПрдиреЛрдЯреЗрд╢рди рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдорд╛рд░реНрдЧ рдХреА рдкреЗрд╢рдХрд╢ рдХрд░ рд░рд╣реЗ рд╣реИрдВред
рдлрд╛рд▓реНрдХрди рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХреНрдпрд╛?
рдлрд╛рд▓реНрдХрди рдорд╛рдореВрд▓реА рдФрд░ рдЪреБрдкрдЪрд╛рдк рдкреНрд░рд▓реЗрдЦрди рдореЗрдВ рдЗрдВрдЧрд┐рдд рдХрд░рддрд╛ рд╣реИ рдХрд┐ рдПрдиреЛрдЯреЗрд╢рди рдкрд░ рд░реВрдЯрд┐рдВрдЧ рд╕рдВрднрд╡ рд╣реИред
рдФрд░ рдЙрд╕рдХреЗ рд▓рд┐рдП, рдлрд╛рд▓реНрдХрди рд▓реЗрдЦрдХреЛрдВ рдиреЗ рдХреЗрд╡рд▓ рд╕реА рдореЗрдВ рдПрдХ рдПрдиреЛрдЯреЗрд╢рди рдкрд╛рд░реНрд╕рд░ рдмрдирд╛рдпрд╛ред
рдкрд╣рд▓реА рдмрд╛рд░!
рдПрдиреЛрдЯреЗрд╢рди рдХреЛ рд╢рд╛рдорд┐рд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЖрдкрдХреЛ рдХреНрдпрд╛ рдЪрд╛рд╣рд┐рдП?
рдХреБрдЫ рднреА рдирд╣реАрдВред
рдмреВрдЯрд╕реНрдЯреНрд░реИрдк рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рд╣рдо рдПрдиреЛрдЯреЗрд╢рди рд╕реЗрд╡рд╛ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рддреЗ рд╣реИрдВ, рдХреЛрдб рдХреА рдХреБрдЫ рд▓рд╛рдЗрдиреЗрдВред рдФрд░ рд╡рд╣ рд╕рдм рд╣реИред
... //set routers $di->set('router', function() { $router = new \Phalcon\Mvc\Router\Annotations(false); $router->removeExtraSlashes(true); $router->setUriSource(\Phalcon\Mvc\Router::URI_SOURCE_SERVER_REQUEST_URI); $router->addResource('Index', "/"); $router->notFound([ "controller" => "index", "action" => "page404" ]); return $router; }); ... 

рдЕрдм рдорд╛рд░реНрдЧреЛрдВ (рдЙрди рдЙрдкрд╕рд░реНрдЧреЛрдВ рд╕рд╣рд┐рдд) рдХреЗ рд╕рд╛рде, рд╣рдо рд╕реАрдзреЗ рдирд┐рдпрдВрддреНрд░рдХ рдореЗрдВ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рддреЗ рд╣реИрдВред
 ... /** * @Post("create") */ public function createAction() { /... } ... 

рд░реВрдЯрд┐рдВрдЧ (рдЕрдиреБрд░реЛрдз рдкреНрд░рдХрд╛рд░, рдкреИрд░рд╛рдореАрдЯрд░) рдкреНрд░рд▓реЗрдЦрди рдореЗрдВ рдЕрдзрд┐рдХ рд╡рд┐рд╕реНрддрд╛рд░ рд╕реЗ рд╡рд░реНрдгрд┐рдд рд╣реИред

рднрд╛рдЧ II рдкреНрд░реЗрд╕реНрдЯреЛ (рдЬрд┐рддрдиреА рдЬрд▓реНрджреА рд╣реЛ рд╕рдХреЗ)


рдПрдиреЛрдЯреЗрд╢рди рдкрд░ рд░реВрдЯрд┐рдВрдЧ, рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ, рдЕрдЪреНрдЫрд╛ рд╣реИред рд▓реЗрдХрд┐рди рд╣рдореЗрдВ рдЕрднреА рднреА рдкрд░рд┐рдпреЛрдЬрдирд╛рдУрдВ рдореЗрдВ рдбреЗрдЯрд╛ рд╕реЗ рдирд┐рдкрдЯрдирд╛ рд╣реИред рдФрд░ рдпрд╣рд╛рдБ рдЖрдк рдлрд╛рд▓реНрдХрди рдХреА рдПрдХ рд╡рд┐рд╢реЗрд╖рддрд╛ рдХреЛ рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВред
рдбреЗрдЯрд╛рдмреЗрд╕ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рддреЗ рд╕рдордп, рд╡рд╣ рдЖрдорддреМрд░ рдкрд░ 3 рдкреНрд░рд╢реНрди рдХрд░рддрд╛ рд╣реИред
1 рдбреЗрдЯрд╛рдмреЗрд╕ рдореЗрдВ рддрд╛рд▓рд┐рдХрд╛ рдХреА рдЬрд╛рдБрдЪ рдХрд░рддрд╛ рд╣реИред
2 рдХреЛ рдЯреЗрдмрд▓ рдореЗрдЯрд╛рдбреЗрдЯрд╛ рдорд┐рд▓рддрд╛ рд╣реИред
3 рд╕реАрдзреЗ рдЕрдиреБрд░реЛрдзред
рдореБрдЭреЗ рдирд╣реАрдВ рдкрддрд╛ рдХрд┐ рдпрд╣ рдХрд┐рддрдирд╛ рд╕рд╣реА рд╣реИ, рдореИрдВ рдмрд╣рд╕ рдирд╣реАрдВ рдХрд░реВрдВрдЧрд╛ред рд▓реЗрдХрд┐рди рдХреБрдЫ рд╣рдж рддрдХ рдЕрд╕реБрд╡рд┐рдзрд╛рдЬрдирдХред
рд╣рдореЗрдВ 3 рдЕрдиреБрд░реЛрдзреЛрдВ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИред рд╣рдо рдЪрд╛рд╣рддреЗ рд╣реИрдВ рдХрд┐ рдЬрд╝рд╛рддрд╢рдирд┐рдХ рдореЗрдВ рдХрд╣реАрдВ-рдХрд╣реАрдВ рдЯреЗрдмрд▓ рдореЗрдЯрд╛рдбреЗрдЯрд╛ рд╣реЛред
рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдХреИрд╢ рдореЗрдВред
рдФрд░ рдлрд╛рд▓реНрдХрди рдХреА рднреА рдпрд╣реА рд░рд╛рдп рд╣реИред рдЗрд╕рд▓рд┐рдП, рдпрд╣ рдХреИрд╢ рдореЗрдВ рдореЗрдЯрд╛рдбреЗрдЯрд╛ рдХреЛ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд░рдиреЗ рдХрд╛ рд╕реБрдЭрд╛рд╡ рджреЗрддрд╛ рд╣реИред рдЖрдк рдПрдиреЛрдЯреЗрд╢рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
рдлрд┐рд░ рд╕реЗ DI, рдлрд┐рд░ рд╕реЗ botstrap:
 ... //Set a models manager $di->set('modelsManager', new \Phalcon\Mvc\Model\Manager()); //Set the models cache service $di->set('modelsCache', function() { //Cache data for one day by default $frontCache = new \Phalcon\Cache\Frontend\Data([ "lifetime" => 86400 ]); $cache = new \Phalcon\Cache\Backend\Memcache($frontCache, [ "host" => "localhost", "port" => "11211", 'persistent' => TRUE, ]); return $cache; }); $di->set('modelsMetadata', function() { // Create a meta-data manager with APC //$metaData = new \Phalcon\Mvc\Model\MetaData\Apc([ // "lifetime" => 86400, // "prefix" => "general-phsql" //]); $metaData = new \Phalcon\Mvc\Model\MetaData\Memory([ 'prefix' => 'general', ]); $metaData->setStrategy(new StrategyAnnotations()); return $metaData; }); ... 

рдЙрд╕рдХреЗ рдмрд╛рдж, рдореЗрдЯрд╛рдбреЗрдЯрд╛ рдХреЗрд╡рд▓ рдПрдХ рдмрд╛рд░ рдХреИрд╢ рдореЗрдВ рд╕рдВрдЧреНрд░рд╣реАрдд рд╣реЛрддрд╛ рд╣реИред
рд╡рд┐рдХрд╛рд╕ рдХреЗ рд╕рдордп, рд╣рдо рдореЗрдореЛрд░реА рдореЗрдВ рднрдВрдбрд╛рд░рдг рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред

рдпрд╣рд╛рдБ, рд╕рд┐рджреНрдзрд╛рдВрдд рд░реВрдк рдореЗрдВ, рд╕рдм рдХреБрдЫред рдлрд┐рд░, рдкреНрд░рд▓реЗрдЦрди рдореЗрдВ рдЕрдзрд┐рдХ рд╡рд┐рд╕реНрддрд╛рд░ рд╕реЗред

рд╡реИрд╕реЗ, рдЗрди рддрдВрддреНрд░реЛрдВ рдореЗрдВ рдХреЛрдИ рдЖрд╢реНрдЪрд░реНрдп рдХреА рдмрд╛рдд рдирд╣реАрдВ рд╣реИред рд╕рд┐рд╡рд╛рдп рдЗрд╕рдХреЗ рдХрд┐ рдпрд╣ рдмрд╣реБрдд рддреЗрдЬреА рд╕реЗ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред рд╕реАред рдореЗрдВ рдмрдирд╛рдП рдЧрдП рдШрдЯрдХ рдореЗрдВ рдЬрд╣рд╛рдВ рддрдХ тАЛтАЛрд╕рдВрднрд╡ рд╣реЛ, рдЬрд▓реНрджреА рд╕реЗ рдкреНрд░рд╛рдкреНрдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред
рд▓реЗрдХрд┐рди рдЕрдиреНрдп рд░реВрдкрд░реЗрдЦрд╛рдУрдВ рдореЗрдВ рднреА рдпреЗ рддрдВрддреНрд░ рд╣реИрдВред
рд╣рдо рдХреБрдЫ рд╕реНрд╡рд╛рджрд┐рд╖реНрдЯ, рдХреБрдЫ рдЙрддреНрд╕рд╛рд╣ рдЪрд╛рд╣рддреЗ рд╣реИрдВ ...

рднрд╛рдЧ III рдкреНрд░реЗрд╕реНрдЯрд┐рд╕рд┐рдореЛ (рдпрд╣рд╛рдВ рддрдХ тАЛтАЛрдХрд┐ рддреЗрдЬрд╝)ред


рдпрд╣ рд╢рд╛рдпрдж рдХреЛрдИ рд░рд╣рд╕реНрдп рдирд╣реАрдВ рд╣реИ рдХрд┐ рд╕рд╛рдЗрдЯ рдбрд┐рдЬрд╛рдЗрди рдХрд░рддреЗ рд╕рдордп рдЖрдкрдХреЛ рдПрдХ рд╡реНрдпрд╡рд╕реНрдерд╛рдкрдХ рдкреИрдирд▓ рд▓рд┐рдЦрдирд╛ рд╣реЛрдЧрд╛ред
рдФрд░ рдпреЗ рд░реВрдк, рд░реВрдк рдФрд░ рдПрдХ рдмрд╛рд░ рдФрд░ рд░реВрдк рд╣реИрдВред рдХрдИ рд░реВрдкред рдФрд░ рдпрд╣ рдердХрд╛рдиреЗ рд╡рд╛рд▓рд╛ рд╣реИ ...
рдореБрдЭреЗ рдСрдЯреЛрдореЗрд╢рди рдЪрд╛рд╣рд┐рдПред
рдлрд╝реЙрд░реНрдо рдореЗрдВ рдХреНрдпрд╛ рд╢рд╛рдорд┐рд▓ рд╣реИ? рдмреЗрд╢рдХ, рдореБрдЦреНрдп рддрддреНрд╡ рдЗрдирдкреБрдЯ рдЯреИрдЧ рд╣реИред
рдЗрд╕рдореЗрдВ рдЖрдорддреМрд░ рдкрд░ рдЯрд╛рдЗрдк рдЯрд╛рдЗрдк, рд▓рдВрдмрд╛рдИ, рдкреИрдЯрд░реНрди рдлрд┐рд▓ рдкреИрдЯрд░реНрди рдЖрджрд┐ рд╣реЛрддреЗ рд╣реИрдВред
рдФрд░ рдпрд╣ рд╕рдм рдкреНрд░рддреНрдпреЗрдХ рд░реВрдк рдХреЗ рд▓рд┐рдП рдЗрдВрдЧрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП ... рддрд╛рд▓рд┐рдХрд╛ рдХреЗ рдкреНрд░рддреНрдпреЗрдХ рдХреНрд╖реЗрддреНрд░ рдХреЗ рд▓рд┐рдП ...
рдореБрдЭреЗ рдСрдЯреЛрдореЗрд╢рди рдЪрд╛рд╣рд┐рдПред рдЖрдкрдХреЛ рдмрд╣реБрдд рд╕рд╛рд░реЗ рдХреЛрдб рд▓рд┐рдЦрдиреЗ рдХрд╛ рдорди рдирд╣реАрдВ рд╣реИред
рдФрд░ рдХрд┐рд╕реА рднреА рдЗрдХрд╛рдИ рдХреЗ рд▓рд┐рдП рдПрдХ рд╕рд╛рд░реНрд╡рднреМрдорд┐рдХ рд░реВрдк рдХрд╛ рд╡рд░реНрдгрди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдПред
рдФрд░ рдпрд╣рд╛рдБ рдлрд┐рд░ рд╕реЗ рдПрдиреЛрдЯреЗрд╢рди рдХрд╛рдо рдЖрддреЗ рд╣реИрдВред рдкрд╛рд░реНрд╕рд░, рдлрд┐рд░ рд╕реЗ, рд╕реА рдореЗрдВ рд╣реИред
рдлрд╛рд▓реНрдХрди, рдлрд╛рд▓реНрдХрди \ рдлреЙрд░реНрдо \ рдлреЙрд░реНрдо рдШрдЯрдХ рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИред
рд╕рд░рд▓рддрдо рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рддрд╛рд▓рд┐рдХрд╛ рд▓реЗрдВред рдЙрд╕рдХрд╛ рдореЙрдбрд▓:
 <?php namespace Frontend\Model; class Users extends \Phalcon\Mvc\Model { /** * @Primary * @Identity * @Column(type="integer", nullable=false) * @FormOptions(type=hidden) */ public $id; /** * @Column(type="string", nullable=false) * @FormOptions(type=text, length=32) */ public $name; /** * @Column(type="integer", nullable=false) * @FormOptions(type=email) */ public $email; /** * @Column(type="integer", nullable=false) * @FormOptions(type=text, length=9, pattern='[0-9]{9}') */ public $indcode; } 

рдпрд╣рд╛рдВ рд╣рдо рдЕрдкрдиреЗ рд╕реНрд╡рдпрдВ рдХреЗ рдПрдиреЛрдЯреЗрд╢рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ, рдЬрд╣рд╛рдВ рд╣рдо рдЙрди рд╡рд┐рдХрд▓реНрдкреЛрдВ рдХрд╛ рд╕рдВрдХреЗрдд рджреЗрддреЗ рд╣реИрдВ рдЬрд┐рдиреНрд╣реЗрдВ рд╣рдореЗрдВ рдлреЙрд░реНрдо рдмрдирд╛рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред
рд╣рд╛рдВ, рд╣рдо рдЗрд╕ рдПрдиреЛрдЯреЗрд╢рди рдХреЛ рдЕрдм рдЦреБрдж, рдПрдХ рд╡рд┐рд╢реЗрд╖ рдорд╛рдорд▓реЗ рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХреЗ рд▓рд┐рдП рд▓реЗрдХрд░ рдЖрдП рд╣реИрдВред
рд╣рдорд╛рд░реЗ рдкрд╛рд╕ @FormOptions рд╣реИред рдкреНрд░рдХрд╛рд░ рд╡рд┐рд╢реЗрд╖рддрд╛ рдореЗрдВ, рд╣рдо рдЙрд╕ рдХреНрд╖реЗрддреНрд░ рдХреЗ рдкреНрд░рдХрд╛рд░ рдХреЛ рдЗрдВрдЧрд┐рдд рдХрд░рддреЗ рд╣реИрдВ рдЬрд┐рд╕реЗ рд╣рдореЗрдВ рдЗрдирдкреБрдЯ рдХреЗ рд▓рд┐рдП рдЖрд╡рд╢реНрдпрдХ рд╣реИред
рдлрд╛рд▓реНрдХрди рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдкреНрд░рдХрд╛рд░ рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИ рдлрд╛рд▓реНрдХрди \ рдлреЙрд░реНрдо \ рддрддреНрд╡ :
рдлрд╛рд▓реНрдХрди \ рдлреЙрд░реНрдо \ рддрддреНрд╡ \ рдЪреЗрдХ
рдлрд╛рд▓реНрдХрди \ рдлрд╛рд░реНрдо \ рддрддреНрд╡ \ рджрд┐рдирд╛рдВрдХ
рдлрд╛рд▓реНрдХрди \ рдлрд╛рд░реНрдо \ рддрддреНрд╡ \ рдИрдореЗрд▓
рдлрд╛рд▓реНрдХрди \ рдлреЙрд░реНрдо \ рддрддреНрд╡ \ рдлрд╝рд╛рдЗрд▓
рдлрд╛рд▓реНрдХрди \ рдлрд╛рд░реНрдо \ рддрддреНрд╡ \ рдЫрд┐рдкрд╛ рд╣реБрдЖ
рдлрд╛рд▓реНрдХрди \ рдлреЙрд░реНрдо \ рддрддреНрд╡ \ рдиреНрдпреВрдореЗрд░рд┐рдХ
рдлрд╛рд▓реНрдХрди \ рдлрд╛рд░реНрдо \ рддрддреНрд╡ \ рдкрд╛рд╕рд╡рд░реНрдб
рдлрд╛рд▓реНрдХрди \ рдлрд╛рд░реНрдо \ рддрддреНрд╡ \ рдХрд╛ рдЪрдпрди рдХрд░реЗрдВ
рдлрд╛рд▓реНрдХрди \ рдлреЙрд░реНрдо \ рддрддреНрд╡ \ рд╕рдмрдорд┐рдЯ рдХрд░реЗрдВ
рдлрд╛рд▓реНрдХрди \ рдлреЙрд░реНрдо \ рддрддреНрд╡ \ рдкрд╛рда
рдлрд╛рд▓реНрдХрди \ рдлреЙрд░реНрдо \ рддрддреНрд╡ \ рдЯреЗрдХреНрд╕реНрдЯрдЕрд░реЗрдЖ
рдкрд░реНрдпрд╛рдкреНрдд рд╕реЗ рдЕрдзрд┐рдХред
рдпрд╣ рдЫреЛрдЯреЗ рдХреЗ рд▓рд┐рдП рдорд╛рдорд▓рд╛ рд╣реИ ...
рдпрд╣ рдХрд┐рд╕реА рднреА рддрд░рд╣ рд╕реЗ "рдПрдиреЛрдЯреЗрд▓" рдлрд╛рд▓реНрдХрди рдХреЛ рд╣рдорд╛рд░реЗ рдПрдиреЛрдЯреЗрд╢рди рдХреЛ рдкрд╣рдЪрд╛рдирдиреЗ рдХреЗ рд▓рд┐рдП рдЖрд╡рд╢реНрдпрдХ рд╣реИ ...
рдХреБрдЫ рднреА рдЖрд╕рд╛рди рдирд╣реАрдВ рд╣реИ!
рдмреВрдЯрд╕реНрдЯреНрд░реИрдк - рдПрдиреЛрдЯреЗрд╢рди рдкрд╛рд░реНрд╕рд░ рд╕рдХреНрд╖рдо рдХрд░реЗрдВред
 ... //Annotations $di->set('annotations', function() { return new \Phalcon\Annotations\Adapter\Memory(); }); ... 

рд╡рд┐рдХрд╛рд╕ рдХреЗ рджреМрд░рд╛рди, рдЖрдк рдПрдХ рдореЗрдореЛрд░реА рдПрдбреЙрдкреНрдЯрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ,
рдЙрддреНрдкрд╛рджрди рдореЗрдВ, рдЖрдк рдлрд╝рд╛рдЗрд▓ рд╕рдВрдЧреНрд░рд╣рдг, APC, XCache рдкрд░ рд╕реНрд╡рд┐рдЪ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
рдЕрдм рдХрд┐рд╕реА рднреА рдЗрдХрд╛рдИ рдХреЗ рд▓рд┐рдП рдПрдХ рдлреЙрд░реНрдо рдХреНрд▓рд╛рд╕ рдмрдирд╛рдПрдВред
рдлреЙрд░реНрдо рдХреНрд▓рд╛рд╕
 <?php use Phalcon\Forms\Form, \Phalcon\Forms\Element\Submit as Submit; class EntityForm extends Form { public $fields = []; private $classprefix = '\\Phalcon\\Forms\\Element\\'; public $action; /** * @param object $model, action */ public function initialize($model, $action) { $this->action = $action; //      $object = $model; $this->setEntity($object); //   $attributes = $this->modelsMetadata->getAttributes($object); //     $metadata = $this->annotations->get($object); //   @FormOptions foreach ( $attributes as $attribute ) { $this->fields[$attribute] = $metadata ->getPropertiesAnnotations()[$attribute] ->get('FormOptions') ->getArguments(); } //       foreach ($this->fields as $field => $type) { $fieldtype = array_shift($type); //  type       $fieldclass = $this->classprefix.$fieldtype; $this->add(new $fieldclass($field, $type)); // label     if ( $fieldtype !== 'hidden') { $this->get($field)->setLabel($this->get($field)->getName()); } } //    $this->add(new Submit('submit',[ 'value' => 'Send', ])); } public function renderform() { echo $this->tag->form([ $this->action, 'id' => 'actorform', ]); //fill form tags foreach ($this as $element) { // collect messages $messages = $this->getMessagesFor($element->getName()); if (count($messages)) { // each element render echo '<div class="messages">'; foreach ($messages as $message) { echo $message; } echo '</div>'; } echo '<div>'; echo '<label for="', $element->getName(), '">', $element->getLabel(), '</label>'; echo $element; echo '</div>'; } echo $this->tag->endForm(); } } 


рдпрд╣рд╛рдВ, EntityForm рд╡рд░реНрдЧ рдХреЛ рд╢реБрд░реВ рдХрд░рддреЗ рд╕рдордп, рд╣рдо рдкрд╛рд╕ рдХреА рдЧрдИ рд╡рд╕реНрддреБ рдФрд░ рдЙрд╕рдХреЗ рдПрдиреЛрдЯреЗрд╢рди рдХреЗ рдореЗрдЯрд╛рдбреЗрдЯрд╛ рдХреЛ рдкрдврд╝рддреЗ рд╣реИрдВред
рдЙрд╕рдХреЗ рдмрд╛рдж, рд╣рдо рдлреЙрд░реНрдо рдореЗрдВ рд╕рднреА рдЖрд╡рд╢реНрдпрдХ рдХреНрд╖реЗрддреНрд░реЛрдВ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рддреЗ рд╣реИрдВред
рд░реЗрдВрдбрд░рдлреЙрд░реНрдо рдлрд╝рдВрдХреНрд╢рди рдХреЗрд╡рд▓ рдПрдХ рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдореЗрдВ рд╣рдорд╛рд░реЗ рдлреЙрд░реНрдо рдХреЛ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рддрд╛ рд╣реИред

рдЖрдЗрдП рдирд┐рдпрдВрддреНрд░рдХ рдкрд░ рд╡рд╛рдкрд╕ рдЬрд╛рдПрдВ рдФрд░ рдлреЙрд░реНрдо рдЖрдЙрдЯрдкреБрдЯ рдПрдХреНрд╢рди рдмрдирд╛рдПрдВ:
 ... /** * @Get("form") */ public function formAction() { $myform = new EntityForm(new Users(), 'create'); $this->view->setVars([ 'myform' => $myform, ]); } ... 

рдФрд░ рдкреНрд░рд╛рдкреНрддрдХрд░реНрддрд╛:
 ... /** * @Post("create") */ public function createAction() { echo '<pre>'; var_dump($_POST); echo '</pre>'; } ... 

рдлреЙрд░реНрдо рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдпрд╣ рдХреЗрд╡рд▓ рдЖрдЙрдЯрдкреБрдЯ рдЯреЗрдореНрдкреНрд▓реЗрдЯ (рд╡реЛрд▓реНрдЯ) рдореЗрдВ рд╣реА рд░рд╣рддрд╛ рд╣реИ:
{{ myform.renderform() }}
рд╡рд╣ рд╕рдм рд╣реИред
рдмреЗрд╢рдХ, рдЖрдкрдХреЛ рдлреЙрд░реНрдо рдХреНрд▓рд╛рд╕ рдореЗрдВ рд╕реАрдПрд╕рдЖрд░рдПрдл рд╕реБрд░рдХреНрд╖рд╛, рдбреЗрдЯрд╛ рд╕рддреНрдпрд╛рдкрди рдФрд░ рднрдВрдбрд╛рд░рдг рдХреЛ рдЬреЛрдбрд╝рдирд╛ рд╣реЛрдЧрд╛ред
рд▓реЗрдХрд┐рди рдЗрд╕ рд▓реЗрдЦ рдХрд╛ рдЙрджреНрджреЗрд╢реНрдп рдлрд╛рд▓реНрдХрди рдореЗрдВ рдПрдиреЛрдЯреЗрд╢рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рд╕рд╛рджрдЧреА рдФрд░ рдЙрдкрдпреЛрдЧрд┐рддрд╛ рдХреЛ рджрд┐рдЦрд╛рдирд╛ рд╣реИред
рдпреЗ рд╕реБрд╡рд┐рдзрд╛рдПрдБ рд╣рдореЗрдВ рд╢рдХреНрддрд┐рд╢рд╛рд▓реА рдФрд░ рддреЗрдЬрд╝ рдлрд╛рд▓реНрдХрдирдкреАрдкреА рдПрдиреЛрдЯреЗрд╢рди рдкрд╛рд░реНрд╕рд░ рдХреА рдмрджреМрд▓рдд рдкреНрд░рджрд╛рди рдХреА рдЬрд╛рддреА рд╣реИрдВред
рдФрд░ рдЬрдм рдЖрдк рдлрд╛рд▓реНрдХрди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рд╢реБрд░реВ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдЖрдк рдорд╣рд╕реВрд╕ рдХрд░рддреЗ рд╣реИрдВ рдХрд┐ рдпрд╣ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рддреЗрдЬрд╝ рд╣реИред
рдФрд░ рди рдХреЗрд╡рд▓ "рд╣реИрд▓реЛ, рджреБрдирд┐рдпрд╛!" рдХреЗ рдЖрдЙрдЯрдкреБрдЯ рдХреЗ рд╕рд╛рдеред
рдлрд╛рд▓реНрдХрди рдХреА рдЧрддрд┐ рдФрд░ рдЙрдкрдпреЛрдЧрд┐рддрд╛ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЖрд╢реНрдЪрд░реНрдпрдЬрдирдХ рд╣реИред
index.php
 <?php use Phalcon\Mvc\View\Engine\Volt; use Phalcon\Mvc\Model\MetaData\Strategy\Annotations as StrategyAnnotations; try { //Register an autoloader $loader = new \Phalcon\Loader(); $loader->registerDirs([ '../app/controllers/', '../app/models/', '../app/forms/' ]); $loader->registerNamespaces([ 'Frontend\\Model' => __DIR__.'/../app/models/', ]); $loader->register(); //Create a DI $di = new \Phalcon\DI\FactoryDefault(); //Set a models manager $di->set('modelsManager', new \Phalcon\Mvc\Model\Manager()); //Set the models cache service $di->set('modelsCache', function() { //Cache data for one day by default $frontCache = new \Phalcon\Cache\Frontend\Data([ "lifetime" => 86400 ]); $cache = new \Phalcon\Cache\Backend\Memcache($frontCache, [ "host" => "localhost", "port" => "11211", 'persistent' => TRUE, ]); return $cache; }); $di->set('modelsMetadata', function() { // Create a meta-data manager with APC //$metaData = new \Phalcon\Mvc\Model\MetaData\Apc([ // "lifetime" => 86400, // "prefix" => "general-phsql" //]); $metaData = new \Phalcon\Mvc\Model\MetaData\Memory([ 'prefix' => 'general', ]); $metaData->setStrategy(new StrategyAnnotations()); return $metaData; }); //SQL profiler $di->set('profiler', function(){ return new \Phalcon\Db\Profiler(); }, true); //set database connection $di->set('db', function() use ($di) { $eventsManager = new \Phalcon\Events\Manager(); //Get a shared instance of the DbProfiler $profiler = $di->getProfiler(); //Listen all the database events $eventsManager->attach('db', function($event, $connection) use ($profiler) { if ($event->getType() == 'beforeQuery') { $profiler->startProfile($connection->getSQLStatement()); } if ($event->getType() == 'afterQuery') { $profiler->stopProfile(); } }); $connection = new \Phalcon\Db\Adapter\Pdo\Mysql([ "host" => "localhost", "username" => "root", "password" => "12345", "dbname" => "general" ]); //Assign the eventsManager to the db adapter instance $connection->setEventsManager($eventsManager); return $connection; }); //Register Volt as a service $di->set('voltService', function($view, $di) { $volt = new Volt($view, $di); $volt->setOptions([ "compiledPath" => "../app/cache/", ]); return $volt; }); //Setting up the view component $di->set('view', function(){ $view = new \Phalcon\Mvc\View(); $view->setViewsDir('../app/views/'); $view->registerEngines([ ".volt" => 'voltService' ]); return $view; }); //Create Form manager $di->set('forms', function() { $forms = new \Phalcon\Forms\Manager(); return $forms; }); $di->set('session', function() use($di) { $session = new Phalcon\Session\Adapter\Files(); $session->setoptions([ 'uniqueId' => 'privatRsc', ]); $session->start(); return $session; }); //set routers $di->set('router', function() { $router = new \Phalcon\Mvc\Router\Annotations(false); $router->removeExtraSlashes(true); $router->setUriSource(\Phalcon\Mvc\Router::URI_SOURCE_SERVER_REQUEST_URI); $router->addResource('Index', "/"); $router->notFound([ "controller" => "index", "action" => "page404" ]); return $router; }); //Annotations $di->set('annotations', function() { return new \Phalcon\Annotations\Adapter\Memory(); }); //Handle the request $application = new \Phalcon\Mvc\Application($di); echo $application->handle()->getContent(); } catch(\Phalcon\Exception $e) { echo "PhalconException: ", $e->getMessage(); } 


IndexController.php
 <?php use \Frontend\Model\Users as Users; /** * @RoutePrefix("/") **/ class IndexController extends \Phalcon\Mvc\Controller { /** * @Get("") */ public function indexAction() { echo <h3>Index Action</h3>; } /** * @Get("form") */ public function formAction() { $myform = new EntityForm(new Users(), 'create'); $this->view->setVars([ 'myform' => $myform, ]); } /** * @Post("create") */ public function createAction() { echo '<pre>'; var_dump($_POST); echo '</pre>'; } /** * @Get("page404") */ public function page404Action() { echo '404 - route not found'; } } 


EntityForm.php
 <?php use Phalcon\Forms\Form, \Phalcon\Forms\Element\Submit as Submit; class EntityForm extends Form { public $fields = []; private $classprefix = '\\Phalcon\\Forms\\Element\\'; public $action; /** * @param object $model, action */ public function initialize($model, $action) { $this->action = $action; //Set fields options from annotations $object = $model; $this->setEntity($object); $attributes = $this->modelsMetadata->getAttributes($object); $metadata = $this->annotations->get($object); foreach ( $attributes as $attribute ) { $this->fields[$attribute] = $metadata ->getPropertiesAnnotations()[$attribute] ->get('FormOptions') ->getArguments(); } foreach ($this->fields as $field => $type) { $fieldtype = array_shift($type); $fieldclass = $this->classprefix.$fieldtype; $this->add(new $fieldclass($field, $type)); if ( $fieldtype !== 'hidden') { $this->get($field)->setLabel($this->get($field)->getName()); } } $this->add(new Submit('submit',[ 'value' => 'Send', ])); } public function renderform() { echo $this->tag->form([ $this->action, 'id' => 'actorform', ]); //fill form tags foreach ($this as $element) { // collect messages $messages = $this->getMessagesFor($element->getName()); if (count($messages)) { // each element render echo '<div class="messages">'; foreach ($messages as $message) { echo $message; } echo '</div>'; } echo '<div>'; echo '<label for="', $element->getName(), '">', $element->getLabel(), '</label>'; echo $element; echo '</div>'; } echo $this->tag->endForm(); } } 


Users.php
 <?php namespace Frontend\Model; class Users extends \Phalcon\Mvc\Model { /** * @Primary * @Identity * @Column(type="integer", nullable=false) * @FormOptions(type=hidden) */ public $id; /** * @Column(type="string", nullable=false) * @FormOptions(type=text, length=32) */ public $name; /** * @Column(type="integer", nullable=false) * @FormOptions(type=email) */ public $email; /** * @Column(type="integer", nullable=false) * @FormOptions(type=text, length=9, pattern='[0-9]{9}') */ public $indcode; } 


form.volt
 <h2>Test form in Volt</h2> <hr> {{ myform.renderform() }} <hr> 

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


All Articles