Yii 2.0 рдмреАрдЯрд╛

рд╣рдо PHP рдлреНрд░реЗрдорд╡рд░реНрдХ Yii 2 рдХреЗ рдмреАрдЯрд╛ рд╕рдВрд╕реНрдХрд░рдг рдХреЛ рдЬрд╛рд░реА рдХрд░рдиреЗ рдХреА рдШреЛрд╖рдгрд╛ рдХрд░рддреЗ рд╣реБрдП рдмрд╣реБрдд рдЦреБрд╢ рд╣реИрдВред рдЖрдк рдЗрд╕реЗ yiiframework.com рд╕реЗ рдбрд╛рдЙрдирд▓реЛрдб рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ ред

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



рдЕрдХреНрд╕рд░ рдкреВрдЫреЗ рдЬрд╛рдиреЗ рд╡рд╛рд▓реЗ рдкреНрд░рд╢реНрди





рдЕрд▓реНрдлрд╛ рдХреЗ рд╕рд╛рде рдмрдбрд╝рд╛ рдмрджрд▓рд╛рд╡



рдЖрдк CHANGELOG рдореЗрдВ рдкрд░рд┐рд╡рд░реНрддрдиреЛрдВ рдХреА рдкреВрд░реА рд╕реВрдЪреА рдкрд╛ рд╕рдХрддреЗ рд╣реИрдВ, рдФрд░ рдиреАрдЪреЗ рд╣рдо рд╕рдмрд╕реЗ рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╡рд░реНрдгрди рдХрд░реЗрдВрдЧреЗред

рд╕рдВрд░рдЪрдирд╛


Yii 2 рдиреЗ PSR-4 рдХрд╛ рдЙрдкрдпреЛрдЧ рд╢реБрд░реВ рдХрд┐рдпрд╛
рдХрдХреНрд╖рд╛рдУрдВ рдХреЛ рд▓реЛрдб рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдПред рд╡рд╣ рд╣реИ:



рдирд┐рдпрдВрддреНрд░рдХ рдХрдХреНрд╖рд╛рдПрдВ рдЕрдм Module::controllerNamespace рдореЗрдВ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдирд╛рдорд╕реНрдерд╛рди рдореЗрдВ рд╣реЛрдиреА рдЪрд╛рд╣рд┐рдП Module::controllerNamespace , рдЬрдм рддрдХ рдЖрдк рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ Module::controllerMap рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВ Module::controllerMap ред

рд╣рдордиреЗ рдЙрдкрдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рдореЗрдВ рдирд┐рдпрдВрддреНрд░рдХреЛрдВ рдХреЗ рд╕рдореВрд╣рди рдХреЗ рд▓рд┐рдП рд╕рдорд░реНрдерди рднреА рд▓реМрдЯрд╛рдпрд╛, рдЬреЛ 1.1 рдореЗрдВ рдерд╛ред

рдЙрдкрдпреЛрдЧ рдХреА рд╕рд░рд▓рддрд╛


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

рд╣рдордиреЗ PSR-1 рдФрд░ PSR-2 рдХреЛрдб рд╢реИрд▓рд┐рдпреЛрдВ рдкрд░ рд╕реНрд╡рд┐рдЪ рдХрд┐рдпрд╛ рдФрд░ рдХрдИ IDEs, рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рдХреЛрдб рдЬрд╛рдБрдЪ рдФрд░ рдХреЗ рд▓рд┐рдП рд╕рдорд░реНрдерди рдкреНрд░рд╛рдкреНрдд рдХрд┐рдпрд╛
рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд╕реНрд╡рд░реВрдкрдг ред

рдЙрддреНрдкрд╛рджрдХрддрд╛


рд╕рдмрд╕реЗ рдорд╣рддреНрд╡рдкреВрд░реНрдг рдкрд░рд┐рд╡рд░реНрддрдиреЛрдВ рдореЗрдВ рд╕реЗ рдПрдХ рдпрд╣ рд╣реИ рдХрд┐ рд╕рддреНрд░ рддрдм рддрдХ рд╢реБрд░реВ рдирд╣реАрдВ рд╣реЛрддрд╛ рд╣реИ рдЬрдм рддрдХ рдХрд┐ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЗрд╕рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рди рд╣реЛред рдпрд╣ рдЕрдиреБрдкреНрд░рдпреЛрдЧреЛрдВ рдХреЛ рдЕрддрд┐рд░рд┐рдХреНрдд рд╕рдВрд╕рд╛рдзрдиреЛрдВ рдХреЛ рдмрд░реНрдмрд╛рдж рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рдирд╣реАрдВ рджреЗрддрд╛ рд╣реИред

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

рд╕реБрд░рдХреНрд╖рд╛


Yii рдЕрдм BREACH рд╣рдорд▓реЛрдВ рдХреЛ рд░реЛрдХрдиреЗ рдХреЗ рд▓рд┐рдП * рдирдХрд╛рдмрдкреЛрд╢ * CSRF рдЯреЛрдХрди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИред

RBAC рдХреЛ рдлрд┐рд░ рд╕реЗ рд▓рд┐рдЦрд╛ рдЧрдпрд╛ рд╣реИ, рдЬрд┐рд╕рд╕реЗ рдпрд╣ рдЖрд╕рд╛рди рд╣реЛ рдЧрдпрд╛ рд╣реИред рд╡реНрдпрд╛рд╡рд╕рд╛рдпрд┐рдХ рдирд┐рдпрдо рдЕрдм рдмрд┐рдирд╛ рдХрд┐рд╕реА eval рдХреЗ рдХрдХреНрд╖рд╛рдУрдВ рдХреЗ рд░реВрдк рдореЗрдВ рдЬрд╛рд░реА рдХрд┐рдП рдЬрд╛рддреЗ рд╣реИрдВред

