рдпрд╣ Zend рдлреНрд░реЗрдорд╡рд░реНрдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реБрдП рдПрдХ рд╕рд░рд▓ рдЕрдиреБрдкреНрд░рдпреЛрдЧ рдХреЗ рд╡рд┐рдХрд╛рд╕ рдХреЗ рд▓рд┐рдП рд╕рдорд░реНрдкрд┐рдд рддреАрд╕рд░рд╛ (рдЕрдВрддрд┐рдо?) рднрд╛рдЧ рд╣реИред
рдкрд╣рд▓реЗ рднрд╛рдЧ рдореЗрдВ рдореИрдВрдиреЗ ZendSkeletonApplication рдХреА рд╕рдВрд░рдЪрдирд╛ рдХреА рдЬрд╛рдВрдЪ рдХреА,
рджреВрд╕рд░реЗ рднрд╛рдЧ рдореЗрдВ рдореИрдВрдиреЗ рдПрдХ рд╕рд╛рдзрд╛рд░рдг рдореЙрдбреНрдпреВрд▓ рдХреЗ рд╡рд┐рдХрд╛рд╕ рдХрд╛ рдПрдХ рдЙрджрд╛рд╣рд░рдг рджрд┐рдпрд╛ред рдпрд╣ рд╣рд┐рд╕реНрд╕рд╛ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕рдорд░реНрдкрд┐рдд рд╣реИ, рдФрд░ рдореИрдВ рдЗрд╕ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХреЗ рд▓рд┐рдП рдЯреНрд╡рд┐рдЧ рдЯреЗрдореНрдкрд▓реЗрдЯ рдЗрдВрдЬрди рднреА рдкреЗрдВрдЪ рдХрд░реВрдВрдЧрд╛ред
рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░реЗрдВ
рдкрд┐рдЫрд▓реЗ рднрд╛рдЧреЛрдВ рдореЗрдВ рд▓рд┐рдЦрд╛ рдЧрдпрд╛ рдХреЛрдб рдЖрдкрдХреЛ рд╕рднреА рд╡реЗрдмрд╕рд╛рдЗрдЯ рдЖрдЧрдВрддреБрдХреЛрдВ рдХреЗ рд▓рд┐рдП рдмреНрд▓реЙрдЧ рдкреЛрд╕реНрдЯ рдмрдирд╛рдиреЗ, рд╕рдВрдкрд╛рджрд┐рдд рдХрд░рдиреЗ рдФрд░ рд╣рдЯрд╛рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред рдпрд╣ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдХрд┐рд╕реА рднреА рдХрд╛рд░реНрдпрд╢реАрд▓ рд╕рд╛рдЗрдЯ рдХреЗ рд▓рд┐рдП рдЕрд╕реНрд╡реАрдХрд╛рд░реНрдп рд╣реИ, рдЗрд╕рд▓рд┐рдП рдЕрдм рдкрдВрдЬреАрдХрд░рдг / рдкреНрд░рд╛рдзрд┐рдХрд░рдг рдФрд░ рдЖрд╡реЗрджрди рдХреА рд╡рд┐рднрд┐рдиреНрди рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рддрдХ рдкрд╣реБрдВрдЪ рдЕрдзрд┐рдХрд╛рд░реЛрдВ рдХреЗ рд╡рд┐рддрд░рдг рдХреЗ рдореБрджреНрджреЛрдВ рдХреЛ рд╣рд▓ рдХрд░рдиреЗ рдХрд╛ рд╕рдордп рд╣реИред
Zf рдХреЗ рдХреЙрдордиреНрд╕
рдЬрд╝реЗрдВрдб рдлреНрд░реЗрдорд╡рд░реНрдХ рдХреЗ рд▓рд┐рдП рдмрд╣реБрдд рд╕рд╛рд░реЗ рдореЙрдбреНрдпреВрд▓ рд▓рд┐рдЦреЗ рдЧрдП рд╣реИрдВ рдЬреЛ рдорд╛рдирдХ рдХрд╛рд░реНрдпреЛрдВ рдХреЛ рд╣рд▓ рдХрд░рддреЗ рд╣реИрдВ; рдЖрдк рдЙрдиреНрд╣реЗрдВ рдПрдХ рд╡рд┐рд╢реЗрд╖ рд╕рд╛рдЗрдЯ рдкрд░ рдкрд╛ рд╕рдХрддреЗ рд╣реИрдВ:
mod.zendframework.com ред рдорд╛рдирдХ рд╕рдорд╕реНрдпрд╛рдУрдВ рдХреЛ рд╣рд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЕрдкрдиреА рдЦреБрдж рдХреА рд╕рд╛рдЗрдХрд┐рд▓ рд╡рд┐рдХрд╕рд┐рдд рдХрд░рдиреЗ рдХреЗ рдмрдЬрд╛рдп, рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЕрдкрдиреЗ рд▓рд┐рдП рддреИрдпрд╛рд░ рд╕рдорд╛рдзрд╛рдиреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ / рдЕрдиреБрдХреВрд▓ рдХрд░рдирд╛ рдЕрдзрд┐рдХ рдЙрдкрдпреБрдХреНрдд рд╣реИ (рд╕рд╛рдЗрдХрд┐рд▓ рд╡рд┐рдХрд╕рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╢реБрд░реВ рдХрд░рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рдХрдо рд╕реЗ рдХрдо рддреИрдпрд╛рд░ рд╕рдорд╛рдзрд╛рдиреЛрдВ рдХрд╛ рдЕрдзреНрдпрдпрди рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП)ред
рдХрдИ рдореЙрдбреНрдпреВрд▓ рдбреЗрд╡рд▓рдкрд░реНрд╕ рдХреЗ рдмреАрдЪ, ZF рдХреЙрдордиреНрд╕ рдЯреАрдо рдмрд╛рд╣рд░ рдЦрдбрд╝реА рд╣реИ, рдЗрд╕ рдЯреАрдо рдХреЗ рд▓реЛрдЧреЛрдВ рдиреЗ рдХрдИ рдмрд╣реБрдд рдЙрдкрдпреЛрдЧреА рдореЙрдбреНрдпреВрд▓ рд╡рд┐рдХрд╕рд┐рдд рдХрд┐рдП рд╣реИрдВ рдЬреЛ рд╣рдо рдЗрд╕ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВрдЧреЗ:
github.com/ZF-Commons ред рдЙрдирдореЗрдВ рд╕реЗ рдХреБрдЫ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВ рдЬреЛ рд╣рдореЗрдВ рдЗрд╕ рд╕реНрддрд░ рдкрд░ рдЪрд╛рд╣рд┐рдПред
ZfcBase
рдХрд░реНрдиреЗрд▓ рдЬреЛ рдЕрдиреНрдп ZF рдХреЙрдордиреНрд╕ рдореЙрдбреНрдпреВрд▓ рдкрд░ рдирд┐рд░реНрднрд░ рдХрд░рддрд╛ рд╣реИ (
https://github.com/ZF-Commons/ZfcBase )ред
ZfcUser
рдПрдХ рдореЙрдбреНрдпреВрд▓ рдЬреЛ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдкрдВрдЬреАрдХрд░рдг / рдкреНрд░рд╛рдзрд┐рдХрд░рдг рддрдВрддреНрд░, рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдкреНрд░реЛрдлрд╝рд╛рдЗрд▓ рдФрд░ рд╡реНрдпреВ рд╣реЗрд▓реНрдкрд░реНрд╕ рдХреЛ рдЯреЗрдореНрдкреНрд▓реЗрдЯ (
https://github.com/ZF-Commons/ZfcUser ) рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХреЗ рд▓рд┐рдП рд▓рд╛рдЧреВ рдХрд░рддрд╛ рд╣реИред
ZfcUserDoctrineORM
рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ, ZfcUser рдорд╛рдирдХ рдбреЗрдЯрд╛рдмреЗрд╕ рддрдВрддреНрд░ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рд╣рдорд╛рд░реА рдкрд░рд┐рдпреЛрдЬрдирд╛ Doctrine ORM рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреА рд╣реИ, рд╣рдореЗрдВ ZfcUserDoctrineORM рдореЙрдбреНрдпреВрд▓ (
https://github.com/ZF-Commons/ZfcserserooctrineORM ) рдХреА рднреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред
ZfcTwig
Twig рдЯреЗрдореНрдкрд▓реЗрдЯ рдЗрдВрдЬрди (
https://github.com/ZF-Commons/ZfcTwig ) рдХреЗ рд╕рд╛рде рдПрдХреАрдХрд░рдг рдХреЗ рд▓рд┐рдП рдореЙрдбреНрдпреВрд▓ред
BjyAuthorize
ZfCommons рд╕реЗ рдореЙрдбреНрдпреВрд▓ рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдореИрдВ BjyAuthorize рдореЙрдбреНрдпреВрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реВрдВрдЧрд╛, рдЬреЛ рдПрдХреНрд╕реЗрд╕ рдЕрдзрд┐рдХрд╛рд░реЛрдВ рдХреЛ рд╡рд┐рддрд░рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рддрдВрддреНрд░ рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИред рдореЙрдбреНрдпреВрд▓ рдХрд╛ рддрд░реНрдХ рдЕрдиреНрдп рд░реВрдкрд░реЗрдЦрд╛рдУрдВ рдХреЗ рдмреАрдЪ рд╕рд░рд▓ рдФрд░ рд╕рд╛рдорд╛рдиреНрдп рд╣реИред рдореЙрдбреНрдпреВрд▓ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдЕрд╡рдзрд╛рд░рдгрд╛рдУрдВ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ: рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛, рднреВрдорд┐рдХрд╛ рдФрд░ рдЧрд╛рд░реНрдбред
рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдЕрдзрд┐рдХреГрдд рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдФрд░ рдЕрдзрд┐рдХреГрдд рдирд╣реАрдВред рдПрдХ рдЕрдзрд┐рдХреГрдд рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреА рдПрдХ рдпрд╛ рдПрдХ рд╕реЗ рдЕрдзрд┐рдХ рднреВрдорд┐рдХрд╛рдПрдБ рд╣реЛ рд╕рдХрддреА рд╣реИрдВред рдЗрд╕ рд╕рдВрджрд░реНрдн рдореЗрдВ рдЧрд╛рд░реНрдб рдПрдХ рдирд┐рдпрдВрддреНрд░рдХ / рдХрд╛рд░реНрд░рд╡рд╛рдИ рд╣реИ рдЬрд┐рд╕рдХреЗ рд▓рд┐рдП рд╣рдо рд╡рд┐рднрд┐рдиреНрди рднреВрдорд┐рдХрд╛рдУрдВ рдХреЗ рд▓рд┐рдП рдПрдХреНрд╕реЗрд╕ рдЕрдзрд┐рдХрд╛рд░реЛрдВ рдХреЛ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд░рддреЗ рд╣реИрдВред
рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдХреЗ рд▓рд┐рдП рддреИрдпрд╛рд░реА рдХрд░ рд░рд╣рд╛ рд╣реИ
рдЗрд╕рд╕реЗ рдкрд╣рд▓реЗ рдХрд┐ рдЖрдк рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдЕрдиреБрднрд╡ рдХреЛ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд░реЗрдВ, рдЖрдкрдХреЛ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЗ рд▓рд┐рдП рдПрдХ рдЗрдХрд╛рдИ рдмрдирд╛рдирд╛ рд╣реЛрдЧрд╛ рдФрд░ рднреВрдорд┐рдХрд╛рдПрдВ рдЬреЛ рдбреЙрдХреНрдЯреНрд░рд┐рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВрдЧреАред BjyAuthorize рдореЙрдбреНрдпреВрд▓ рдХреЗ рд╕рд╛рде рд╢рд╛рдорд┐рд▓ рдРрд╕реА рд╕рдВрд╕реНрдерд╛рдУрдВ рдХреЗ рдЙрджрд╛рд╣рд░рдг рд╣реИрдВ, рдЙрдирдХреЗ рдЖрдзрд╛рд░ рдкрд░ рдореИрдВрдиреЗ MyUser рдореЙрдбреНрдпреВрд▓ рдмрдирд╛рдпрд╛ред
рдореЙрдбреНрдпреВрд▓ рдореЗрдВ рдХреБрдЫ рднреА рдореВрд▓ рдирд╣реАрдВ рд╣реИ, рдЖрдк рдЗрд╕рдХрд╛ рдХреЛрдб рдпрд╣рд╛рдВ рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ:
github.com/romka/zend-blog-example/tree/master/module/MyUser , рдЗрд╕рдХреА рд╕рдВрд░рдЪрдирд╛ рдореЗрдВ рдпрд╣ рдКрдкрд░ рджрд┐рдП рдЧрдП рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдФрд░ MyBlog рдореЙрдбреНрдпреВрд▓ рд╕реЗ рднрд┐рдиреНрди рдирд╣реАрдВ рд╣реИ: рдЗрд╕рдореЗрдВ рдПрдХ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдФрд░ 2 рд╢рд╛рдорд┐рд▓ рд╣реИрдВ рдЗрдХрд╛рдИред
рдЖрдкрдХреЛ рдХреЗрд╡рд▓ рдЗрд╕рдХреЗ рд╡рд┐рдиреНрдпрд╛рд╕ (
https://github.com/romka/zend-blog-example/blob/master/module/MyUser/config/module.config.php ) рдкрд░ рдзреНрдпрд╛рди рджреЗрдирд╛ рдЪрд╛рд╣рд┐рдП:
return array( 'doctrine' => array( 'driver' => array( 'zfcuser_entity' => array( 'class' =>'Doctrine\ORM\Mapping\Driver\AnnotationDriver', 'paths' => array(__DIR__ . '/../src/MyUser/Entity') ), 'orm_default' => array( 'drivers' => array( 'MyUser\Entity' => 'zfcuser_entity', ) ) ) ), 'zfcuser' => array( // telling ZfcUser to use our own class 'user_entity_class' => 'MyUser\Entity\User', // telling ZfcUserDoctrineORM to skip the entities it defines 'enable_default_entities' => false, ), 'bjyauthorize' => array( // Using the authentication identity provider, which basically reads the roles from the auth service's identity 'identity_provider' => 'BjyAuthorize\Provider\Identity\AuthenticationIdentityProvider', 'role_providers' => array( // using an object repository (entity repository) to load all roles into our ACL 'BjyAuthorize\Provider\Role\ObjectRepositoryProvider' => array( 'object_manager' => 'doctrine.entity_manager.orm_default', 'role_entity_class' => 'MyUser\Entity\Role', ), ), ), );
рдЗрд╕ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдореЗрдВ, рд╣рдо рдЕрдкрдиреЗ рд╕реНрд╡рдпрдВ рдХреЗ рд╕рд╛рде zfcuser рдЗрдХрд╛рдИ рдХреЛ рдкреНрд░рддрд┐рд╕реНрдерд╛рдкрд┐рдд рдХрд░рддреЗ рд╣реИрдВ, рдЬреЛ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЬрд┐рдореНрдореЗрджрд╛рд░ рд╣реИ, рдФрд░ рднреВрдорд┐рдХрд╛рдУрдВ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЬрд┐рдореНрдореЗрджрд╛рд░ BjyAuthorize рдореЙрдбреНрдпреВрд▓ рдХреЛ рдЗрдВрдЧрд┐рдд рдХрд░рддрд╛ рд╣реИред
MyUser рдореЙрдбреНрдпреВрд▓ рдХреЛ
application.config.php рдореЗрдВ рдЬреЛрдбрд╝рд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП рдФрд░ рдлрд┐рд░ рдХрдВрд╕реЛрд▓ рдореЗрдВ рдХрдорд╛рдВрдб рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░реЗрдВ:
./vendor/bin/doctrine-module orm:schema-tool:update --force ./vendor/bin/doctrine-module orm:validate-schema
рдкрд╣рд▓рд╛ рдбреЗрдЯрд╛рдмреЗрд╕ рдореЗрдВ MyUser рдореЙрдбреНрдпреВрд▓ рджреНрд╡рд╛рд░рд╛ рдмрдирд╛рдИ рдЧрдИ рд╕рдВрд╕реНрдерд╛рдУрдВ рдХреЗ рд▓рд┐рдП рддрд╛рд▓рд┐рдХрд╛рдУрдВ рдХреЛ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рд╣реИ, рджреВрд╕рд░рд╛ рдпрд╣ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░рдирд╛ рд╣реИ рдХрд┐ рдкрд╣рд▓реЗ рдХрдорд╛рдВрдб рдиреЗ рд╕рд╣реА рддрд░реАрдХреЗ рд╕реЗ рдХрд╛рдо рдХрд┐рдпрд╛ рд╣реИред
рдЕрдВрддрд┐рдо рдкреНрд░рд╛рд░рдВрднрд┐рдХ рдХрд╛рд░реНрд░рд╡рд╛рдИ рдЕрдиреБрд░реЛрдз рдХреЛ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╣реЛрдЧреА, рдЬреЛ рдЙрдЪрд┐рдд рднреВрдорд┐рдХрд╛ рдмрдирд╛рдПрдЧреА:
INSERT INTO `role` (`id`, `parent_id`, `roleId`) VALUES (1, NULL, 'guest'), (2, 1, 'user'), (3, 2, 'moderator'), (4, 3, 'administrator');
ZfcUser, ZfcUserDoctrineORM рдФрд░ BjyAuthorize рдХреЛ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд░рдирд╛
рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рдЖрдкрдХреЛ рд╕рдВрдЧреАрддрдХрд╛рд░ рдХреА рд╕реЗрдЯрд┐рдВрдЧ рдореЗрдВ рдирдП рдореЙрдбреНрдпреВрд▓ рджрд░реНрдЬ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ:
"zf-commons/zfc-base": "v0.1.2", "zf-commons/zfc-user": "dev-master", "zf-commons/zfc-user-doctrine-orm": "dev-master", "doctrine/doctrine-orm-module": "0.7.*", "bjyoungblood/bjy-authorize": "1.4.*"
рдЕрджреНрдпрддрди
php рдХрдВрдкреЛрдЬрд╝рд░ред рдерд╛рдкрд░ рдЕрджреНрдпрддрди рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░реЗрдВ рдФрд░ рдирдП рдореЙрдбреНрдпреВрд▓ рдХреЛ
application.config.php рдореЗрдВ рдЬреЛрдбрд╝реЗрдВ:
'ZfcBase', 'ZfcUser', 'ZfcUserDoctrineORM', 'BjyAuthorize',
рдЪреЗрддрд╛рд╡рдиреА! рдЗрдирдореЗрдВ рд╕реЗ рдХреБрдЫ рдореЙрдбреНрдпреВрд▓ рдХреА рд╕реЗрдЯрд┐рдВрдЧ рд╕реНрд╡-рд▓рд┐рдЦрд┐рдд рдореЙрдбреНрдпреВрд▓ рдХреА рд╕реЗрдЯрд┐рдВрдЧреНрд╕ рджреНрд╡рд╛рд░рд╛ рдУрд╡рд░рд░рд╛рдЗрдб рдХреА рдЬрд╛рдПрдЧреА, рдЗрд╕рд▓рд┐рдП рдЗрди рдореЙрдбреНрдпреВрд▓ рдХреЛ рд╕реВрдЪреА рдХреЗ рд╢реАрд░реНрд╖ рдкрд░ рдЬреЛрдбрд╝рд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред
рдЕрдм рдЖрдкрдХреЛ
zfcuser.global.php.dist рдлрд╝рд╛рдЗрд▓ рдХреЛ
рд╡реЗрдВрдбрд░ / zf-commons / zfc-user / config рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рд╕реЗ
рдХреЙрдкреА рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП
config / autoload рдХреЛ
рдХреЙрдкреА рдХрд░рдирд╛ рд╣реЛрдЧрд╛ рдФрд░ рдЗрд╕реЗ
zfcuser.global.php рдкрд░ рдирд╛рдо рдмрджрд▓рдирд╛ рд╣реЛрдЧрд╛ред рдЗрд╕ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдлрд╝рд╛рдЗрд▓ рдореЗрдВ, рдЖрдкрдХреЛ рдорд╛рди рд╕реЗрдЯ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ:
'table_name' => 'users',
рдЪреВрдВрдХрд┐ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рддрд╛рд▓рд┐рдХрд╛ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ рдЙрдкрдпреЛрдЧ рдХреА рдЬрд╛рддреА рд╣реИред
рдЙрд╕реА рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рдореЗрдВ, рдЖрдкрдХреЛ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдлрд╝рд╛рдЗрд▓
bjyauth.global.php рдмрдирд╛рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ рдЬрд┐рд╕рдореЗрдВ рд╡рд┐рднрд┐рдиреНрди рднреВрдорд┐рдХрд╛рдУрдВ рдХреЗ рд▓рд┐рдП рдПрдХреНрд╕реЗрд╕ рд░рд╛рдЗрдЯреНрд╕ рд╕реЗрдЯрд┐рдВрдЧреНрд╕ рд╣реИрдВред рдЖрдк рдЗрд╕ рдлрд╝рд╛рдЗрд▓ рдХрд╛ рдкреВрд░рд╛ рд╕рдВрд╕реНрдХрд░рдг github
github.com/romka/zend-blog-example/blob/master/config/autoload/bjyauth.global.php рдкрд░ рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ, рдЗрд╕рдХрд╛ рджрд┐рд▓рдЪрд╕реНрдк рд╣рд┐рд╕реНрд╕рд╛, рдЬреЛ рд╡рд┐рднрд┐рдиреНрди рдирд┐рдпрдВрддреНрд░рдХреЛрдВ рддрдХ рдкрд╣реБрдБрдЪ рдЕрдзрд┐рдХрд╛рд░реЛрдВ рдХреЗ рд╡рд┐рддрд░рдг рдХреЗ рд▓рд┐рдП рдЬрд┐рдореНрдореЗрджрд╛рд░ рд╣реИред рдиреАрдЪреЗ рджрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ:
'guards' => array( 'BjyAuthorize\Guard\Controller' => array( array( 'controller' => 'zfcuser', 'action' => array('index', 'login', 'authenticate', 'register'), 'roles' => array('guest'), ), array( 'controller' => 'zfcuser', 'action' => array('logout'), 'roles' => array('user'), ), array('controller' => 'Application\Controller\Index', 'roles' => array()), array( 'controller' => 'MyBlog\Controller\BlogPost', 'action' => array('index', 'view'), 'roles' => array('guest', 'user'), ), array( 'controller' => 'MyBlog\Controller\BlogPost', 'action' => array('add', 'edit', 'delete'), 'roles' => array('administrator'), ), ), ),
рдпрд╣ рдЙрд╕ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рд╕реЗ рджреЗрдЦрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ рдЬрд┐рд╕реЗ рд╣рдордиреЗ рд╕рднреА рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХреЗ рд▓рд┐рдП рдЕрдиреБрдХреНрд░рдордгрд┐рдХрд╛ рдФрд░ рджреГрд╢реНрдп рдХреНрд░рд┐рдпрд╛рдУрдВ рддрдХ рдкрд╣реБрдВрдЪ рдмрдирд╛рдИ рд╣реИ, рдФрд░ рдХреЗрд╡рд▓ рд╡реНрдпрд╡рд╕реНрдерд╛рдкрдХ рднреВрдорд┐рдХрд╛ рд╡рд╛рд▓реЗ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХреЗ рд▓рд┐рдП рдХрд╛рд░реНрдпреЛрдВ рдХреЛ рдЬреЛрдбрд╝рдиреЗ / рд╕рдВрдкрд╛рджрд┐рдд рдХрд░рдиреЗ / рд╣рдЯрд╛рдиреЗ рдХреЗ рд▓рд┐рдПред рдЕрдм рд▓рд┐рдВрдХ / рдмреНрд▓реЙрдЧ / рдРрдб - 403 рддреНрд░реБрдЯрд┐ рдкрд░ рдХреНрд▓рд┐рдХ рдХрд░рдХреЗ рдЗрд╕реЗ рд╕рддреНрдпрд╛рдкрд┐рдд рдХрд░рдирд╛ рдЖрд╕рд╛рди рд╣реИред
рдЕрдм рд╣рдо рд▓рд┐рдВрдХ / рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ / рд░рдЬрд┐рд╕реНрдЯрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдкрдВрдЬреАрдХрд░рдг рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ SQL рдХреНрд╡реЗрд░реА рдХреЗ рд╕рд╛рде рд╣рдорд╛рд░реЗ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЛ рд╡реНрдпрд╡рд╕реНрдерд╛рдкрдХ рд╡рд┐рд╢реЗрд╖рд╛рдзрд┐рдХрд╛рд░ рдкреНрд░рджрд╛рди рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:
INSERT INTO user_role_linker (user_id, role_id) VALUES (1, 4);
(рд╣рд╛рдВ, ZfcUser рдореЙрдбреНрдпреВрд▓ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рднреВрдорд┐рдХрд╛рдУрдВ рдХреЗ рдкреНрд░рдмрдВрдзрди рдХреЗ рд▓рд┐рдП рдПрдХ рд╡реНрдпрд╡рд╕реНрдерд╛рдкрдХ рдкреИрдирд▓ рдкреНрд░рджрд╛рди рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ)ред
рдбреЗрд╡рд▓рдкрд░ рдЯреВрд▓рдмрд╛рд░ рдореЗрдВ рдкреГрд╖реНрда рдХреЗ рдирд┐рдЪрд▓реЗ рднрд╛рдЧ рдореЗрдВ рдкреНрд░рд╛рдзрд┐рдХрд░рдг рдХреЗ рдмрд╛рдж, рд╡рд░реНрддрдорд╛рди рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреА рднреВрдорд┐рдХрд╛ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЬрд╛рдирдХрд╛рд░реА рдкреНрд░рджрд░реНрд╢рд┐рдд рдХреА рдЬрд╛рдПрдЧреА рдФрд░ рдХреНрд░рд┐рдпрд╛ / рдЬреЛрдбрд╝ / рд╣рдЯрд╛рдПрдВ рдЕрдм 403 рддреНрд░реБрдЯрд┐ рд╡рд╛рдкрд╕ рдирд╣реАрдВ рдХрд░реЗрдВрдЧреЗред
рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХреА рд╡рд░реНрддрдорд╛рди рд╕реНрдерд┐рддрд┐ рдХрд╛ рдПрдХ рдзреНрдпрд╛рди рджреЗрдиреЗ рдпреЛрдЧреНрдп рджреЛрд╖ рдпрд╣ рд╣реИ рдХрд┐ рдмреНрд▓реЙрдЧ рдкреЛрд╕реНрдЯ рдХреЛ рд╕рдВрдкрд╛рджрд┐рдд рдХрд░рдиреЗ / рд╣рдЯрд╛рдиреЗ рдХреЗ рд▓рд┐рдВрдХ рд╕рднреА рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХреЛ рджрд┐рдЦрд╛рдП рдЬрд╛рддреЗ рд╣реИрдВ, рдЗрд╕ рддрдереНрдп рдХреЗ рдмрд╛рд╡рдЬреВрдж рдХрд┐ рдЧреБрдордирд╛рдо рд▓реЛрдЧреЛрдВ рдХреЗ рдкрд╛рд╕ рдЗрд╕ рддрд░рд╣ рдХреА рдХрд╛рд░реНрд░рд╡рд╛рдИ рдХрд░рдиреЗ рдХреЗ рдЕрдзрд┐рдХрд╛рд░ рдирд╣реАрдВ рд╣реИрдВред
BjyAuthorize рдореЙрдбреНрдпреВрд▓ рдореЗрдВ
IsAllowed View рдкреНрд▓рдЧрдЗрди рд╣реИ, рдЬреЛ рд╕рдорд╕реНрдпрд╛ рдХреЛ рдареАрдХ рдХрд░рдирд╛ рдЖрд╕рд╛рди рдмрдирд╛рддрд╛ рд╣реИред рдЯреЗрдореНрдкреНрд▓реЗрдЯ рдореЗрдВ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдкрдВрдХреНрддрд┐рдпрд╛рдБ рдЬреЛрдбрд╝реЗрдВ:
if ($this->isAllowed('controller/MyBlog\Controller\BlogPost:edit')) {
рдЬрд╣рд╛рдВ рд╕рдВрдмрдВрдзрд┐рдд рдирд┐рдпрдВрддреНрд░рдХ / рдХрд╛рд░реНрд░рд╡рд╛рдИ рддрдХ рдкрд╣реБрдВрдЪ рдЕрдзрд┐рдХрд╛рд░реЛрдВ рдХреА рдЙрдкрд▓рдмреНрдзрддрд╛ рдХреА рдЬрд╛рдВрдЪ рдХрд░рдирд╛ рдЖрд╡рд╢реНрдпрдХ рд╣реИ, рдпрд╣ рдЙрди рдЯреЗрдореНрдкрд▓реЗрдЯ рд▓рд┐рдВрдХ рдореЗрдВ рдкреНрд░рджрд░реНрд╢рд┐рдд рдирд╣реАрдВ рд╣реЛрдиреЗ рджреЗрдЧрд╛ рдЬреЛ рд╡рд░реНрддрдорд╛рди рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЗ рд▓рд┐рдП рд╕реБрд▓рдн рдирд╣реАрдВ рд╣реИрдВред
рдЗрд╕реА рддрд░рд╣ рд╕реЗ, рдкреНрд░рд╡реЗрд╢ рдХреЗ рд▓рд┐рдП рдЕрдиреБрдХреНрд░рдордгрд┐рдХрд╛ () рдХрд╛рд░реНрд░рд╡рд╛рдИ рдореЗрдВ, рдмреНрд▓реЙрдЧ рдкреЛрд╕реНрдЯреЛрдВ рдХреА рдПрдХ рдкреВрд░реА рд╕реВрдЪреА рдкреНрд░рджрд░реНрд╢рд┐рдд рдХреА рдЬрд╛ рд╕рдХрддреА рд╣реИ, рди рдХрд┐ рдХреЗрд╡рд▓ рдкреНрд░рдХрд╛рд╢рд┐рдд рд▓реЗрдЦ:
if ($this->isAllowed('controller/MyBlog\Controller\BlogPost:edit')) { $posts = $objectManager ->getRepository('\MyBlog\Entity\BlogPost') ->findBy(array(), array('created' => 'DESC')); } else { $posts = $objectManager ->getRepository('\MyBlog\Entity\BlogPost') ->findBy(array('state' => 1), array('created' => 'DESC')); }
рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдЕрдкрдиреЗ рд╡рд░реНрддрдорд╛рди рд░реВрдк рдореЗрдВ Github рд░рд┐рдкреЙрдЬрд┐рдЯрд░реА рдореЗрдВ
рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд┐рдП рдЧрдП_рдпреВрдЬрд╝рд░ рдЯреИрдЧ:
github.com/romka/zend-blog-example/tree/configured_user рдХреЗ рд╕рд╛рде рдЙрдкрд▓рдмреНрдз рд╣реИред
рдлрд╝реИрд╢рди
рдЕрдкрдиреЗ рдЕрднреНрдпрд╛рд╕ рдореЗрдВ, рдореИрдВрдиреЗ рдХрдИ рдЕрд▓рдЧ-рдЕрд▓рдЧ рдЯреЗрдореНрдкрд▓реЗрдЯ рдЗрдВрдЬрдиреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдФрд░ рдореИрдВ рдкрд╛рдпрдерди
рдЬрд┐рдирдЬрд╛ 2 рдХреЛ рдЙрди рд▓реЛрдЧреЛрдВ рдХреЗ рд▓рд┐рдП рд╕рдмрд╕реЗ рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рдорд╛рдирддрд╛ рд╣реВрдВ рдЬрд┐рдирдХреЗ рд╕рд╛рде рдореБрдЭреЗ рдХрд╛рдо рдХрд░рдирд╛ рдерд╛ред рдЯреНрд╡рд┐рдЧ рдкреАрдПрдЪрдкреА рдЯреЗрдВрдкрд▓реЗрдЯрд┐рдВрдЧ рдЗрдВрдЬрди рдореВрд▓ рд░реВрдк рд╕реЗ рдЬрд┐рдВрдЬрд╛ 2 рдХреЗ рд▓реЗрдЦрдХ рдЕрд░реНрдорд┐рди рд░реЛрдирдЪреЗрд░ рджреНрд╡рд╛рд░рд╛ рд╡рд┐рдХрд╕рд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛, рдФрд░ рдлрд┐рд░
рд╕рд┐рдореНрдлрдиреА рдлреНрд░реЗрдорд╡рд░реНрдХ рдХреЗ рд╡рд┐рдХрд╛рд╕рдХрд░реНрддрд╛ рдлреИрдмрд┐рди рдкреЛрдЯреЗрдВрд╢рд┐рдпрд░ рдиреЗ рдЙрдирдХрд╛ рд╕рдорд░реНрдерди рдФрд░ рд╡рд┐рдХрд╛рд╕ рдХрд┐рдпрд╛ред
Twig рдФрд░ Zend рдлреНрд░реЗрдорд╡рд░реНрдХ рдореЗрдВ рдирд┐рд░реНрдорд┐рдд рдЯреЗрдореНрдкреНрд▓реЗрдЯ рдЗрдВрдЬрди рдХреЗ рдмреАрдЪ рдПрдХ рдорд╣рддреНрд╡рдкреВрд░реНрдг рдЕрдВрддрд░ рдпрд╣ рд╣реИ рдХрд┐ рдЖрдк Twig рдЯреЗрдореНрдкреНрд▓реЗрдЯ рдореЗрдВ PHP рдХреЛрдб рдХрд╛ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдЗрд╕рдХреЗ рдмрдЬрд╛рдп, рд▓реВрдк, рд╕рд╢рд░реНрдд рд╡рд┐рд╡рд░рдг рдЖрджрд┐ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЯреЗрдореНрдкреНрд▓реЗрдЯ рдЗрдВрдЬрди рдХрд╛ рдЕрдкрдирд╛ рд╕рд┐рдВрдЯреИрдХреНрд╕ рд╣реИред Twig рдЯреЗрдореНрдкрд▓реЗрдЯреНрд╕ рдХреЛ PHP рдХреЛрдб рдореЗрдВ рд╕рдВрдХрд▓рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдФрд░ рдкрд░рд┐рдгрд╛рдорд╕реНрд╡рд░реВрдк PHP рдХреЛрдб рдореЗрдВ рдкреНрд░рджрд░реНрд╢рди рдирд╣реАрдВ рдЦреЛрддреЗ рд╣реИрдВред
рдЯреЗрдореНрдкреНрд▓реЗрдЯ рдЗрдирд╣реЗрд░рд┐рдЯреЗрдВрд╕, рдореИрдХреНрд░реЛрдЬрд╝, рдлрд╝рд┐рд▓реНрдЯрд░ рд╕рд┐рд╕реНрдЯрдо рдЖрджрд┐ рдЬреИрд╕реА рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рджред рдЯрд╣рдиреА рдЯреЗрдореНрдкрд▓реЗрдЯ рдХреЙрдореНрдкреИрдХреНрдЯ рдФрд░ рдкрдврд╝рдиреЗ рдореЗрдВ рдЖрд╕рд╛рди рд╣реИрдВред
рд╕реНрдерд╛рдкрдирд╛
рдЯрд╣рдиреА рдХреЛ рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдорд╛рдирдХ рдЪрд░рдгреЛрдВ рдХрд╛ рдкрд╛рд▓рди рдХрд░рдирд╛ рдкрд░реНрдпрд╛рдкреНрдд рд╣реИ:
рдХрдВрдкреЛрдЬрд░ рдХреЗ рд▓рд┐рдП рдПрдХ рдкрдВрдХреНрддрд┐ рдЬреЛрдбрд╝реЗрдВред
рдЖрдЧрдЬрдиреА ,
php рдХрдВрдкреЛрдЬрд╝рд░ рдХреЛ рдЕрджреНрдпрддрди рдХрд░реЗрдВред рдерд╛рдкрд░ рдЕрдкрдбреЗрдЯ рдХрд░реЗрдВ рдФрд░ рдореЙрдбреНрдпреВрд▓ рдХреЛ
application.config.php рдореЗрдВ рдЬреЛрдбрд╝реЗрдВред
рдЕрдм, рдореЙрдбреНрдпреВрд▓ рдЬреЛ рдЗрд╕ рдЯреЗрдореНрдкрд▓реЗрдЯ рдЗрдВрдЬрди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВрдЧреЗ, view_manager рд╕реЗрдХреНрд╢рди рдореЗрдВ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рдирд┐рдореНрди рдкрдВрдХреНрддрд┐рдпрд╛рдБ рдЬреЛрдбрд╝реЗрдВ:
'strategies' => array( 'ZfcTwigViewStrategy', ),
рдФрд░ рдЯрд╣рдиреА рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рддреИрдпрд╛рд░ рд╣реЛ рдЬрд╛рдПрдЧрд╛ред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рджреЛрдиреЛрдВ рдЯреЗрдореНрдкрд▓реЗрдЯ рдЗрдВрдЬрди (рдЯрд╣рдиреА рдФрд░ рдбрд┐рдлрд╝реЙрд▓реНрдЯ) рдХреЛ рдПрдХ рд╕рд╛рде рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдЕрд░реНрдерд╛рдд, рдЯреЗрдореНрдкрд▓реЗрдЯ рдХрд╛ рд╣рд┐рд╕реНрд╕рд╛ рдПрдХ рдЯреЗрдореНрдкрд▓реЗрдЯ рдкрд░ рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рджреВрд╕рд░реЗ рдкрд░ рднрд╛рдЧред
рдЯрд╣рдиреА рдЯреЗрдореНрдкреНрд▓реЗрдЯ
рдКрдкрд░ рдЙрд▓реНрд▓рд┐рдЦрд┐рдд рдЯреЗрдореНрдкреНрд▓реЗрдЯ рдЗрдирд╣реЗрд░рд┐рдЯреЗрдВрд╕ рдХрд╛ рдорддрд▓рдм рдпрд╣ рд╣реИ рдХрд┐ рд╣рдо рдПрдХ рдбрд┐рдлрд╝реЙрд▓реНрдЯ
рд▓реЗрдЖрдЙрдЯ рдмрдирд╛ рд╕рдХрддреЗ рд╣реИрдВред рд▓рдЧрднрдЧ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рд╕рд╛рдордЧреНрд░реА рдХреЗ
рд╕рд╛рде рдЯреЗрдореНрдкрд▓реЗрдЯ:
<html> <head> <title> {% block title %}Default title{% endblock title %} </title> {% block script %} <script type="text/javascript" src="/js/jquery.min.js"></script> {% endblock script %} </head> <body> <div class="content"> {% block content %}{{ content|raw }}{% endblock content %} </div> <div class="sidebar"> {% block sidebar %}{{ sidebar|raw }}{% endblock sidebar %} </div> </body> </html>
рдЗрд╕рдХреЗ рдмрд╛рдж, рд╣рдо рдПрдХ рдРрд╕рд╛ рдЯреЗрдореНрдкреНрд▓реЗрдЯ рдмрдирд╛ рд╕рдХрддреЗ рд╣реИрдВ, рдЬреЛ рдХрд┐ рд▓реЗрдЖрдЙрдЯ рд╕реЗ рдирд┐рдХрд▓реЗрдЧрд╛ред рдЗрд╕рдореЗрдВ, рд╣рдо рдХреЗрд╡рд▓ рдЯреЗрдореНрдкреНрд▓реЗрдЯ рдХреЗ рдкрд░рд┐рд╡рд░реНрддрд┐рдд рд╣рд┐рд╕реНрд╕реЛрдВ рдХреЛ рдлрд┐рд░ рд╕реЗ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░реЗрдВрдЧреЗ:
{% extends 'layout/layout.twig' %} {% block script %} {{ parent() }} <script type="text/javascript" src="some-additional-file.js"></script> {% endblock script %} {% block content %} Custom content {% endblock content %}
рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ, рдЙрддреНрддрд░рд╛рдзрд┐рдХрд╛рд░реА рдЯреЗрдореНрдкрд▓реЗрдЯ рдореЗрдВ рдУрд╡рд░рд░рд╛рдЗрдб рдХрд┐рдпрд╛ рдЧрдпрд╛ рдмреНрд▓реЙрдХ рдЕрднрд┐рднрд╛рд╡рдХ рдЯреЗрдореНрдкрд▓реЗрдЯ рдореЗрдВ рдмреНрд▓реЙрдХ рдХреЛ рдмрджрд▓ рджреЗрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдмреНрд▓реЙрдХ рдореЗрдВ
{{рдкреЗрд░реЗрдВрдЯ ()}} рдкрд░ рдзреНрдпрд╛рди рджреЗрддрд╛ рд╣реИ, рдЗрд╕рдХреЗ рдЙрдкрдпреЛрдЧ рдХрд╛ рдЕрд░реНрде рд╣реИ рдХрд┐ рдкреЗрд░реЗрдВрдЯ рдЯреЗрдореНрдкрд▓реЗрдЯ рд╕реЗ рдЙрд╕реА рдмреНрд▓реЙрдХ рдХреА рд╕рд╛рдордЧреНрд░реА рдХреЛ рдЗрд╕ рдмреНрд▓реЙрдХ рдореЗрдВ рд▓реЛрдб рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред
рдЕрдм рдирдП рдЯреЗрдореНрдкреНрд▓реЗрдЯ рдЗрдВрдЬрди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЯреЗрдореНрдкреНрд▓реЗрдЯ рдХреЛ рдлрд┐рд░ рд╕реЗ рд▓рд┐рдЦрддреЗ рд╣реИрдВред рдореИрдВрдиреЗ Zend Skeleton Application рд╕реЗ рдорд╛рдирдХ
Layout.phtml рдЯреЗрдореНрдкрд▓реЗрдЯ рдХреЗ рд╕рд╛рде рд╢реБрд░реБрдЖрдд рдХреА, рдЖрдк рдЗрд╕реЗ MyBlog рдореЙрдбреНрдпреВрд▓ рдореЗрдВ рджреГрд╢реНрдп / рд▓реЗрдЖрдЙрдЯ рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛
github.com/romka/zend-blog-example/blob/master/module/MyBlog/view/layout/layout рд╕реЗ рдкрд╛ рд╕рдХрддреЗ рд╣реИрдВред рдЯрд╣рдиреА ред
рдЗрд╕ рдмрд╛рдд рдкрд░ рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ рдпрд╣ рдХрд┐рддрдирд╛ рдЕрдзрд┐рдХ рдХреЙрдореНрдкреИрдХреНрдЯ рд╣реЛ рдЧрдпрд╛ рд╣реИ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рджреГрд╢реНрдп-рд╕рд╣рд╛рдпрдХреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реБрдП, рдЕрдм рдЗрд╕рдХреЗ рдмрдЬрд╛рдп:
<?php echo $this->url('blog', array('action' => 'edit')); ?>
рдЖрдк рдХреЙрд▓ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:
{{ url('blog', {'action': 'edit'}) }}
рдмрдЬрд╛рдп:
<?php echo $this->showMessages(); ?>
рд╕рд░рд▓:
{{ showMessages() }}
рдореБрдЦреНрдп рдЯреЗрдореНрдкрд▓реЗрдЯ рдХреЛ рд╕рдВрд╕рд╛рдзрд┐рдд рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж, рд╣рдо рд░реВрдкреЛрдВ рд╕реЗ рдирд┐рдкрдЯреЗрдВрдЧреЗред рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рдореЙрдбреНрдпреВрд▓ рдХреА
рджреГрд╢реНрдп рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рдореЗрдВ,
рдореИрдХреНрд░реЛрдЬрд╝ рдЙрдкрдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рдФрд░ рдирд┐рдореНрди рд╕рд╛рдордЧреНрд░реА рдХреЗ рд╕рд╛рде
form.twig рдлрд╝рд╛рдЗрд▓ рдмрдирд╛рдПрдБ:
{% macro input(name, value, type, label, size, messages) %} {% if type != 'hidden' %} <div class="form-element-{{ name }}"> {% endif %} {% if label %} {{ label }}: {% endif %} {% if type == 'textarea' %} <textarea name="{{ name }}" size="{{ size|default(20) }}" {% if messages|length > 0 %}class="error"{% endif %}/>{{ value|e }}</textarea> {% elseif type == 'checkbox' %} <input type="{{ type }}" name="{{ name }}" value="1"{% if value == true %} checked="checked"{% endif %} {% if messages|length > 0 %}class="error"{% endif %}/> {% else %} <input type="{{ type|default('text') }}" name="{{ name }}" value="{{ value|e }}" size="{{ size|default(20) }}" {% if messages|length > 0 %}class="error"{% endif %}/> {% endif %} {% if type != 'hidden' %} </div> {% endif %} {% if messages|length > 0 %} <ul> {% for m in messages %} <li>{{ m }}</li> {% endfor %} </ul> {% endif %} {% endmacro %}
рдЗрд╕ рдореИрдХреНрд░реЛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдлреЙрд░реНрдо рдлрд╝реАрд▓реНрдб рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред рдЗрдирдкреБрдЯ рдкрд░, рдпрд╣ рдХреНрд╖реЗрддреНрд░ рдХреЗ рдорд╛рдкрджрдВрдбреЛрдВ рдХреЛ рдкреНрд░рд╛рдкреНрдд рдХрд░рддрд╛ рд╣реИ, рдЖрдЙрдЯрдкреБрдЯ рдкрд░, рдпрд╣ html рдорд╛рд░реНрдХрдЕрдк рд▓реМрдЯрд╛рддрд╛ рд╣реИред
рдЕрдм рдЖрдк рдореМрдЬреВрджрд╛
add.phtml рдЯреЗрдореНрдкреНрд▓реЗрдЯ рдХреЛ рд╣рдЯрд╛ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рдЗрд╕реЗ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рд╕рд╛рдордЧреНрд░реА рдХреЗ рд╕рд╛рде рдПрдХ рдирдП
рдРрдб.рдЯрд╛рдЗрдЧ рдХреЗ рд╕рд╛рде рдмрджрд▓ рд╕рдХрддреЗ рд╣реИрдВ:
{% extends 'layout/layout.twig' %} {% import 'macros/forms.twig' as forms %} {% block content %} <h1>{{ title }}</h1> <form method="{{ form.attributes.method }}" action="{{ url('blog', {'action': 'add'}) }}"> {% for element in form %} {{ forms.input(element.attributes.name, element.value, element.attributes.type, element.label, 20, element.messages) }} {% endfor %} </form> {% endblock content %}
рдЗрд╕реА рддрд░рд╣, рдореИрдВрдиреЗ рдмрд╛рдХреА рдЯреЗрдореНрдкреНрд▓реЗрдЯреНрд╕ рдХреЛ рд░реАрдбрд╛рдпрд░реЗрдХреНрдЯ рдХрд░ рджрд┐рдпрд╛ рдФрд░ рдЕрдм рдореЙрдбреНрдпреВрд▓ рдХреЛ рд╣рдЯрд╛ рджрд┐рдпрд╛ред * .ttml рдЯреЗрдореНрдкреНрд▓реЗрдЯ рдЬреЛ рдЕрдирд╛рд╡рд╢реНрдпрдХ рд╣реЛ рдЧрдП:
github.com/romka/zend-blog-example/tree/master/module/MyBlog/view/my/blog/blog ред
рдирд┐рд╖реНрдХрд░реНрд╖
рдЗрд╕ рдкрд░ рдореИрдВ рд╕рдорд╛рдкреНрдд рдХрд░рдирд╛ рдЪрд╛рд╣реВрдВрдЧрд╛ред рдореИрдВ рдмрд╣реБрдд рд╕рд╛рд░реЗ рдорд╣рддреНрд╡рдкреВрд░реНрдг рдмрд┐рдВрджреБрдУрдВ рдкрд░ рдирд╣реАрдВ рдЫреВ рдкрд╛рдпрд╛, рдЬреИрд╕реЗ рд▓реЙрдЧрд┐рдВрдЧ, рдХреИрд╢рд┐рдВрдЧ, рдбрд┐рдкреЗрдВрдбреЗрдВрд╕реА рдЗрдВрдЬреЗрдХреНрд╢рди, рд▓реЗрдЦрди рдкрд░реАрдХреНрд╖рдг, рдЖрджрд┐, рд▓реЗрдХрд┐рди рдпреЗ рд╕рднреА рдореБрджреНрджреЗ рдкрд░рд┐рдЪрдпрд╛рддреНрдордХ рд▓реЗрдЦ рдХреЗ рджрд╛рдпрд░реЗ рд╕реЗ рдкрд░реЗ рд╣реИрдВред рд▓реЗрдХрд┐рди рдореБрдЭреЗ рдЙрдореНрдореАрдж рд╣реИ рдХрд┐ рд╢реБрд░реБрдЖрддреА рдХреЗ рд▓рд┐рдП рдЬрд╝реЗрдВрдб рдлреНрд░реЗрдорд╡рд░реНрдХ 2 рд╕реАрдЦрдирд╛ рд╣реЛрдЧрд╛, рдпрд╣ рд▓реЗрдЦ рдПрдХ рдЙрдкрдпреЛрдЧреА рд╢реБрд░реБрдЖрддреА рдмрд┐рдВрджреБ рд╣реЛрдЧрд╛ред
рдореИрдВрдиреЗ рдЗрд╕ рд▓реЗрдЦ рдХреЗ рд╕рднреА 3 рднрд╛рдЧреЛрдВ рдХреЛ рдкрд╣рд▓реЗ рднрд╛рдЧ рдХреЗ рдкреНрд░рдХрд╛рд╢рди рд╕реЗ рдкрд╣рд▓реЗ рд▓рд┐рдЦрд╛ рдерд╛ рдФрд░ рдкрд╛рда рдХреЗ рдкреВрд░рд╛ рд╣реЛрдиреЗ рдХреЗ рд╕рдордп рдореИрдВрдиреЗ рдЗрд╕реЗ рдЦрддреНрдо рдХрд░рдиреЗ рдХреА рдпреЛрдЬрдирд╛ рдмрдирд╛рдИ рдереАред рдЯрд┐рдкреНрдкрдгрд┐рдпреЛрдВ рдХреЛ рдкрдврд╝рдиреЗ рдХреЗ рдмрд╛рдж, рдореИрдВрдиреЗ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЛ рдереЛрдбрд╝рд╛ рд╕реБрдзрд╛рд░рдиреЗ рдХрд╛ рдирд┐рд░реНрдгрдп рд▓рд┐рдпрд╛:
- GET / POST рдЕрдиреБрд░реЛрдз рдХреЗ рдкреНрд░рдХрд╛рд░ рдХреА рдЬрд╛рдБрдЪ рдХрд░рдиреЗ рдХреЗ рдмрдЬрд╛рдп REST рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ,
- рдХрд╛рд░реНрдпреЛрдВ рд╕реЗ рдкрд╣рд▓реЗ рд╣реБрдХ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд╛рд░реНрдпреЛрдВ рдХрд╛ рд╣рд┐рд╕реНрд╕рд╛ рд╕реНрдерд╛рдирд╛рдВрддрд░рдг,
- рдХрд╛рд░реНрдпреЛрдВ рдХреЗ рд╕рд┐рджреНрдзрд╛рдВрдд рдХреЛ рд╕рд┐рджреНрдзрд╛рдВрдд рд╣реБрдХ рдореЗрдВ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░реЗрдВ,
- рдЬрд╛рджреВ рд╕реНрдерд┐рд░рд╛рдВрдХ рд╕реЗ рдЫреБрдЯрдХрд╛рд░рд╛ рдкрд╛рдПрдВ,
- yaml рдХреЛ рдХреЙрдиреНрдлрд┐рдЧрд░реЗрд╢рди рдЯреНрд░рд╛рдВрд╕рдлрд░ рдХрд░реЗрдВ,
- DI (?) рдХреЗ рд╕рд╛рде рдХреЙрд▓ рдХрд╛ рд╣рд┐рд╕реНрд╕рд╛ рдмрджрд▓реЗрдВред
рдЗрди рдкрд░рд┐рд╡рд░реНрддрдиреЛрдВ рдХреЛ рддреИрдпрд╛рд░ рдХрд░рдиреЗ рдореЗрдВ рдХреБрдЫ рд╕рдордп рд▓рдЧреЗрдЧрд╛, рдореБрдЭреЗ рдЙрдореНрдореАрдж рд╣реИ рдХрд┐ рд▓реЗрдЦ рдХрд╛ рдЪреМрдерд╛ рднрд╛рдЧ рдЬрд▓реНрдж рд╣реА рдкреНрд░рдХрд╛рд╢рд┐рдд рд╣реЛрдЧрд╛ред