Zend рдлреНрд░реЗрдорд╡рд░реНрдХ рдкрд░ рдПрдХ рдмреНрд▓реЙрдЧ рд╡рд┐рдХрд╕рд┐рдд рдХрд░рдиреЗ рдХрд╛ рдПрдХ рдЙрджрд╛рд╣рд░рдг 2. рднрд╛рдЧ 3. рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдирд╛

рдпрд╣ 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( /* If this guard is specified here (ie it is enabled), it will block * access to all controllers and actions unless they are specified here. * You may omit the 'action' index to allow access to the entire controller */ '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')) { // some code here } 

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

рдЗрд╕реА рддрд░рд╣ рд╕реЗ, рдкреНрд░рд╡реЗрд╢ рдХреЗ рд▓рд┐рдП рдЕрдиреБрдХреНрд░рдордгрд┐рдХрд╛ () рдХрд╛рд░реНрд░рд╡рд╛рдИ рдореЗрдВ, рдмреНрд▓реЙрдЧ рдкреЛрд╕реНрдЯреЛрдВ рдХреА рдПрдХ рдкреВрд░реА рд╕реВрдЪреА рдкреНрд░рджрд░реНрд╢рд┐рдд рдХреА рдЬрд╛ рд╕рдХрддреА рд╣реИ, рди рдХрд┐ рдХреЗрд╡рд▓ рдкреНрд░рдХрд╛рд╢рд┐рдд рд▓реЗрдЦ:
 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 рднрд╛рдЧреЛрдВ рдХреЛ рдкрд╣рд▓реЗ рднрд╛рдЧ рдХреЗ рдкреНрд░рдХрд╛рд╢рди рд╕реЗ рдкрд╣рд▓реЗ рд▓рд┐рдЦрд╛ рдерд╛ рдФрд░ рдкрд╛рда рдХреЗ рдкреВрд░рд╛ рд╣реЛрдиреЗ рдХреЗ рд╕рдордп рдореИрдВрдиреЗ рдЗрд╕реЗ рдЦрддреНрдо рдХрд░рдиреЗ рдХреА рдпреЛрдЬрдирд╛ рдмрдирд╛рдИ рдереАред рдЯрд┐рдкреНрдкрдгрд┐рдпреЛрдВ рдХреЛ рдкрдврд╝рдиреЗ рдХреЗ рдмрд╛рдж, рдореИрдВрдиреЗ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЛ рдереЛрдбрд╝рд╛ рд╕реБрдзрд╛рд░рдиреЗ рдХрд╛ рдирд┐рд░реНрдгрдп рд▓рд┐рдпрд╛:

рдЗрди рдкрд░рд┐рд╡рд░реНрддрдиреЛрдВ рдХреЛ рддреИрдпрд╛рд░ рдХрд░рдиреЗ рдореЗрдВ рдХреБрдЫ рд╕рдордп рд▓рдЧреЗрдЧрд╛, рдореБрдЭреЗ рдЙрдореНрдореАрдж рд╣реИ рдХрд┐ рд▓реЗрдЦ рдХрд╛ рдЪреМрдерд╛ рднрд╛рдЧ рдЬрд▓реНрдж рд╣реА рдкреНрд░рдХрд╛рд╢рд┐рдд рд╣реЛрдЧрд╛ред

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


All Articles