рд░реЗрд╕реНрдЯрдлреБрд▓ рдПрдкреАрдЖрдИ рдлреНрд░реЗрдорд╡рд░реНрдХ


рдмреАрдЯрд╛ рдореЗрдВ рджрд┐рдЦрд╛рдИ рджреЗрдиреЗ рд╡рд╛рд▓реА рд▓рдВрдмреЗ рд╕рдордп рд╕реЗ рдкреНрд░рддреАрдХреНрд╖рд┐рдд рд╕реБрд╡рд┐рдзрд╛ рдПрдХ REST API рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдЕрдВрддрд░реНрдирд┐рд╣рд┐рдд рдврд╛рдВрдЪрд╛ рд╣реИред рдЗрд╕ рд╕рдореАрдХреНрд╖рд╛ рдореЗрдВ, рд╣рдо рдЗрд╕рдХрд╛ рд╡рд┐рд╕реНрддрд╛рд░ рд╕реЗ рд╡рд░реНрдгрди рдирд╣реАрдВ рдХрд░реЗрдВрдЧреЗ, рд▓реЗрдХрд┐рди рдХреЗрд╡рд▓ рдореБрдЦреНрдп рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рдХреЛ рд╕реВрдЪреАрдмрджреНрдз рдХрд░реЗрдВрдЧреЗред рдкреВрд░рд╛ рд╡рд┐рд╡рд░рдг рдирд┐рд╢реНрдЪрд┐рдд рдЧрд╛рдЗрдб рдореЗрдВ рдЙрдкрд▓рдмреНрдз рд╣реИред



рдирд┐рд░реНрднрд░рддрд╛ рдЗрдВрдЬреЗрдХреНрд╢рди рдФрд░ рд╕реЗрд╡рд╛ рд▓реЛрдХреЗрдЯрд░


