ããã«ã¡ã¯ãHabrausersæ§ïŒ
ã¿ã€ãã«ãããã§ã«çè§£ããŠããããã«ããã®èšäºã§ã¯Yiiã®æ°ããããŒãžã§ã³ã«ã€ããŠèª¬æããŸãã çããäŸã䜿çšããŠãçŽ æŽãããYii 2ã玹ä»ããŸãã
å€ãã®æé ã¯æåã®ããŒãžã§ã³ãšäŒŒãŠãããããããã°ãäœæããããã®å®å
šãªæç€ºãæžã䟡å€ã¯ãªãã§ãããããç°ãªããã¥ã¢ã³ã¹ã«ã€ããŠæžããã¢ããªã±ãŒã·ã§ã³ã®äœæããã»ã¹ã§æ°ã¥ããæ°ããYii2ã«çŠç¹ãåœãŠãŸãã æ®ãã¯ãã¹ãŠã
ãã¢ã¢ããªã±ãŒã·ã§ã³ã§ããã«ç¢ºèªã§ããŸãããããããããã¹ããæžãããã广çã§ãããã
ãã€ã©ã€ã
Yii2ã§ã¯ãæ¢ã«ãæ°ã¥ãã®ããã«ããã¹ãŠãåå空éã«åºã¥ããŠæ§ç¯ãããŠãããããã¯ããããæ°ããããŒãžã§ã³ã®ã¡ã€ã³ã®ããã€ã©ã€ããã§ãã
ãŸããéåžžã«éèŠãªãã€ã³ãïŒãã¡ã€ã«åã®æ¥é èŸãCããåé€ãããŸããã
æåã®ã¢ããªã±ãŒã·ã§ã³ãã€ã³ã¹ããŒã«ããŠäœæãã
åºæ¬ãšããŠãåºæ¬çãªã¢ããªã±ãŒã·ã§ã³ã䜿çšããŸãã
ã€ã³ã¹ããŒã«æ¹æ³ã¯
Githubã§éåžžã«ãã説æãããŠ
ããã®ã§ãããã«æ¬¡ã®ãã€ã³ãã«é²ãã§ãã ããã
ã¢ããªã±ãŒã·ã§ã³æ§é
äŸãšããŠãã¢ãžã¥ãŒã«æ§é ãéžæããŸããã ããã«ãããYii2ã®ã¢ãžã¥ãŒã«ã®åäœåçãåŠã³ãçè§£ããããšãã§ããŸãã
ãã®ããããã®ãããªæ§é ãå®è£
ããã«ã¯ãæåã®ããŒãžã§ã³ãšåæ§ã«ããã¹ãŠã®ã¢ãžã¥ãŒã«ã®ã¡ã€ã³ãã©ã«ããŒãäœæããå¿
èŠããããŸããã¡ã€ã³ãã©ã«ããŒã«ã¯ãåã
ã®ã¢ãžã¥ãŒã«çšã«åå¥ã®ãã©ã«ããŒãæ¢ã«äœæãããŸãã æåã®ããŒãžã§ã³ã®ããã«ãããããã¹ãŠã§ãã
ã¢ãžã¥ãŒã«å
ã§å€æŽãããå¯äžã®ãã®ã¯ãã¢ãžã¥ãŒã«ã®ã¡ã€ã³ã¯ã©ã¹ã®ååã§ãã ç§ãçè§£ããŠããããã«ããµãã£ãã¯ã¹ãModuleããæžãå¿
èŠããªããªã£ãã®ã§ãã¡ã€ã³ãã¡ã€ã«ã«ã¯ãµãã£ãã¯ã¹ã®ãªãæç¢ºãªååãä»ããããŸãã
äŸïŒSite.phpãUsers.phpãBlogs.phpãªã©
æ¢æã®äŸã§ãã§ã«æ§é ãèŠãããšãã§ããŸãããããã«ã€ããŠã¯ãã説æããå¿
èŠã¯ãããŸããã
ã¢ããªã±ãŒã·ã§ã³èšå®ïŒconfig / main.php
Yii 1.0ãšåæ§ã«ãã¢ããªã±ãŒã·ã§ã³ã¯main.phpãã¡ã€ã«ãä»ããŠèšå®ãããå€ãã®èŠçŽ ã¯å€æŽãããŸããããå€ãã®ååã倿Žããããã©ã¡ãŒã¿ãŒããããŸãã
ãã®ãããªå€æŽãšæ©èœã®ããã€ãã®äŸïŒãã©ã¡ãŒã¿ãåäœããªãå Žåããã¬ãŒã ã®ãœãŒã¹ã³ãŒãå
ã®ãã¹ãŠãç°¡åã«ã¹ãã€ã§ããŸãã
ã¢ããªã±ãŒã·ã§ã³ãã»ããã¢ããããã¢ãžã¥ãŒã«ããã©ã°ã€ã³ãããããCRUDãã®èšè¿°ãéå§ã§ããŸãã
CRUD
詳现ãªäŸã¯ãã¢ã³ãŒãã«ãããŸãããæ£çŽãªãšãããæåã®ããŒãžã§ã³ãšå€§ããªéãã¯ãããŸããã æ°ããç»å Žããã®ã¯ã以åã«ã³ã³ãããŒã©ãŒã®ã¡ãœããã§ããpopulateïŒïŒã ãã§ããããã¯æè¿ã¢ãã«ã«è»¢éãããååãloadïŒïŒã«å€æŽãããŸããã
äŸïŒ 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();
ã¢ã¯ãã£ãã¬ã³ãŒã
ããã§ãã¹ãŠãæžãçŽãããçŸåšYii2ã§æ°ããARãäœæãããŠããŸãã
ããã€ãã®é©æ°ã®äŸïŒãã¹ã³ãŒãïŒïŒãã¯ãARã¢ãã«ã®éåžžã®ã¡ãœããã«çœ®ãæããããçŸåšã¯æ¬¡ã®ããã«ãªã£ãŠããŸãã
public function active($query) { return $query->andWhere('status = ' . self::STATUS_ACTIVE); }
ãŸãããé¢ä¿ïŒïŒãã¯æ ¹æ¬çã«å€æŽãããçŸåšã¯ãããã®åœ¢ã§èšå®ãããŠããŸãããããã¯ããæ£ç¢ºã§ãã ãhasOneïŒïŒãããhasManyïŒïŒãã®2çš®é¡ã®é¢ä¿ã䜿çšå¯èœã§ãã
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ã¯ããã©ã«ãã§ãã®ãããªå€ãtbl_MODEL_NAMEããè¿ããtableNameïŒïŒã颿°ã«ãããã¢ãã«ãããŒã¿ããŒã¹ã«èªåçã«ãã€ã³ãããŸãã ããšãã°ãUserã¢ãã«ã¯tbl_userããŒãã«ã«ãã€ã³ããããŸãã ããŒãã«åãç°ãªãå Žåã¯ãåã«é¢æ°ããªãŒããŒã©ã€ãã§ããŸãã
ã€ãã³ã
æ°ããããŒãžã§ã³ã§ã¯ãã€ãã³ãã®æäœãã§ããéãç°¡åã«ãªããŸããã ãã¢ã¢ããªã±ãŒã·ã§ã³ã§ã¯ãç¬èªã®ã€ãã³ãã®äŸã瀺ããŸãããæ°ãããŠãŒã¶ãŒã远å ãããšãã€ãã³ãã¯afterSaveïŒïŒã§åŒã³åºãããŸãããYiiã§å©çšå¯èœãªãEVENT_AFTER_INSERTããªã©ã®æšæºã€ãã³ãã䜿çšã§ããŸãã
ã€ãã³ããå€å¥ããã«ã¯ãé©åãªå Žæã§ãããªã¬ãŒïŒïŒã颿°ãåŒã³åºããŠãããé©åãªå Žæã§ã€ãã³ãã®ãã³ãã©ãŒãèšå®ããã ãã§ååã§ãã
äŸïŒ app\modules\users\models\User ... public function afterSave($insert) {
ãã³ãã©ãŒããã€ã³ãããã«ã¯ããã€ãã®æ¹æ³ããããŸãã function ($event) { ... }
衚瀺ãã
Yii2ã«ã¯ãã¢ããªã±ãŒã·ã§ã³ã®ãã¹ãŠã®è¡šçŸãæ
åœããæ
å ±ãçŽæ¥åºåããæ°ããã¯ã©ã¹ãç»å ŽããŸããã
ãã¥ãŒãã¡ã€ã«ã§ã¯ã倿°ã$ thisãã¯ã³ã³ãããŒã©ãŒãåç
§ããªããªããŸããããæ°ããã¯ã©ã¹ãyii \ base \ Viewããåç
§ããŸãã
ãã¥ãŒãå±ããã³ã³ãããŒã©ãŒãŸãã¯ãŠã£ãžã§ããã®ç¹å®ã®æ©èœãåŒã³åºãã«ã¯ãã¡ãœãããcontextããæå¹ã«ããå¿
èŠããããŸãã
äŸïŒ
ãŠã£ãžã§ãã
ãŠã£ãžã§ããã«æ°ããã¡ãœããã远å ãããããã«ããšã³ãŒãçµç±ã§çŽæ¥è¡šç€ºãããããã«ãªããŸããã
äŸïŒ
ã¢ã¯ã·ã§ã³ãã£ã«ã¿ãŒ
æ°ããããŒãžã§ã³ã§ã¯ãã³ã³ãããŒã©ãŒãã£ã«ã¿ãŒã¯ãåäœãã®åœ¢åŒã§å®è£
ãããŸãã
public function behaviors() { return array( 'access' => array( 'class' => \yii\web\AccessControl::className(), 'rules' => array(
å°ããªãã¥ã¢ã³ã¹-ç®±ããåºãããŸãŸã®åœ¹å²ã¯2ã€ã ãã§ãã
- @-æ¿èªæžã¿
- ïŒ -ã²ã¹ã
- *-åé€ãããŸããã
éçãã«ããŒ
Yii2ã¯å€ãã®æ°ãããã«ããŒã远å ããŸããã ããšãã°ããã¹ã¯ãŒããšçæãããã³ãŒããArrayHelperãHtmlãªã©ã®åŠçãé«éåããåãSecurityHelperã®ããã«ããããåã°ããŸãã
ã¢ã¯ãã£ããã©ãŒã
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
ããšãã°ãæåã®ããŒãžã§ã³ã§ãã¡ã€ã«ããŒãžã§ã³ã䜿çšããå Žåã®ããã«ãç¬èªã®ã³ãŒãã远å ããã«ãããã¯ã¹ããæåã«[ãŠãŒã¶ãŒæš©å©ã®æäœ]ã䜿çšã§ããŸãã
以äžã«ãRBACã«é¢ããç°¡åãªèª¬æãšããã¡ã€ã«å
ã®åœ¹å²ã®èª¬æãèšèŒããŸãããŸããã\ yii \ rbac \ PhpManagerãããç¶æ¿ããç¬èªã®ã¯ã©ã¹ãäœæããå¿
èŠããããŸãã
ãã®äŸã§ã¯ããPhpManager.phpããšããååã®ãcomponentsããã©ã«ããŒå
ã®ãrbacãã¢ãžã¥ãŒã«ã«ãããŸãã
ãã®äžã®ã³ãŒãã¯åçŽã§ãã 説æããããŒã«ã䜿çšããŠãã¡ã€ã«ãžã®ãã¹ãèšå®ãããŠãŒã¶ãŒãç®çã®ããŒã«ã«ãã€ã³ãããŸãã
<?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
ïŒ
æåŸã«ãæ§æãã¡ã€ã«ã§ãauthManagerããæ§æããã ãã§ãã
... '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')) { ... }
ããã§ç§ã¯ãªããšãèŠã€ããŸãããããŸã æåããªãã£ãããšããŸã ãããããããšç¢ºä¿¡ããŠããŸãã
çŸæç¹ã§ã¯ãYii 2ã§ajaxãªã¯ãšã¹ããåŠçããæéã¯ãããŸããã§ãããã€ãŸããã¢ãã«ãæ€èšŒãããšãã«æ£ããçããæ£ããäœæããæ¹æ³ããããŸããã§ããã 1.0ã§ã¯ãããã¯æ¬¡ã®ããã«è¡ãããŸãã
echo CActiveForm::validate($model);
誰ãããã§ã«ç¥ã£ãŠãããªããæžããŠãã ãããç§ã¯å€ããèå³ãæã£ãŠãããšç¢ºä¿¡ããŠããŸãã
ãŸãšã
æªå®æã®å€èгã«ãé¢ããããYii 2ã¯ãã§ã«éåžžã«è¯ãèŠããŸãã æé«ã®ãã®ã ããç§ãã¡ã®åã«ãããšç¢ºä¿¡ããŠããŸãã
Yii 2ã¯æ¬åœã«æ°ã«å
¥ããŸããã æ£çŽã«èšããšãæ°ããããŒãžã§ã³ã§ã®äœæ¥ãããžã§ã¯ãã®äœæãéå§ããããšãã匷ãèŠæãæ¢ã«ãããŸããããã以åã¯ãŸã éåžžã«æ©ã段éã§ãã
èšäºã¯å€§ããªãã®ã§ããããšã倿ããŸããããå¥ã®æ¹æ³ã§ã¯ã©ãããã°ããã®ãããããŸããã
ãæž
èŽããããšãããããŸããã é 匵ã£ãŠ
Githubã®ãã¢ããã°ã ã€ã³ã¹ããŒã«æé ããããŸãã
å®çšçãªããã°ã®äŸã