рд╣реИрд▓реЛ, рдкреНрд░рд┐рдп Habrausers!
рдЬреИрд╕рд╛ рдХрд┐ рдЖрдк рдкрд╣рд▓реЗ рд╣реА рд╢реАрд░реНрд╖рдХ рд╕реЗ рд╕рдордЭ рдЪреБрдХреЗ рд╣реИрдВ, рдпрд╣ рд▓реЗрдЦ Yii рдХреЗ рдирдП рд╕рдВрд╕реНрдХрд░рдг рдкрд░ рдЪрд░реНрдЪрд╛ рдХрд░реЗрдЧрд╛ред рдореИрдВ рд╕рдВрдХреНрд╖реЗрдк рдореЗрдВ, рдПрдХ рдЬреАрд╡рд┐рдд рдЙрджрд╛рд╣рд░рдг рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ, рдЖрдкрдХреЛ рдЕрджреНрднреБрдд Yii 2 рд╕реЗ рдкрд░рд┐рдЪрд┐рдд рдХрд░рд╛рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░реВрдВрдЧрд╛ред
рд╢рд╛рдпрдж рдмреНрд▓реЙрдЧ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдкреВрд░реНрдг рдирд┐рд░реНрджреЗрд╢ рд▓рд┐рдЦрдиреЗ рдХрд╛ рдХреЛрдИ рдорддрд▓рдм рдирд╣реАрдВ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдХрдИ рдЪрд░рдг рдкрд╣рд▓реЗ рд╕рдВрд╕реНрдХрд░рдг рдХреЗ рд╕рдорд╛рди рд╣реИрдВ, рд▓реЗрдХрд┐рди рдореИрдВ рдЙрди рдмрд╛рд░реАрдХрд┐рдпреЛрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд▓рд┐рдЦреВрдВрдЧрд╛ рдЬреЛ рдЕрд▓рдЧ-рдЕрд▓рдЧ рд╣реИрдВ, рдФрд░ рдореИрдВ рдирдП Yii2 рдкрд░ рдзреНрдпрд╛рди рдХреЗрдВрджреНрд░рд┐рдд рдХрд░реВрдВрдЧрд╛ рдЬреЛ рдореИрдВрдиреЗ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдмрдирд╛рдиреЗ рдХреА рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдореЗрдВ рджреЗрдЦрд╛ рдерд╛ред рдмрд╛рдХреА рд╕рднреА, рдЖрдк
рдбреЗрдореЛ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдореЗрдВ рдЬрд▓реНрджреА рд╕реЗ рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ, рдЬреЛ, рд╢рд╛рдпрдж, рдХреЗрд╡рд▓ рд▓рд┐рдЦрд┐рдд рдкрд╛рда рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рдЕрдзрд┐рдХ рдкреНрд░рднрд╛рд╡реА рд╣реЛрдЧрд╛ред
рд╣рд╛рдЗрд▓рд╛рдЗрдЯ
Yii2 рдореЗрдВ, рдЬреИрд╕рд╛ рдХрд┐ рдЖрдкрдиреЗ рдкрд╣рд▓реЗ рд╣реА рджреЗрдЦрд╛ рдерд╛, рд╕рдм рдХреБрдЫ рдиреЗрдорд╕реНрдкреЗрд╕ рдкрд░ рдмрдирд╛рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдпрд╣ рд╢рд╛рдпрдж рдирдП рд╕рдВрд╕реНрдХрд░рдг рдореЗрдВ рдореБрдЦреНрдп "рд╣рд╛рдЗрд▓рд╛рдЗрдЯ" рд╣реИред
рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛ рдПрдХ рдмрд╣реБрдд рдорд╣рддреНрд╡рдкреВрд░реНрдг рдмрд┐рдВрджреБ: рдлрд╝рд╛рдЗрд▓ рдирд╛рдореЛрдВ рд╕реЗ "C" рдЙрдкрд╕рд░реНрдЧ рд╣рдЯрд╛ рджрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред
рдкрд╣рд▓реЗ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдЗрдВрд╕реНрдЯреЙрд▓ рдХрд░реЗрдВ рдФрд░ рдмрдирд╛рдПрдВ
рдЖрдзрд╛рд░ рдХреЗ рд░реВрдк рдореЗрдВ, рд╣рдо рдореВрд▓ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВрдЧреЗред
рдЗрд╕реЗ рдХреИрд╕реЗ рд╕реНрдерд╛рдкрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдП, рдпрд╣
рдЧреАрдереВрдм рдкрд░ рдмрд╣реБрдд рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ рд╡рд░реНрдгрд┐рдд рд╣реИ, рдЗрд╕рд▓рд┐рдП рддреБрд░рдВрдд рдЕрдЧрд▓реЗ рдмрд┐рдВрджреБрдУрдВ рдкрд░ рдЬрд╛рдПрдВред
рдЕрдиреБрдкреНрд░рдпреЛрдЧ рд╕рдВрд░рдЪрдирд╛
рдПрдХ рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдореИрдВрдиреЗ рдПрдХ рдореЙрдбреНрдпреВрд▓рд░ рд╕рдВрд░рдЪрдирд╛ рдХреЛ рдЪреБрдирд╛ред рдпрд╣ рд╣рдореЗрдВ Yii2 рдореЗрдВ рдореЙрдбреНрдпреВрд▓ рдХреЗ рд╕рдВрдЪрд╛рд▓рди рдХреЗ рд╕рд┐рджреНрдзрд╛рдВрдд рдХреЛ рд╕реАрдЦрдиреЗ рдФрд░ рд╕рдордЭрдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрдЧрд╛ред
рдЗрд╕рд▓рд┐рдП, рдЗрд╕ рддрд░рд╣ рдХреА рд╕рдВрд░рдЪрдирд╛ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдореЗрдВ, рдкрд╣рд▓реЗ рд╕рдВрд╕реНрдХрд░рдг рдореЗрдВ, рд╕рднреА рдореЙрдбреНрдпреВрд▓ рдХреЗ рдореБрдЦреНрдп рдлрд╝реЛрд▓реНрдбрд░ рдХреЛ рдмрдирд╛рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рдЬрд┐рд╕рдореЗрдВ рд╣рдо рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдЕрд▓рдЧ-рдЕрд▓рдЧ рдореЙрдбреНрдпреВрд▓ рдХреЗ рд▓рд┐рдП рдЕрд▓рдЧ-рдЕрд▓рдЧ рдлрд╝реЛрд▓реНрдбрд░ рдмрдирд╛рдПрдВрдЧреЗред рдпрд╣ рд╕рдм, рдЬреИрд╕рд╛ рдХрд┐ рдкрд╣рд▓реЗ рд╕рдВрд╕реНрдХрд░рдг рдореЗрдВ рд╣реИред
рдХреЗрд╡рд▓ рдПрдХ рдЪреАрдЬ рдЬреЛ рдореЙрдбреНрдпреВрд▓ рдореЗрдВ рдмрджрд▓ рдЧрдИ рд╣реИ, рд╡рд╣ рдореЙрдбреНрдпреВрд▓ рдХреЗ рдореБрдЦреНрдп рд╡рд░реНрдЧ рдХрд╛ рдирд╛рдо рд╣реИред рдЬреИрд╕рд╛ рдХрд┐ рдореИрдВрдиреЗ рдЗрд╕реЗ рд╕рдордЭрд╛, рдЕрдм рдкреНрд░рддреНрдпрдп "рдореЙрдбреНрдпреВрд▓" рд▓рд┐рдЦрдирд╛ рдЖрд╡рд╢реНрдпрдХ рдирд╣реАрдВ рд╣реИ, рдЗрд╕рд▓рд┐рдП рд╣рдорд╛рд░реА рдореБрдЦреНрдп рдлрд╝рд╛рдЗрд▓реЛрдВ рдореЗрдВ рдмрд┐рдирд╛ рдкреНрд░рддреНрдпрдп рдХреЗ рд╕реНрдкрд╖реНрдЯ рдирд╛рдо рд╣реЛрдВрдЧреЗред
рдПрдХ рдЙрджрд╛рд╣рд░рдг:Site.php, Users.php, Blogs.php, рдЖрджрд┐ред
рдЖрдк рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рддреИрдпрд╛рд░ рдЙрджрд╛рд╣рд░рдг рдХреЗ рд╕рд╛рде рд╕рдВрд░рдЪрдирд╛ рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ, рдФрд░ рдЕрдм рдЗрд╕ рдкрд░ рдирд┐рд╡рд╛рд╕ рдХрд░рдиреЗ рдХрд╛ рдХреЛрдИ рдорддрд▓рдм рдирд╣реАрдВ рд╣реИред
рдЕрдиреБрдкреНрд░рдпреЛрдЧ рд╕реЗрдЯрд┐рдВрдЧреНрд╕: config / main.php
Yii 1.0 рдХреЗ рд░реВрдк рдореЗрдВ, рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЛ main.php рдлрд╝рд╛рдЗрд▓ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдФрд░ рдХрдИ рддрддреНрд╡ рдЕрдкрд░рд┐рд╡рд░реНрддрд┐рдд рд░рд╣рддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдлрд┐рд░ рднреА рдХрдИ рдирд╛рдорд╛рдВрдХрд┐рдд рдкреИрд░рд╛рдореАрдЯрд░ рд╣реИрдВ, рдЬрд┐рдиреНрд╣реЗрдВ рдпрд╣ рдпрд╛рдж рд░рдЦрдирд╛ рдЪрд╛рд╣рд┐рдП рдХрд┐ рдХреНрдпрд╛ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдХреЗ рдмрд╛рдж рдХрд╛рдо рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИред
рдРрд╕реЗ рдкрд░рд┐рд╡рд░реНрддрдиреЛрдВ рдФрд░ рд╕реБрд╡рд┐рдзрд╛рдУрдВ рдХреЗ рдХреБрдЫ рдЙрджрд╛рд╣рд░рдг:рдХрд┐рд╕реА рднреА рдкреИрд░рд╛рдореАрдЯрд░ рдХреА рдЕрдХреНрд╖рдорддрд╛ рдХреЗ рдорд╛рдорд▓реЗ рдореЗрдВ, рдЖрдк рдЖрд╕рд╛рдиреА рд╕реЗ рдлреНрд░реЗрдо рдХреЗ рд╕реНрд░реЛрдд рдХреЛрдб рдореЗрдВ рд╕рдм рдХреБрдЫ рдЬрд╛рд╕реВрд╕реА рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
рдПрдХ рдмрд╛рд░ рдЬрдм рд╣рдо рдЕрдкрдирд╛ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рд╕реЗрдЯ рдХрд░ рд▓реЗрддреЗ рд╣реИрдВ рдФрд░ рдЕрдкрдиреЗ рдореЙрдбреНрдпреВрд▓ рдореЗрдВ рдкреНрд▓рдЧ рдЗрди рдХрд░ рд▓реЗрддреЗ рд╣реИрдВ, рддреЛ рд╣рдо рдЕрдкрдирд╛ "CRUD" рд▓рд┐рдЦрдирд╛ рд╢реБрд░реВ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
CRUD
рдПрдХ рд╡рд┐рд╕реНрддреГрдд рдЙрджрд╛рд╣рд░рдг рдбреЗрдореЛ рдХреЛрдб рдореЗрдВ рд╣реИ, рд▓реЗрдХрд┐рди рдИрдорд╛рдирджрд╛рд░ рд╣реЛрдиреЗ рдХреЗ рд▓рд┐рдП, рдкрд╣рд▓реЗ рд╕рдВрд╕реНрдХрд░рдг рд╕реЗ рдХреЛрдИ рдордЬрдмреВрдд рдЕрдВрддрд░ рдирд╣реАрдВ рд╣реИред рдПрдХрдорд╛рддреНрд░ рдирдИ рдЪреАрдЬ рджрд┐рдЦрд╛рдИ рджреА рд╣реИ рдЬреЛ рдкрд╣рд▓реЗ рдирд┐рдпрдВрддреНрд░рдХ рдХреА рд╡рд┐рдзрд┐ рд╣реИ: рдкреЙрдкреНрдпреБрд▓реЗрдЯ (), рдЬрд┐рд╕реЗ рд╣рд╛рд▓ рд╣реА рдореЗрдВ рдореЙрдбрд▓ рдореЗрдВ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ рдФрд░ рд▓реЛрдб рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдирд╛рдорд╛рдВрдХрд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ ()ред
рдПрдХ рдЙрджрд╛рд╣рд░рдг: public function actionCreate() { $model = new Blog(); if ($model->load($_POST) && $model->save()) { return Yii::$app->response->redirect(array('view', 'id' => $model->id)); } else { echo $this->render('create', array('model' => $model)); } }
$model->load($_POST)
CRUD рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдореЗрдВ рдХреЛрдИ рдЕрдиреНрдп рд╡рд┐рд╢реЗрд╖ рдЕрдВрддрд░ рдирд╣реАрдВ рд╣реИрдВред
рдЖрджрд░реНрд╢
рдореБрдЦреНрдп рдирд╡рд╛рдЪрд╛рд░ рд╡рд┐рдзрд┐ рд╣реИ "рдкрд░рд┐рджреГрд╢реНрдпреЛрдВ () рдЬрд┐рд╕рдХреЗ рдХрд╛рд░рдг рдЖрдк рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдкрд░рд┐рджреГрд╢реНрдп рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рдореЙрдбрд▓ рд╕рддреНрдпрд╛рдкрдирдХрд░реНрддрд╛рдУрдВ рдХреЛ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
public function scenarios() { return array( 'backend' => array('email', 'role'), 'frontend' => array('email', '!name'), ); }
рдореЙрдбрд▓ formName () рдлрд╝рдВрдХреНрд╢рди рд╕реЗ рдмрдВрдзрд╛ рд╣реЛрддрд╛ рд╣реИ, рдЬреЛ рдЕрдВрддрддрдГ рдЙрд╕ рдореЙрдбрд▓ рдХреЗ рд╡рд░реНрдЧ рдХреЗ рдирд╛рдо рдХреЛ рд▓реМрдЯрд╛рддрд╛ рд╣реИ, рдЬрд┐рд╕рдХреЗ рдкрд╛рд╕ рдкреНрд░рдкрддреНрд░ рд╣реИред
рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдПрдХ рдорд╣рддреНрд╡рдкреВрд░реНрдг рдмрд┐рдВрджреБ - рдореЙрдбрд▓ () рд╣рдЯрд╛ рджрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛, рдФрд░ рдЕрдм рдореЙрдбрд▓ рдХреЗ рд╕рд╛рде рдХрд╛рдо рд╣реЛрддрд╛ рд╣реИ, рдЬреИрд╕рд╛ рдХрд┐ рдПрдХ рдЕрдиреНрдп рд╕рд╛рдзрд╛рд░рдг рд╡рд░реНрдЧ рдХреЗ рд╕рд╛рде рд╣реЛрддрд╛ рд╣реИ:
MyModel::getAuthor();
ActiveRecord
рдпрд╣рд╛рдВ рд╕рдм рдХреБрдЫ рдлрд┐рд░ рд╕реЗ рд▓рд┐рдЦрд╛ рдЧрдпрд╛ рдерд╛, рдЕрдм Yii2 рдореЗрдВ рдПрдХ рдирдпрд╛ рдПрдЖрд░, рдЬреЛ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдкреНрд░рд╕рдиреНрди рдХрд░рддрд╛ рд╣реИред
рдХрдИ рдирд╡рд╛рдЪрд╛рд░реЛрдВ рдХреЗ рдЙрджрд╛рд╣рд░рдг:"рд╕реНрдХреЛрдкреНрд╕ ()" рдХреЛ рдПрдЖрд░ рдореЙрдбрд▓ рдХреЗ рд╕рд╛рдорд╛рдиреНрдп рддрд░реАрдХреЛрдВ рд╕реЗ рдмрджрд▓ рджрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдЬреЛ рдЕрдм рдЗрд╕ рддрд░рд╣ рджрд┐рдЦрддреЗ рд╣реИрдВ:
public function active($query) { return $query->andWhere('status = ' . self::STATUS_ACTIVE); }
рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, "рд╕рдВрдмрдВрдз ()" рдореМрд▓рд┐рдХ рд░реВрдк рд╕реЗ рдмрджрд▓ рджрд┐рдП рдЧрдП рдереЗ, рдЬреЛ рдЕрдм рд╣реЗрдЯрд░реЛрд╕ рдХреЗ рд░реВрдк рдореЗрдВ рд╕реЗрдЯ рдХрд┐рдП рдЧрдП рд╣реИрдВ, рдЬреЛ рдЕрдзрд┐рдХ рд╕рд╣реА рд╣реИред рджреЛ рдкреНрд░рдХрд╛рд░ рдХреЗ рд╕рдВрдмрдВрдз рдЙрдкрд▓рдмреНрдз рд╣реИрдВ: "hasOne ()", "hasMany ()"ред
public function getAuthor() { return $this->hasOne('app\modules\users\models\User', array('id' => 'author_id'));
рдбреЗрдЯрд╛рдмреЗрд╕ рд╕реЗ рдЪрдпрди рдХреЗ рдХрд╛рд░реНрдпреЛрдВ рдХреЛ рднреА рдлрд┐рд░ рд╕реЗ рд▓рд┐рдЦрд╛ рдЧрдпрд╛ рдерд╛, рдФрд░ рдирдП рд▓реЛрдЧреЛрдВ рдХреЗ рд╕рд╛рде рдкреВрд░рдХ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред
$customers = Customer::find() ->where(array('status' => $active)) ->orderBy('id') ->all();
рдФрд░ рдЕрдВрдд рдореЗрдВ, AR рдЕрдм рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ "tableName ()" рдлрд╝рдВрдХреНрд╢рди рдХреЗ рдХрд╛рд░рдг рдбреЗрдЯрд╛рдмреЗрд╕ рдХреЛ рдореЙрдбрд▓ рдХреЛ рдмрд╛рдВрдзрддрд╛ рд╣реИ, рдЬреЛ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ рдРрд╕реЗ рдорд╛рди "tbl_MODEL_NAME" рджреЗрддрд╛ рд╣реИред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдореЙрдбрд▓ tbl_user рддрд╛рд▓рд┐рдХрд╛ рдХреЗ рд▓рд┐рдП рдмрд╛рдзреНрдп рд╣реЛрдЧрд╛ред рдпрджрд┐ рддрд╛рд▓рд┐рдХрд╛ рдХрд╛ рдирд╛рдо рдЕрд▓рдЧ рд╣реИ, рддреЛ рдЖрдк рдмрд╕ рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдУрд╡рд░рд░рд╛рдЗрдб рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
рдШрдЯрдирд╛рдУрдВ
рдирдП рд╕рдВрд╕реНрдХрд░рдг рдореЗрдВ, рдШрдЯрдирд╛рдУрдВ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдирд╛ рдпрдерд╛рд╕рдВрднрд╡ рд╕рд░рд▓ рд╣реЛ рдЧрдпрд╛ рд╣реИред рдбреЗрдореЛ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдореЗрдВ рдореИрдВрдиреЗ рдЕрдкрдиреЗ рд╕реНрд╡рдпрдВ рдХреЗ рдИрд╡реЗрдВрдЯ рдХрд╛ рдПрдХ рдЙрджрд╛рд╣рд░рдг рджрд┐рдпрд╛ - рдЬрдм рдПрдХ рдирдпрд╛ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдЬреЛрдбрд╝рддреЗ рд╣реИрдВ, рддреЛ рдИрд╡реЗрдВрдЯ рдХреЛ рдмрд╛рдж рдореЗрдВ рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИ (), рд╣рд╛рд▓рд╛рдВрдХрд┐ рдЖрдк рдорд╛рдирдХ рдШрдЯрдирд╛рдУрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдЬреЛ рд╡рд╛рдИ рдореЗрдВ рдЙрдкрд▓рдмреНрдз рд╣реИрдВ, рдЬреИрд╕реЗ рдХрд┐ "EVENT_AFTER_INSERT"ред
рдШрдЯрдирд╛ рдХреЛ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╕рд╣реА рдЬрдЧрд╣ рдкрд░ "рдЯреНрд░рд┐рдЧрд░ ()" рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдХреЙрд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкрд░реНрдпрд╛рдкреНрдд рд╣реИ, рдФрд░ рдЙрд╕рдХреЗ рдмрд╛рдж рд╣реА рдШрдЯрдирд╛ рдХреЗ рд▓рд┐рдП рд╣реИрдВрдбрд▓рд░ рдХреЛ рд╕рд╣реА рдЬрдЧрд╣ рдкрд░ рд╕реЗрдЯ рдХрд░рдирд╛ рд╣реИред
рдПрдХ рдЙрджрд╛рд╣рд░рдг: app\modules\users\models\User ... public function afterSave($insert) {
рд╣реИрдВрдбрд▓рд░ рдХреЛ рдмрд╛рдВрдзрдиреЗ рдХреЗ рдХрдИ рддрд░реАрдХреЗ рд╣реИрдВ: function ($event) { ... }
рд░рд╛рдп
Yii2 рдореЗрдВ рдПрдХ рдирдпрд╛ рд╡рд░реНрдЧ рд╕рд╛рдордиреЗ рдЖрдпрд╛ рд╣реИ, рдЬреЛ рдХрд┐ рдЖрд╡реЗрджрди рдХреЗ рд╕рднреА рдЕрднреНрдпрд╛рд╡реЗрджрди рдХреЗ рд▓рд┐рдП рдЬрд┐рдореНрдореЗрджрд╛рд░ рд╣реИ, рдФрд░ рдЬреЛ рд╕реАрдзреЗ рд╕реВрдЪрдирд╛ рдХреЛ рдЖрдЙрдЯрдкреБрдЯ рдХрд░рддрд╛ рд╣реИред
рдЕрдм рджреГрд╢реНрдп рдореЗрдВ рдЪрд░ "$ рдпрд╣" рдЕрдм рдирд┐рдпрдВрддреНрд░рдХ рдХреЛ рд╕рдВрджрд░реНрднрд┐рдд рдХрд░рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдирдП рд╡рд░реНрдЧ "yii \ base \ View" рдХреЛ рд╕рдВрджрд░реНрднрд┐рдд рдХрд░рддрд╛ рд╣реИред
рдирд┐рдпрдВрддреНрд░рдХ рдпрд╛ рд╡рд┐рдЬреЗрдЯ рдХреЗ рдПрдХ рдирд┐рд╢реНрдЪрд┐рдд рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдХреЙрд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЬрд┐рд╕рдореЗрдВ рджреГрд╢реНрдп рд╕рдВрдмрдВрдзрд┐рдд рд╣реИ, рдЖрдкрдХреЛ рд╡рд┐рдзрд┐: "рд╕рдВрджрд░реНрдн" рдХреЛ рдЪрд╛рд▓реВ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред
рдПрдХ рдЙрджрд╛рд╣рд░рдг:
рд╡рд┐рдЬреЗрдЯ
рд╡рд┐рдЬреЗрдЯ рдирдП рддрд░реАрдХреЛрдВ рдХреЗ рд╕рд╛рде рдкреВрд░рдХ рдереЗ, рд╕рд╛рде рд╣реА рдЕрдм рдЙрдиреНрд╣реЗрдВ рд╕реАрдзреЗ "рдЗрдХреЛ" рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред
рдПрдХ рдЙрджрд╛рд╣рд░рдг:
рдХрд╛рд░реНрд░рд╡рд╛рдИ рдлрд┐рд▓реНрдЯрд░
рдирдП рд╕рдВрд╕реНрдХрд░рдг рдореЗрдВ, рдирд┐рдпрдВрддреНрд░рдХ рдлрд┐рд▓реНрдЯрд░ "рд╡реНрдпрд╡рд╣рд╛рд░" рдХреЗ рд░реВрдк рдореЗрдВ рд▓рд╛рдЧреВ рдХрд┐рдП рдЬрд╛рддреЗ рд╣реИрдВред
public function behaviors() { return array( 'access' => array( 'class' => \yii\web\AccessControl::className(), 'rules' => array(
рдПрдХ рдЫреЛрдЯреА рд╕реА рдмрд╛рд░реАрдХрд┐рдпрд╛рдБ - рдХреЗрд╡рд▓ 2 рднреВрдорд┐рдХрд╛рдПрдБ рдмреЙрдХреНрд╕ рд╕реЗ рдмрд╛рд╣рд░ рд░рд╣реАрдВ:
- @ - рдЕрдзрд┐рдХреГрдд
- ? - рдореЗрд╣рдорд╛рди
- * - рд╣рдЯрд╛ рджрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред
рд╕реНрдереИрддрд┐рдХ рд╕рд╣рд╛рдпрдХреЛрдВ
Yii2 рдиреЗ рдХрдИ рдирдП рдорджрджрдЧрд╛рд░ рдЬреЛрдбрд╝реЗред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдЙрд╕реА SecurityHelper рдХреА рддрд░рд╣, рдЬреЛ рдкрд╛рд╕рд╡рд░реНрдб рдФрд░ рдЬреЗрдирд░реЗрдЯ рдХрд┐рдП рдЧрдП рдХреЛрдб, ArrayHelper, Html рдФрд░ рдЕрдиреНрдп рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХреЛ рдЧрддрд┐ рджреЗрддрд╛ рд╣реИ, рдЬреЛ рдлрд┐рд░ рд╕реЗ рдкреНрд░рд╕рдиреНрди рдХрд░рддрд╛ рд╣реИред
ActiveForm
ActiveField рд╡рд░реНрдЧ рдХреЗ рдХрд╛рд░рдг, рдкреНрд░рдкрддреНрд░ рдЕрдм рдФрд░ рднреА рддреЗрдЬрд╝реА рд╕реЗ рдФрд░ рдЕрдзрд┐рдХ рдЖрд╕рд╛рдиреА рд╕реЗ рдмрдирд╛рдП рдЬрд╛рддреЗ рд╣реИрдВ, рдЬреЛ рдХреЛрдб рд▓рд┐рдЦрдиреЗ рдХреА рд╢реИрд▓реА рдХреЛ рд╕рд░рд▓ рдмрдирд╛рддрд╛ рд╣реИ, рдЬреЛ рдЕрдЪреНрдЫреА рдЦрдмрд░ рд╣реИред
<?php $form = ActiveForm::begin(array('options' => array('class' => 'form-horizontal'))); echo $form->field($model, 'username')->textInput($model->isNewRecord ? array() : array('readonly' => true)); echo $form->field($model, 'email')->textInput(); if (!$model->isNewRecord) { if (Yii::$app->user->checkAccess('editProfile')) { echo $form->field($model, 'status')->dropDownList(array( User::STATUS_ACTIVE => 'Active', User::STATUS_INACTIVE => 'Inactive', User::STATUS_DELETED => 'Deleted' )); echo $form->field($model, 'role')->dropDownList(array( User::ROLE_USER => 'User', User::ROLE_ADMIN => 'Admin' )); } echo $form->field($model, 'oldpassword')->passwordInput(); } echo $form->field($model, 'password')->passwordInput(); echo $form->field($model, 'repassword')->passwordInput(); ?> <div class="form-actions"> <?php echo Html::submitButton($model->isNewRecord ? 'Register' : 'Update', array('class' => 'btn btn-primary')); ?> </div> <?php ActiveForm::end(); ?>
рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдФрд░ рдкрд╣рдЪрд╛рди
рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХреЗ рд╕рд╛рде рд░реЛрдмреЛрдЯ рдЕрдм рдХреНрд▓рд╛рд╕ "yii \ web \ User" рдФрд░ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ "yii \ web \ Identity" рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдЬреЛ рдЙрдкрдпреЛрдЧ рдореЗрдВ рдЕрдзрд┐рдХ рд▓рдЪреАрд▓рд╛ рд╣реИред
рдЗрди рдкрд░рд┐рд╡рд░реНрддрдиреЛрдВ рдХреА рд╡рдЬрд╣ рд╕реЗ, рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреА рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рдХреЛ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреА "рдкрд╣рдЪрд╛рди" рд╡рд┐рдзрд┐ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдкреНрд░рд╛рдкреНрдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред
рдПрдХ рдЙрджрд╛рд╣рд░рдг: echo Yii::$app->user->identity->username;
URL рдкреНрд░рдмрдВрдзрди
рдпрд╣рд╛рдВ рд░рд┐рдХреЙрд░реНрдбрд┐рдВрдЧ рдирд┐рдпрдореЛрдВ рдХреЗ рд▓рд┐рдП рд╢реИрд▓рд┐рдпреЛрдВ рдХреЛ рдереЛрдбрд╝рд╛ рд╕рдВрд╢реЛрдзрд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред
рдПрдХ рдЙрджрд╛рд╣рд░рдг: ... array( 'dashboard' => 'site/index', 'PUT post/<id:\d+>' => 'post/update', 'POST,PUT post/index' => 'post/create', 'POST <controller:\w+>s' => '<controller>/create', '<controller:\w+>s' => '<controller>/index', 'PUT <controller:\w+>/<id:\d+>' => '<controller>/update', 'DELETE <controller:\w+>/<id:\d+>' => '<controller>/delete', '<controller:\w+>/<id:\d+>' => '<controller>/view', ); ...
RBAC
рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдЕрдзрд┐рдХрд╛рд░реЛрдВ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдЕрдм рд╢реБрд░реВ рдореЗрдВ рдЕрдкрдиреЗ рд╕реНрд╡рдпрдВ рдХреЗ рдХреЛрдб рдХреЛ рдЬреЛрдбрд╝реЗ рдмрд┐рдирд╛ рдмреЙрдХреНрд╕ рд╕реЗ рдЙрдкрд▓рдмреНрдз рд╣реИ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдкрд╣рд▓реЗ рд╕рдВрд╕реНрдХрд░рдг рдореЗрдВ рдлрд╝рд╛рдЗрд▓ рд╕рдВрд╕реНрдХрд░рдг рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рдорд╛рдорд▓реЗ рдореЗрдВред
рдиреАрдЪреЗ рдореИрдВ рдЖрд░рдмреАрдПрд╕реА рдкрд░ рд╕рдВрдХреНрд╖рд┐рдкреНрдд рдирд┐рд░реНрджреЗрд╢ рдФрд░ рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рднреВрдорд┐рдХрд╛рдУрдВ рдХрд╛ рд╡рд┐рд╡рд░рдг рд▓рд┐рдЦреВрдВрдЧрд╛редрд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рд╣рдореЗрдВ рдЕрдкрдирд╛ рд╕реНрд╡рдпрдВ рдХрд╛ рд╡рд░реНрдЧ рдмрдирд╛рдиреЗ рдХреА рдЬрд░реВрд░рдд рд╣реИ, рдЬреЛ "\ yii \ rbac \ PhpManager" рд╕реЗ рд╡рд╛рд░рд┐рд╕ рд╣реЛрдЧрд╛ред
рд╣рдорд╛рд░реЗ рдЙрджрд╛рд╣рд░рдг рдореЗрдВ, рдпрд╣ "PhpManager.pp" рдирд╛рдо рдХреЗ рддрд╣рдд "рдШрдЯрдХреЛрдВ" рдлрд╝реЛрд▓реНрдбрд░ рдореЗрдВ "рдЖрд░рдмреАрдПрд╕реА" рдореЙрдбреНрдпреВрд▓ рдореЗрдВ рд╕реНрдерд┐рдд рд╣реИред
рдЗрд╕рдореЗрдВ рдХреЛрдб рд╕рд░рд▓ рд╣реИред рд╣рдо рдХреЗрд╡рд▓ рд╡рд░реНрдгрд┐рдд рднреВрдорд┐рдХрд╛рдУрдВ рдХреЗ рд╕рд╛рде рдЕрдкрдиреА рдлрд╝рд╛рдЗрд▓ рдХрд╛ рдкрде рд╕реЗрдЯ рдХрд░рддреЗ рд╣реИрдВ, рдФрд░ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЛ рд╡рд╛рдВрдЫрд┐рдд рднреВрдорд┐рдХрд╛ рдореЗрдВ рдмрд╛рдВрдзрддреЗ рд╣реИрдВред
<?php namespace app\modules\rbac\components; use Yii; class PhpManager extends \yii\rbac\PhpManager { public function init() { if ($this->authFile === NULL) $this->authFile = Yii::getAlias('@app/modules/rbac/components/rbac') . '.php'; parent::init(); if (!Yii::$app->user->isGuest) $this->assign(Yii::$app->user->identity->id, Yii::$app->user->identity->role); } }
рдЙрд╕рдХреЗ рдмрд╛рдж, рдЙрд╕реА рдлрд╝реЛрд▓реНрдбрд░ рдореЗрдВ, рд╣рдо "rbac.php" рдлрд╝рд╛рдЗрд▓ рдмрдирд╛рддреЗ рд╣реИрдВ рдЬрд╣рд╛рдБ рд╣рдо рдЕрдкрдиреА рдЬрд╝рд░реВрд░рдд рдХреА рднреВрдорд┐рдХрд╛рдУрдВ рдХрд╛ рд╡рд░реНрдгрди рдХрд░рддреЗ рд╣реИрдВред (рдХреЛрдб рдХреЛ рдлрд╝реЛрд▓реНрдбрд░ рдореЗрдВ рдбреЗрдореЛ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдореЗрдВ рджреЗрдЦрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ:
@app/modules/rbac/components/rbac
)
рдареАрдХ рд╣реИ, рдЕрдВрдд рдореЗрдВ, рд╣рдореЗрдВ рдмрд╕ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдлрд╝рд╛рдЗрд▓ рдореЗрдВ "difManager" рдХреЛ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд░рдирд╛ рд╣реЛрдЧрд╛:
... 'authManager' => array( 'class' => 'app\modules\rbac\components\PhpManager', 'defaultRoles' => array('guest'), ), ...
рдЙрд╕рдХреЗ рдмрд╛рдж, рдЬрд┐рд╕ рдЬрдЧрд╣ рдХреА рд╣рдореЗрдВ рдЬрд╝рд░реВрд░рдд рд╣реИ, рд╣рдо рд╕реБрд░рдХреНрд╖рд┐рдд рд░реВрдк рд╕реЗ рдЖрд╡рд╢реНрдпрдХ рдЕрдзрд┐рдХрд╛рд░реЛрдВ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдЬрд╛рдВрдЪ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:
if (Yii::$app->user->checkAccess('editOwnBlog', array('blog' => $model)) || Yii::$app->user->checkAccess('editBlog')) { ... }
рдпрд╣ рд╡рд╣ рд╕рдм рд╣реИ рдЬреЛ рдореИрдВ рдкрддрд╛ рд▓рдЧрд╛рдиреЗ рдореЗрдВ рдХрд╛рдордпрд╛рдм рд░рд╣рд╛, рд▓реЗрдХрд┐рди рдореБрдЭреЗ рдпрдХреАрди рд╣реИ рдХрд┐ рдЕрднреА рднреА рдмрд╣реБрдд рд╕рд╛рд░реА рдЪреАрдЬреЗрдВ рд╣реИрдВ рдЬреЛ рд╕рдлрд▓ рдирд╣реАрдВ рд╣реБрдИрдВред
рдлрд┐рд▓рд╣рд╛рд▓, рдореЗрд░реЗ рдкрд╛рд╕ рд╡рд╛рдИ 2 рдореЗрдВ рдЕрдЬрд╛рдХреНрд╕ рдЕрдиреБрд░реЛрдзреЛрдВ рд╕реЗ рдирд┐рдкрдЯрдиреЗ рдХрд╛ рд╕рдордп рдирд╣реАрдВ рдерд╛, рдЕрд░реНрдерд╛рддреН, рдореЙрдбрд▓ рдХреЛ рдорд╛рдиреНрдп рдХрд░рддреЗ рд╕рдордп рд╕рд╣реА рдЙрддреНрддрд░ рдХреИрд╕реЗ рдмрдирд╛рдПрдВред 1.0 рдореЗрдВ, рдпрд╣ рдЗрд╕ рддрд░рд╣ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ:
echo CActiveForm::validate($model);
рдЕрдЧрд░ рдХрд┐рд╕реА рдХреЛ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдкрддрд╛ рд╣реИ, рд▓рд┐рдЦреЛ, рдореБрдЭреЗ рдпрдХреАрди рд╣реИ рдХрд┐ рдХрдИ рд▓реЛрдЧ рджрд┐рд▓рдЪрд╕реНрдкреА рд▓реЗрдВрдЧреЗред
рдкрд░рд┐рдгрд╛рдо
рдЕрдзреВрд░реЗ рд▓реБрдХ рдХреЗ рдмрд╛рд╡рдЬреВрдж, Yii 2 рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдмрд╣реБрдд рдЕрдЪреНрдЫрд╛ рд▓рдЧ рд░рд╣рд╛ рд╣реИред рдореБрдЭреЗ рдпрдХреАрди рд╣реИ рдХрд┐ рдХреЗрд╡рд▓ рд╕рдмрд╕реЗ рдЕрдЪреНрдЫрд╛ рд╣рдорд╛рд░реЗ рдЖрдЧреЗ рд╣реИред
Yii 2 рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдкрд╕рдВрдж рдЖрдпрд╛ред рдИрдорд╛рдирджрд╛рд░ рд╣реЛрдиреЗ рдХреЗ рд▓рд┐рдП, рдирдП рд╕рдВрд╕реНрдХрд░рдг рдкрд░ рдХрд╛рдо рдХрд░рдиреЗ рд╡рд╛рд▓реА рдкрд░рд┐рдпреЛрдЬрдирд╛рдУрдВ рдХреЛ рд▓рд┐рдЦрдирд╛ рд╢реБрд░реВ рдХрд░рдиреЗ рдХреА рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдмрд╣реБрдд рдЗрдЪреНрдЫрд╛ рд╣реИ, рд╣рд╛рд▓рд╛рдВрдХрд┐ рдЗрд╕рд╕реЗ рдкрд╣рд▓реЗ рдХрд┐ рдпрд╣ рдЕрднреА рднреА рдмрд╣реБрдд рдЬрд▓реНрджреА рд╣реИред
рд▓реЗрдЦ рдмрдбрд╝рд╛ рдирд┐рдХрд▓рд╛, рд▓реЗрдХрд┐рди рдПрдХ рдЕрдиреНрдп рддрд░реАрдХреЗ рд╕реЗ рдореИрдВ рдЕрднреА рдирд╣реАрдВ рдЬрд╛рдирддрд╛ рдХрд┐ рдХреИрд╕реЗред
рдзреНрдпрд╛рди рджреЗрдиреЗ рдХреЗ рд▓рд┐рдП рдЖрдк рд╕рднреА рдХрд╛ рдзрдиреНрдпрд╡рд╛рджред рд╕реМрднрд╛рдЧреНрдп рд╣реИ
рдЬреАрдердм рдкрд░ рдбреЗрдореЛ рдмреНрд▓реЙрдЧред рд╕реНрдерд╛рдкрдирд╛ рдирд┐рд░реНрджреЗрд╢ рдореМрдЬреВрдж рд╣реИрдВред
рдПрдХ рдХрд╛рд░реНрдпрд╢реАрд▓ рдмреНрд▓реЙрдЧ рдЙрджрд╛рд╣рд░рдгред