рдХрдИ рд▓реЛрдЧреЛрдВ рдиреЗ рдкреВрдЫрд╛ рд╣реИ рдХрд┐ Yii рдореЗрдВ рдбрд┐рдкреЗрдВрдбреЗрдВрд╕реА рдЗрдВрдЬреЗрдХреНрд╢рди (DI) рдХрдВрдЯреЗрдирд░ рдХреНрдпреЛрдВ рдирд╣реАрдВ рд╣реИред рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, Yii рдиреЗ рд╣рдореЗрд╢рд╛ рд╕рд░реНрд╡рд┐рд╕ рд▓реЛрдХреЗрдЯрд░ рдХреЗ рд░реВрдк рдореЗрдВ рдЗрд╕реА рддрд░рд╣ рдХреА рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рдкреНрд░рджрд╛рди рдХреА, рдЬреЛ Yii рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХрд╛ рдПрдХ рдЙрджрд╛рд╣рд░рдг рд╣реИред рдЕрдм рд╣рдордиреЗ рд╕рд░реНрд╡рд┐рд╕ рд▓реЛрдХреЗрдЯрд░ рдХреЛ рдПрдХ рдЕрд▓рдЧ рдШрдЯрдХ yii\di\ServiceLocator рд░реВрдк рдореЗрдВ рдЖрд╡рдВрдЯрд┐рдд рдХрд┐рдпрд╛ рд╣реИред рдкрд╣рд▓реЗ рдХреА рддрд░рд╣, рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдФрд░ рдореЙрдбреНрдпреВрд▓ рджреЛрдиреЛрдВ рд╕рд░реНрд╡рд┐рд╕ рд▓реЛрдХреЗрдЯрд░ рд╣реИрдВред рдЖрдк Yii::$app->get('something') рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд╕реЗрд╡рд╛ рдкреНрд░рд╛рдкреНрдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ (1.1 рдореЗрдВ рдЗрд╕реЗ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХрдВрдкреЛрдиреЗрдВрдЯ рдХрд╣рд╛ рдЬрд╛рддрд╛ рдерд╛ Yii::$app->get('something') ред

рд╕реЗрд╡рд╛ рд▓реЛрдХреЗрдЯрд░ рдХреЗ рдЕрддрд┐рд░рд┐рдХреНрдд, рд╣рдордиреЗ yii\di\Container рдХрдВрдЯреЗрдирд░ yii\di\Container рднреА рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ред рдпрд╣ рдХрдо рд╕рдВрдмрдВрдзрд┐рдд рдХреЛрдб рдмрдирд╛рдиреЗ рдореЗрдВ рдорджрдж рдХрд░рддрд╛ рд╣реИред рдкреНрд░рд╛рд░рдВрднрд┐рдХ рдЖрдВрдХрдбрд╝реЛрдВ рдХреЗ рдЕрдиреБрд╕рд╛рд░, рд╣рдорд╛рд░рд╛ рдХрдВрдЯреЗрдирд░ PHP рдореЗрдВ рд╕рдмрд╕реЗ рддреЗрдЬрд╝ DI рдХрдВрдЯреЗрдирд░реЛрдВ рдореЗрдВ рд╕реЗ рдПрдХ рд╣реИред рдЖрдк рд╡рд░реНрдЧреЛрдВ рдХреЗ рдкреНрд░рд╛рд░рдВрднрд┐рдХ рдореВрд▓реНрдпреЛрдВ рдХреЛ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП Yii::$container->set() рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдкреБрд░рд╛рдиреА Yii::$objectConfig рд╣рдЯрд╛ Yii::$objectConfig рд╣реИред

рдкрд░реАрдХреНрд╖рдг


Yii рдХреЛ рдХреЛрдбрдкреНрд╢рди рдХреЗ рд╕рд╛рде рдПрдХреАрдХреГрдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред рдпрд╣ рдЖрдкрдХреЛ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЗ рдХрд╛рд░реНрдпреЛрдВ рдХрд╛ рдЕрдиреБрдХрд░рдг рдХрд░рдХреЗ рдФрд░ рдЙрддреНрдкрдиреНрди рдЙрддреНрддрд░реЛрдВ рдХреА рд╢реБрджреНрдзрддрд╛ рдХреА рдкреБрд╖реНрдЯрд┐ рдХрд░рдХреЗ рдЖрд╡реЗрджрди рдХреЛ рд╕рдВрдкреВрд░реНрдг рд░реВрдк рд╕реЗ рдкрд░рдЦрдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред PHPUnit рдореЗрдВ рд╕реЗрд▓реЗрдирд┐рдпрдо рдХреЗ рд▓рд┐рдП рд╕рдорд░реНрдерди рдХреЗ рд╡рд┐рдкрд░реАрдд, рдХреЛрдбреЗрд╢рди рдХреЛ рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реЛрддреА рд╣реИ, CI рд╕рд░реНрд╡рд░ рдкрд░ рд░рдЦрдирд╛ рдЖрд╕рд╛рди рд╣реЛрддрд╛ рд╣реИ рдФрд░ рдпрд╣ рдмрд╣реБрдд рддреЗрдЬрд╝реА рд╕реЗ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред

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

рджреЛрдиреЛрдВ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдЯреЗрдореНрдкреНрд▓реЗрдЯ, рджреЛрдиреЛрдВ "рдмреБрдирд┐рдпрд╛рджреА" рдФрд░ "рдЙрдиреНрдирдд", рдкрд░реАрдХреНрд╖рдг рдХреЗ рд╕рд╛рде рджрд┐рдП рдЧрдП рд╣реИрдВ: рдореЙрдбреНрдпреВрд▓рд░, рдХрд╛рд░реНрдпрд╛рддреНрдордХ рдФрд░ рд╕реНрд╡реАрдХреГрддрд┐ред рд╣рдореЗрдВ рдЙрдореНрдореАрдж рд╣реИ рдХрд┐ рдкрд░реАрдХреНрд╖рдг рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рд╡рд┐рдХрд╛рд╕ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдпрд╣ рдПрдХ рдЕрдЪреНрдЫрд╛ рдкреНрд░реЛрддреНрд╕рд╛рд╣рди рд╣реЛрдЧрд╛ред

рдореЙрдбрд▓ рдорд╛рдиреНрдпрддрд╛


рдореЙрдбрд▓ рд╕рддреНрдпрд╛рдкрди рдореЗрдВ, рдХрд╛рдлреА рджрд┐рд▓рдЪрд╕реНрдк рд╕реБрдзрд╛рд░ рд╣реБрдП рд╣реИрдВред

ExistValidator рдФрд░ ExistValidator рдЕрдм рдорд▓реНрдЯреА-рдХреЙрд▓рдо рд╕рддреНрдпрд╛рдкрди рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рддреЗ рд╣реИрдВред рдиреАрдЪреЗ рдХреБрдЫ рдЙрджрд╛рд╣рд░рдг рджрд┐рдП рдЧрдП рд╣реИрдВ:

 // a1    ['a1', 'unique'] // a1   ,     a2 ['a1', 'unique', 'targetAttribute' => 'a2'] // a1  a2            [['a1', 'a2'], 'unique', 'targetAttribute' => ['a1', 'a2']] // a1  a2    ,   a1     ['a1', 'unique', 'targetAttribute' => ['a1', 'a2']] // a1          a2,    a3 ['a1', 'unique', 'targetAttribute' => ['a2', 'a1' => 'a3']] 


рд╕рддреНрдпрд╛рдкрди рдЙрди рд╢рд░реНрддреЛрдВ рдХреЗ рддрд╣рдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ рдЬреЛ when рдФрд░ whenClient рдорд╛рдзреНрдпрдо рд╕реЗ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд┐рдП whenClient ред рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдЕрдирд┐рд╡рд╛рд░реНрдп рд░рд╛рдЬреНрдп рдХреНрд╖реЗрддреНрд░ рдХрд╛ рдХреЗрд╡рд▓ рдПрдХ рдЙрджрд╛рд╣рд░рдг рд╣реИ рдпрджрд┐ рдЪрдпрдирд┐рдд рджреЗрд╢ рдпреВрдПрд╕рдП рд╣реИ:

 ['state', 'required', 'when' => function ($model) { return $model->country == Country::USA; }, 'whenClient' => "function (attribute, value) { return $('#country').value == 'USA'; }", ] 


рдХрднреА-рдХрднреА рдЖрдкрдХреЛ рдбреЗрдЯрд╛ рдХреА рдЬрд╛рдВрдЪ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ рдЬреЛ рдПрдХ рдореЙрдбрд▓ рд╕реЗ рдмрдВрдзрд╛ рдирд╣реАрдВ рд╣реИред рдпрд╣ рдирдП yii\base\DynamicModel рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ:

 public function actionSearch($name, $email) { $model = DynamicModel::validateData(compact('name', 'email'), [ [['name', 'email'], 'string', 'max' => 128], ['email', 'email'], ]); if ($model->hasErrors()) { //   } else { //   } } 


рдбреЗрдЯрд╛рдмреЗрд╕ рдФрд░ рд╕рдХреНрд░рд┐рдп рд░рд┐рдХреЙрд░реНрдб


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

рдиреЗрд╕реНрдЯреЗрдб рдЯреНрд░рд╛рдВрдЬреЗрдХреНрд╢рди рд╕рдкреЛрд░реНрдЯ


Yii рдЕрдм рдиреЗрд╕реНрдЯреЗрдб рд▓реЗрдирджреЗрди рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рддрд╛ рд╣реИред рдЖрдк рдЗрд╕ рдмрд╛рдд рдХреА рдкрд░рд╡рд╛рд╣ рдХрд┐рдП рдмрд┐рдирд╛ рд▓реЗрдирджреЗрди рд╢реБрд░реВ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рдХреНрдпрд╛ рдмрд╛рд╣рд░реА рд▓реЗрдирджреЗрди рд╢реБрд░реВ рд╣реЛ рдЧрдпрд╛ рд╣реИред

рд╢рд╛рдорд┐рд▓ рд╣реЛрдВ


рд╣рдордиреЗ рдкрд╣рд▓реЗ рд╕реЗ рдШреЛрд╖рд┐рдд рдПрдЖрд░ рд╕рдВрдмрдВрдзреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЬреЙрдЗрди рдХреЗ рд╕рд╛рде рдПрд╕рдХреНрдпреВрдПрд▓ рдкреНрд░рд╢реНрдиреЛрдВ рдХреЗ рдирд┐рд░реНрдорд╛рдг рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП ActiveQuery::joinWith() рдХреЛ рдЬреЛрдбрд╝рд╛ред рдпрд╣ рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рдЙрдкрдпреЛрдЧреА рд╣реИ рдпрджрд┐ рдЖрдк рд╕рдВрдмрдВрдзрд┐рдд рддрд╛рд▓рд┐рдХрд╛рдУрдВ рд╕реЗ рдлрд╝реАрд▓реНрдбреНрд╕ рджреНрд╡рд╛рд░рд╛ рдбреЗрдЯрд╛ рдХреЛ рдлрд╝рд┐рд▓реНрдЯрд░ рдпрд╛ рд╕реЙрд░реНрдЯ рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП:

 //        id   id .    "customer"     $orders = Order::find()->joinWith('customer')->orderBy('customer.id, order.id')->all(); //   ,    .    "books"     $orders = Order::find()->innerJoinWith('books')->all(); 


рдпрд╣ GridView рдореЗрдВ рд╕рдВрдмрдВрдзрд┐рдд рдХреЙрд▓рдо рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рддреЗ рд╕рдордп рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рдЙрдкрдпреЛрдЧреА рд╣реИред рдЕрдм, joinWith() рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ, рдЙрди рдкрд░ joinWith() рдпрд╛ рдлрд╝рд┐рд▓реНрдЯрд░ рдХрд░рдирд╛ рдмрд╣реБрдд рдЖрд╕рд╛рди рд╣реИред

рдбреЗрдЯрд╛ рдкреНрд░рдХрд╛рд░ рд░реВрдкрд╛рдВрддрд░рдг


ActiveRecord рдЕрдм рдбреЗрдЯрд╛рдмреЗрд╕ рд╕реЗ рдкреНрд░рд╛рдкреНрдд рдбреЗрдЯрд╛ рдХреЛ рд╕рдВрдмрдВрдзрд┐рдд рдкреНрд░рдХрд╛рд░реЛрдВ рдореЗрдВ рдкрд░рд┐рд╡рд░реНрддрд┐рдд рдХрд░рддрд╛ рд╣реИред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдпрджрд┐ рдЖрдкрдХреЗ рдкрд╛рд╕ рдбреЗрдЯрд╛рдмреЗрд╕ рдореЗрдВ type integer рдХрд╛ рдПрдХ рд╕реНрддрдВрдн рд╣реИ, рддреЛ рд╕рдВрдмрдВрдзрд┐рдд ActiveRecord рдЙрджрд╛рд╣рд░рдг рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж, type PHP рдореЗрдВ рдЯрд╛рдЗрдк integer рдХрд╛ рд╣реЛрдЧрд╛ред

рдЦреЛрдЬ


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

 $query = User::find()->filterWhere([ 'name' => Yii::$app->request->get('name'), 'email' => Yii::$app->request->get('email'), ]); 


рдмреИрдЪ рдЕрдиреБрд░реЛрдз


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

 use yii\db\Query; $query = (new Query()) ->from('user') ->orderBy('id'); foreach ($query->batch() as $users) { // $users тАФ   100      user } // ,         foreach ($query->each() as $user) { // $user тАФ      user } 


рдЖрдк ActiveRecord рдХреЗ рд╕рд╛рде рдмреИрдЪ рдкреНрд░рд╢реНрдиреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:

 //   10    foreach (Customer::find()->batch(10) as $customers) { // $customers тАФ  10    Customer } //   10   ,    foreach (Customer::find()->each(10) as $customer) { // $customer тАФ  Customer } //      foreach (Customer::find()->with('orders')->each() as $customer) { } 


рдЙрдкрд╢рдо рд╕рд╣рд╛рдпрддрд╛


рдиреЗрд╕реНрдЯреЗрдб рдХреНрд╡реЗрд░реА рдХреЗ рд▓рд┐рдП рд╕рдорд░реНрдерди рдХреНрд╡реЗрд░реА рдмрд┐рд▓реНрдбрд░ рдореЗрдВ рдЬреЛрдбрд╝рд╛ рдЧрдпрд╛ рд╣реИред рдЖрдк рдПрдХ Query рдХреЛ рдПрдХ рдирд┐рдпрдорд┐рдд Query рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЗ рд░реВрдк рдореЗрдВ рд▓рд┐рдЦ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рдлрд┐рд░ рдЗрд╕реЗ рдХрд┐рд╕реА рдЕрдиреНрдп Query рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:

 $subQuery = (new Query())->select('id')->from('user')->where('status=1'); $query->select('*')->from(['u' => $subQuery]); 


рдлреАрдбрдмреИрдХ


рд▓рд┐рдВрдХ рдЕрдХреНрд╕рд░ рдЬреЛрдбрд╝реЗ рдЬрд╛ рд╕рдХрддреЗ рд╣реИрдВред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, Customer рдореЗрдВ Order рд╕рдВрдмрдВрдз рд╣реЛ рд╕рдХрддрд╛ рд╣реИ; Order customer рд╕рдВрдмрдВрдз рд╣реЛ рд╕рдХрддрд╛ рд╣реИред рдиреАрдЪреЗ рджрд┐рдП рдЧрдП рдЙрджрд╛рд╣рд░рдг рдореЗрдВ, рдЖрдк рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рдСрд░реНрдбрд░ рдХрд╛ customer рдореВрд▓ рдХреЗ рд▓рд┐рдП рд╕рдорд╛рди рдСрдмреНрдЬреЗрдХреНрдЯ рдирд╣реАрдВ рд╣реИ, рдХреЗ рд▓рд┐рдП
рдЬреЛ рдЖрджреЗрд╢ рдорд╛рдВрдЧреЗ рдЧрдП рд╣реИрдВред customer->orders рдмреБрд▓рд╛рдирд╛- customer->orders рдкрд░рд┐рдгрд╛рдорд╕реНрд╡рд░реВрдк рдПрдХ рдирдИ SQL рдХреНрд╡реЗрд░реА рдорд┐рд▓реЗрдЧреА, рдареАрдХ рдЙрд╕реА рддрд░рд╣ рдЬреИрд╕реЗ рдХрд┐ customer рдЖрджреЗрд╢:

 // SELECT * FROM customer WHERE id=1 $customer = Customer::findOne(1); // echoes "not equal" // SELECT * FROM order WHERE customer_id=1 // SELECT * FROM customer WHERE id=1 if ($customer->orders[0]->customer === $customer) { echo 'equal'; } else { echo 'not equal'; } 


рдЕрдирд╛рд╡рд╢реНрдпрдХ SQL рдХреНрд╡реЗрд░реА рд╕реЗ рдмрдЪрдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдк customer рдФрд░ orders рд▓рд┐рдП рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдХреА рдШреЛрд╖рдгрд╛ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдпрд╣ inverseOf() рд╡рд┐рдзрд┐ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ:

 class Customer extends ActiveRecord { // ... public function getOrders() { return $this->hasMany(Order::className(), ['customer_id' => 'id'])->inverseOf('customer'); } } 


рдЕрдм, рдпрджрд┐ рд╣рдо рдЙрдкрд░реЛрдХреНрдд рдХреЛрдб рдХреЛ рдлрд┐рд░ рд╕реЗ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рд╣рдореЗрдВ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдорд┐рд▓рддреЗ рд╣реИрдВ:

 // SELECT * FROM customer WHERE id=1 $customer = Customer::findOne(1); // echoes "equal" // SELECT * FROM order WHERE customer_id=1 if ($customer->orders[0]->customer === $customer) { echo 'equal'; } else { echo 'not equal'; } 


рд░рд┐рд▓реЗрд╢рдирд▓ рдХреНрд╡реЗрд░реА рдХреЗ рд▓рд┐рдП рдпреВрдирд┐рдлрд╝реЙрд░реНрдо рдПрдкреАрдЖрдИ


ActiveRecord рдореЗрдВ рдЕрд▓реНрдлрд╛ 2.0 рдореЗрдВ, рд╣рдордиреЗ рджреЛрдиреЛрдВ рд░рд┐рд▓реЗрд╢рдирд▓ (рдЬреИрд╕реЗ MySQL) рдХреЗ рд▓рд┐рдП рд╕рдорд░реНрдерди рд▓рд╛рдЧреВ рдХрд┐рдпрд╛, рдЗрд╕рд▓рд┐рдП
рдФрд░ noSQL (рдЬреИрд╕реЗ рд░реЗрдбрд┐рд╕, рдЗрд▓рд╛рд╕реНрдЯрд┐рдХреНрд╕ рдЦреЛрдЬ, рдореЛрдВрдЧреЛрдбреАрдмреА) рдбреЗрдЯрд╛ рд╕реНрдЯреЛрд░ред рдмреАрдЯрд╛ рдореЗрдВ, рд╣рдордиреЗ рдЗрд╕ рдХреЛрдб рдХреЛ рдлрд┐рд░ рд╕реЗ рдмрдирд╛рдпрд╛ рдФрд░ рдЗрдВрдЯрд░рдлреЗрд╕ рдХреА рдЕрдзрд┐рдХ рдПрдХрд░реВрдкрддрд╛ рд╣рд╛рд╕рд┐рд▓ рдХреАред рдЕрд░реНрдерд╛рддреН, ActiveRelation рдХреЛ рд╣рдЯрд╛ рджрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛, рдФрд░ ActiveQuery рд░рд┐рд╢реНрддреЛрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдкреНрд░рд╢реНрдиреЛрдВ рдХреЛ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░рдиреЗ рдФрд░ рд░рд┐рд╢реНрддреЛрдВ рдХрд╛ рд╡рд░реНрдгрди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдПрдХрд▓ рдкреНрд░рд╡рд┐рд╖реНрдЯрд┐ рдмрд┐рдВрджреБ рдмрди рдЧрдпрд╛ред рд╣рдордиреЗ ActiveRecord::findOne() рдФрд░ findAll() рд╡рд┐рдзрд┐рдпреЛрдВ рдХреЛ рднреА рдЬреЛрдбрд╝рд╛ред
рдпреЗ рд╡рд┐рдзрд┐рдпрд╛рдБ рдЖрдкрдХреЛ рд▓рдШреБ рд╕рд┐рдВрдЯреИрдХреНрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдХреБрдВрдЬреА рдпрд╛ рд╕реНрддрдВрдн рдорд╛рди рдкрд░ рдХреНрд╡реЗрд░реА рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддреА рд╣реИрдВред рдкрд╣рд▓реЗ, рдпрд╣ ActiveRecord::find() рд╡рд┐рдзрд┐ рдХреЗ рдорд╛рдкрджрдВрдбреЛрдВ рдХреЗ рд╕рд╛рде рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рдерд╛, рдЬреЛ рд╡рд┐рднрд┐рдиреНрди рдбреЗрдЯрд╛ рдкреНрд░рдХрд╛рд░реЛрдВ рдХреЛ рд╡рд╛рдкрд╕ рдХрд░рдиреЗ рдХреА рд╡рд┐рдзрд┐ рдХреЗ рдХрд╛рд░рдг рднреНрд░рдо рдкреИрджрд╛ рдХрд░рддрд╛ рдерд╛ред

AJAX рдХрд╛ рд╕рдорд░реНрдерди


рд╣рдордиреЗ рдЙрддреНрдХреГрд╖реНрдЯ Pjax рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХрд╛ рдирд┐рд░реНрдгрдп рд▓рд┐рдпрд╛ рдФрд░ yii yii\widgets\Pjax ред рдпрд╣ рдПрдХ рд╕рд╛рдорд╛рдиреНрдп рд╡рд┐рдЬреЗрдЯ рд╣реИ рдЬреЛ рдЖрдкрдХреЛ AJAX рдХреЛ рд╣рд░ рдЙрд╕ рдЪреАрдЬрд╝ рд╕реЗ рдЬреЛрдбрд╝рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ рдЬреЛ рдЗрд╕рдореЗрдВ рд▓рд┐рдкрдЯреА рд╣реБрдИ рд╣реИред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдЖрдк рдЗрд╕рдореЗрдВ рдПрдХ GridView рд▓рдкреЗрдЯ рд╕рдХрддреЗ рд╣реИрдВ
рдкреГрд╖реНрда-рджрд░-рдкреГрд╖реНрда рдиреЗрд╡рд┐рдЧреЗрд╢рди рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдФрд░ рдкреГрд╖реНрда рдХреЛ рдлрд┐рд░ рд╕реЗ рд▓реЛрдб рдХрд┐рдП рдмрд┐рдирд╛ рдХреНрд░рдордмрджреНрдз рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП:

 use yii\widgets\Pjax; use yii\grid\GridView; Pjax::begin(); echo GridView::widget([ /*...*/ ]); Pjax::end(); 


рдЕрдиреБрд░реЛрдз рдФрд░ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛


рдХрдИ рдЖрдВрддрд░рд┐рдХ рд╕реБрдзрд╛рд░реЛрдВ рдФрд░ рд╕реБрдзрд╛рд░реЛрдВ рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдЕрдиреБрд░реЛрдз рдФрд░ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдШрдЯрдХреЛрдВ рдореЗрдВ рдХрдИ рдкрд░рд┐рд╡рд░реНрддрди рд╣реБрдП рд╣реИрдВред рд╕рдмрд╕реЗ рдЙрд▓реНрд▓реЗрдЦрдиреАрдп рдмрд╛рдд рдпрд╣ рд╣реИ рдХрд┐ рдЕрдиреБрд░реЛрдз рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдирд╛ рдЕрдм рдЗрд╕ рддрд░рд╣ рджрд┐рдЦрддрд╛ рд╣реИ:

 //  GET   request,    ,   1 $page = Yii::$app->request->get('page', 1); //  POST   request,    ,   null $name = Yii::$app->request->post('name'); 


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

рдЕрдиреБрд░реЛрдз рд╡рд░реНрдЧ рдЕрдм JSON рдЬреИрд╕реЗ рд╡рд┐рднрд┐рдиреНрди рд╕реНрд╡рд░реВрдкреЛрдВ рдореЗрдВ рдЕрдиреБрд░реЛрдз рдирд┐рдХрд╛рдп рдХреЛ рдкрд╛рд░реНрд╕ рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реИред

рдлрд┐рд▓реНрдЯрд░


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

рдХреЛрдб рдХреЛ рдкреБрдирд░реНрдЧрдард┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ рдФрд░ рдлрд╝рд┐рд▓реНрдЯрд░ рдЕрдм yii\filters рдирд╛рдорд╕реНрдерд╛рди рдореЗрдВ рд╣реИрдВред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдЖрдк HTTP рдмреЗрд╕рд┐рдХ рдкреНрд░рдорд╛рдгреАрдХрд░рдг рдХреЛ рд╕рдХреНрд╖рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП yii\filters\HttpBasicAtuh рдлрд╝рд┐рд▓реНрдЯрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдпрд╣ рдирд┐рдпрдВрддреНрд░рдХ рдпрд╛ рдореЙрдбреНрдпреВрд▓ рдореЗрдВ рд╡рд░реНрдгрд┐рдд рд╣реИ:

 public function behaviors() { return [ 'basicAuth' => [ 'class' => \yii\filters\auth\HttpBasicAuth::className(), 'exclude'=> ['error'], //    action "error" ], ]; } 


рдШрдЯрдХ рдкреНрд░рд╛рд░рдВрднрд┐рдХ


рд╣рдордиреЗ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдЬреАрд╡рди рдЪрдХреНрд░ рдореЗрдВ рдПрдХ рдорд╣рддреНрд╡рдкреВрд░реНрдг рдЖрд░рдВрднреАрдХрд░рдг рдЪрд░рдг ("рдмреВрдЯрд╕реНрдЯреНрд░реИрдк") рдкреЗрд╢ рдХрд┐рдпрд╛ред рдПрдХреНрд╕рдЯреЗрдВрд╕рд░реНрд╕ рдмреВрдЯрд╕реНрдЯреНрд░реИрдк рдХреНрд▓рд╛рд╕реЗрд╕ рдХреЛ рдХрдВрдкреЛрдЬрд╝рд░.рдЬреЙрди рдореЗрдВ рдШреЛрд╖рд┐рдд рдХрд░рдХреЗ рд░рдЬрд┐рд╕реНрдЯрд░ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдПрдХ рдирд┐рдпрдорд┐рдд рдШрдЯрдХ рдХреЛ рдмреВрдЯрд╕реНрдЯреНрд░реИрдк рдХреЗ рд▓рд┐рдП рдкрдВрдЬреАрдХреГрдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ рдпрджрд┐ Application::$bootstrap рдореЗрдВ рдШреЛрд╖рд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ Application::$bootstrap ред

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

URL рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░реЗрдВ


рдЪреВрдВрдХрд┐ рдбреЗрд╡рд▓рдкрд░ URL рдХреЗ рд╕рд╛рде рдмрд╣реБрдд рдХрд╛рдо рдХрд░рддреЗ рд╣реИрдВ, рдЗрд╕рд▓рд┐рдП рд╣рдордиреЗ рдпреВрдЖрд░рдПрд▓-рд╕рдВрдмрдВрдзреА рд╡рд┐рдзрд┐рдпреЛрдВ рдореЗрдВ рд╕реЗ рдЕрдзрд┐рдХрд╛рдВрд╢ рдХреЛ Url рд╕рд╣рд╛рдпрдХ рдореЗрдВ рдЦреАрдВрдЪ рд▓рд┐рдпрд╛ рдФрд░ рдЕрдзрд┐рдХ рд╕реБрдЦрдж рдкрд░рд┐рдгрд╛рдо рдкреНрд░рд╛рдкреНрдд рдХрд┐рдпрд╛:

 use yii\helpers\Url; //    // : /index.php?r=management/default/users echo Url::to(''); //   ,  action // : /index.php?r=management/default/page&id=contact echo Url::toRoute(['page', 'id' => 'contact']); //   ,    action // : /index.php?r=management/post/index echo Url::toRoute('post/index'); //      ,     // : /index.php?r=site/index echo Url::toRoute('/site/index'); // url    `actionHiTech`   // : /index.php?r=management/default/hi-tech echo Url::toRoute('hi-tech'); // url  action     , `DateTimeController::actionFastForward` // : /index.php?r=date-time/fast-forward&id=105 echo Url::toRoute(['/date-time/fast-forward', 'id' => 105]); //  URL  alias Yii::setAlias('@google', 'http://google.com/'); echo Url::to('@google/?q=yii'); //   URL    // : /index.php?r=management/default/users echo Url::canonical(); //   URL // : /index.php?r=site/index echo Url::home(); Url::remember(); //  URL Url::previous(); //   URL 


URL рдирд┐рдпрдореЛрдВ рдореЗрдВ рднреА рд╕реБрдзрд╛рд░ рд╣реИрдВред рдЖрдк рд╕рдореВрд╣ рдирд┐рдпрдореЛрдВ рдХреЗ рд▓рд┐рдП рдирдП yii\web\GroupUrlRule рд╡рд░реНрдЧ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдкреНрд░рддреНрдпреЗрдХ рд╕рдореВрд╣ рдХреЗ рд▓рд┐рдП, рдЖрдк рдПрдХ рд╕рд╛рдорд╛рдиреНрдп рдЙрдкрд╕рд░реНрдЧ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдЬреЛ рд╕рдореВрд╣ рдХреЗ рд╕рднреА URL рдкрд░ рд▓рд╛рдЧреВ рд╣реЛрдЧрд╛ред

 new GroupUrlRule([ 'prefix' => 'admin', 'rules' => [ 'login' => 'user/login', 'logout' => 'user/logout', 'dashboard' => 'default/dashboard', ], ]); //    : [ 'admin/login' => 'admin/user/login', 'admin/logout' => 'admin/user/logout', 'admin/dashboard' => 'admin/default/dashboard', ] 


рднреВрдорд┐рдХрд╛ рдЖрдзрд╛рд░рд┐рдд рдЕрднрд┐рдЧрдо рдирд┐рдпрдВрддреНрд░рдг (RBAC)


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

рдЬреИрд╕рд╛ рдХрд┐ рдКрдкрд░ рдЙрд▓реНрд▓реЗрдЦ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдирдпрд╛ рд╕реНрд╡рд░реВрдк рдФрд░ рдирд┐рдпрдо рдирд┐рдпрдо рд╣реИред рдЕрдм рдирд┐рдпрдо рдЕрд▓рдЧ-рдЕрд▓рдЧ рд╡рд░реНрдЧреЛрдВ рдореЗрдВ рд╡рд░реНрдгрд┐рдд рд╣реИрдВред

рдЕрдиреБрд╡рд╛рдж


рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рд╣рдо рдЙрди рд╕рднреА рд╕рд╛рдореБрджрд╛рдпрд┐рдХ рд╕рджрд╕реНрдпреЛрдВ рдХреЛ рдзрдиреНрдпрд╡рд╛рдж рдХрд╣рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ рдЬрд┐рдиреНрд╣реЛрдВрдиреЗ рдлреНрд░реЗрдорд╡рд░реНрдХ рд╕рдВрджреЗрд╢реЛрдВ рдХреЗ рдЕрдиреБрд╡рд╛рдж рдореЗрдВ рднрд╛рдЧ рд▓рд┐рдпрд╛ред рдлрд┐рд▓рд╣рд╛рд▓ рдЙрдирдХрд╛ 26 рднрд╛рд╖рд╛рдУрдВ рдореЗрдВ рдЕрдиреБрд╡рд╛рдж рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред рдЕрдЪреНрдЫреА рд╕рдВрдЦреНрдпрд╛ рд╣реИ, рд╣реИ рдирд╛?

рд╕рдВрджреЗрд╢ рдЕрдиреБрд╡рд╛рдж рдШрдЯрдХ рдЕрдм рдПрдХ рд╡реИрдХрд▓реНрдкрд┐рдХ рд╕реНрд░реЛрдд рд╕реЗ рд╕рдВрджреЗрд╢ рд▓реЗрдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░рддрд╛ рд╣реИ рдпрджрд┐ рдЙрдкрдпреЛрдЧ рдХрд┐рдП рдЧрдП рдореЗрдВ рд╡рд╛рдВрдЫрд┐рдд рд╕рдВрджреЗрд╢ рд╢рд╛рдорд┐рд▓ рдирд╣реАрдВ рд╣реИред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдпрджрд┐ рдЖрдкрдХрд╛ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХрд┐рд╕реА рднрд╛рд╖рд╛ рдХреЗ рд░реВрдк рдореЗрдВ fr-CA рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ, рдФрд░ рдЕрдиреБрд╡рд╛рдж рдХреЗрд╡рд▓ fr , рддреЛ Yii рдкрд╣рд▓реЗ fr-CA рдореЗрдВ рдЕрдиреБрд╡рд╛рдж рдХреА рддрд▓рд╛рд╢ рдХрд░реЗрдЧрд╛ рдФрд░, рдпрджрд┐ рдпрд╣ рд╡рд╣рд╛рдВ рдирд╣реАрдВ рдкрд╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рдЦреЛрдЬ рдЬрд╛рд░реА рд░рд╣реЗрдЧреАред

Gii рдХреЛрдб рдЬрдирд░реЗрдЯрд░ рдореЗрдВ рдПрдХ рдирдпрд╛ рд╡рд┐рдХрд▓реНрдк рдЬреЛрдбрд╝рд╛ рдЧрдпрд╛ рд╣реИ рдЬреЛ рдЖрдкрдХреЛ Yii::t() рдореЗрдВ рд▓рд┐рдкрдЯреЗ рд╕рдВрджреЗрд╢реЛрдВ рдХреЗ рд╕рд╛рде рдХреЛрдб рдЙрддреНрдкрдиреНрди рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред

рдЕрдиреБрд╡рд╛рдж рдЦреЛрдЬ рдЯреАрдо рдиреЗ .po рдФрд░ рдбреЗрдЯрд╛рдмреЗрд╕ рдореЗрдВ рддрд╛рд░ рд▓рд┐рдЦрдирд╛ рд╕реАрдЦрд╛ред

рдПрдХреНрд╕рдЯреЗрдВрд╢рди рдФрд░ рдЙрдкрдХрд░рдг


рд╣рдордиреЗ yii2-apidoc рдкреНрд░рд▓реЗрдЦрди рдЬрдирд░реЗрдЯрд░ рдПрдХреНрд╕рдЯреЗрдВрд╢рди рдХреЛ рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рд╣реИ, рдЬрд┐рд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдПрдкреАрдЖрдИ рдкреНрд░рд▓реЗрдЦрди рдФрд░ yii2-apidoc рд╕реЗ рдореБрдЦреНрдп рджрд╕реНрддрд╛рд╡реЗрдЬ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдЬрдирд░реЗрдЯрд░ рдЖрд╕рд╛рдиреА рд╕реЗ рдЕрдиреБрдХреВрд▓рди рдпреЛрдЧреНрдп рд╣реИ рдФрд░ рдЖрдкрдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛рдУрдВ рддрдХ рд╡рд┐рд╕реНрддрд╛рд░рд┐рдд рд╣реЛрддрд╛ рд╣реИред рд╣рдо рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдЖрдзрд┐рдХрд╛рд░рд┐рдХ рджрд╕реНрддрд╛рд╡реЗрдЬ рдФрд░ рдПрдкреАрдЖрдИ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд░рддреЗ рд╣реИрдВред рдЖрдк рдпрд╣рд╛рдБ рдкрд░рд┐рдгрд╛рдо рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ: http://www.yiiframework.com/doc-2.0/ ред

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

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

рдзрдиреНрдпрд╡рд╛рдж!



Yii 2.0 рдХрд╛ рдмреАрдЯрд╛ рд╕рдВрд╕реНрдХрд░рдг рдПрдХ рдкреНрд░рдореБрдЦ рдореАрд▓ рдХрд╛ рдкрддреНрдерд░ рд╣реИ рдЬрд┐рд╕реЗ рдорд╣рд╛рди рд╕рдВрдпреБрдХреНрдд рдкреНрд░рдпрд╛рд╕реЛрдВ рдХреЗ рд╕рд╛рде рд╣рд╛рд╕рд┐рд▓ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред рд╣рдо рдЕрдкрдиреЗ рдЕрджреНрднреБрдд рд╕рдореБрджрд╛рдп рд╕реЗ рдкреНрд░рд╛рдкреНрдд рдореВрд▓реНрдпрд╡рд╛рди рдХреЛрдб рдХреА рдПрдХ рдмрдбрд╝реА рд░рд╛рд╢рд┐ рдХреЗ рдмрд┐рдирд╛ рд╕рдлрд▓ рдирд╣реАрдВ рд╣реЛрдВрдЧреЗред
рд░рд┐рд▓реАрдЬ рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рджред

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


All Articles