誰ãã«åœ¹ç«ã€ãããããªãããã³ããšã³ããã·ãªãŒãºããããã€ãã®ã¯ã©ã¹ãšã¹ãããããéããŸããã
å
容ïŒ
-1ã€ã®ã°ãªããåã®è€æ°ã®å±æ§-
ã¢ã¯ãã£ããªã¡ãã¥ãŒé
ç®ã®ããã²ãŒã·ã§ã³ãä¿®æ£-
ããŒãã«ãä»ã®ååã«ãããã³ã°ãã-
äœã倿Žãããªãå ŽåãTimestampBehaviorãupdated_atããããã£ãæŽæ°ããã®ã¯ãªãã§ãã-
ããŒãã¹ãã©ããDateTimePicker-ã€ã³ã¿ãŒãã§ãŒã¹ã«è¡šç€ºãããµãŒããŒã«å€ãéä¿¡ããããã®2ã€ã®ç°ãªã圢åŒ-DateTimePickerãæã€ãã£ãŒã«ãã®ãŠãŒã¶ãŒã¿ã€ã ãŸãŒã³ã¢ã«ãŠã³ãã£ã³ã°æåã«ã1ã€ã®è£œåã¢ãã«ã§åçŽãªCRUDã¢ããªã±ãŒã·ã§ã³ãäœæããŸãã

1ã€ã®ã°ãªããåã®è€æ°ã®å±æ§
ãCreated AtãåãšãUpdated Atãåã1ã€ã«çµåããŠã¹ããŒã¹ãç¯çŽãããããåæã«åã®æ§æãä¿åããŠäžŠã¹æ¿ããããšããŸãã ãããè¡ãã«ã¯ãéåžžã®ãDataColumnãããç¶æ¿ãããçµååã«åå¥ã®å°ããªã¯ã©ã¹ãäœæããæ§æã§æå®ããŸãã


ID DESCã§ããã©ã«ãã®ãœãŒããè¡ããŸãããã
$dataProvider->sort->defaultOrder
ãä»ããŠå®è¡ãããšãã°ãªããã®ååã«ãœãŒãã¢ã€ã³ã³ã远å ãããŸãã
ã¢ã¯ãã£ããªã¡ãã¥ãŒé
ç®ã®ããã²ãŒã·ã§ã³ãä¿®æ£
ãŠãŒã¶ãŒç®¡çã远å ããŸãã ãdektrium / yii2-userãã¢ãžã¥ãŒã«ãã€ã³ã¹ããŒã«ããç§»è¡ãé©çšãã管çè
ãŠãŒã¶ãŒïŒãã¹ã¯ãŒã123456ã䜿çšïŒã远å ãããlayouts / main.phpãã®ã¡ãã¥ãŒã®ãªã³ã¯ãä¿®æ£ããŸãã ã/ user / loginãããŒãžã«ç§»åããŸãã ã¡ãã¥ãŒã®ãã°ã€ã³ãªã³ã¯ã¯éã¢ã¯ãã£ãã§ãã

ããã¯ãã¢ãžã¥ãŒã«ãç¬èªã®ã«ãŒãã£ã³ã°ã«ãŒã«ã远å ããããã§ãã ãã®ãããªãªã³ã¯ãã¢ã¯ãã£ãã«ããã«ã¯ããããã®ã«ãŒã«ã®é©çšåŸã«ååŸãããçµæã®URLãæå®ããå¿
èŠããããŸãïŒãã®å Žåãã/ user / security / loginãïŒã ãªãçŸããURLã®ã«ãŒããå¿
èŠãªã®ã§ããïŒ
common\components\bootstrap\Nav
ã¯ã©ã¹ã
yii\bootstrap\Nav
ããç¶æ¿ãããã®äžã®
isItemActive()
ã¡ãœãããåå®çŸ©ããŠã
Yii::$app->request->getUrl()
ããã€ãã®äžèŽãã¹ãã远å ã
Yii::$app->request->getUrl()
ã ãuseãã»ã¯ã·ã§ã³ã®ãlayouts / main.phpãã§ãã¯ã©ã¹ã瀺ããŸãã

TimestampBehaviorã補åã¢ãã«ã«è¿œå ããŸã
ãããŸã§ã®ãšããããã¹ãŠãæ£åžžã«æ©èœããŠããŸãã ããã«æ»ããŸãã
ããŒãã«ãä»ã®ååã«ãããã³ã°ãã
ã¢ããªã±ãŒã·ã§ã³ãããå°ãè€éã«ããŸãããã ã¢ã¯ã»ã¹å¶åŸ¡ã®ããã«ãããŒã¿ããŒã¹ãšRBACã«ã»ãã·ã§ã³ã¹ãã¬ãŒãžã远å ããŸãã
ãŸããåãuser_idããšãcategory_idãããproductãããŒãã«ã«è¿œå ããŸãã
ããŒã php yii migrate --migrationPath=@vendor/yiisoft/yii2/web/migrations php yii migrate --migrationPath=@yii/rbac/migrations php yii migrate
ããŒã¿ããŒã¹ãèŠãŠã¿ãŸããã

ããããã®ããŒãã«ãããã®ã§ãããã«ãããã©ãããæ¥ãã®ããã©ã®ããŒãã«ãã¢ããªã±ãŒã·ã§ã³ã«é¢ä¿ããã©ã®ããŒãã«ãã»ã«ã³ããªã¢ãžã¥ãŒã«ã«å±ããŠããã®ããããããŸããã ååã倿Žãããšã©ããªããŸããïŒ ãŸããã³ãŒãå
ã®äœã倿Žããªãããšããå§ãããŸãã

ãããè¡ãã«ã¯ã
getRawTableName()
ã¡ãœãããš
getRawTableName()
ã¡ãœããããªãŒããŒã©ã€ããããæšæºã®ãã®ããç¶æ¿ãããããŒã¿ããŒã¹æ¥ç¶ãšã¹ããŒã ãæäœããããã®ç¬èªã®ã¯ã©ã¹ãäœæããå¿
èŠããããŸãã çµåã¯ã©ã¹ã«ã¯ãæ°ããããããã£
$tableMap
ããããŸãããã®ããããã£ã§ã¯ãã¢ããªã±ãŒã·ã§ã³ã§äœ¿çšãããããŒãã«ã®å
éšåãšããŒã¿ããŒã¹ã§äœ¿çšãããå®éã®ããŒãã«ã®éã®å¯Ÿå¿ãèšå®ã§ããŸãã
ããŒãã«ã__user__userãã®ååã¯å°ãå¥åŠã«èŠããŸãããããã§ã¯ããããããããããã«ååã倿Žããããšã¯ã§ããŸããèšå®ããconfig / main.phpããã¡ã€ã«ã§æå®ãããŠããå Žåã
'class' => 'yii\db\Connection'
ããconfig / main-local.phpãããåé€ããå¿
èŠããããŸããåŸã§æ¥ç¶ãããããããã®ãã©ã¡ãŒã¿ãŒã¯åå®çŸ©ã ãŸãã¯ããconfig / main-local.phpãã§èšå®å
šäœãèšå®ããŸãã ããããããã®æ¹æ³ã®æ¹ãããè¯ãã§ããããéçºäžã¯æç¢ºãªååããããŸãããæ¬çªã§ã¯æ®éã§ãã
ç§»è¡ã«ãã£ãŠããŒãã«ã®ååã倿Žããå¿
èŠã¯ãããŸããã ãã®ãããªèšå®ã§ãããžã§ã¯ããè€è£œããç§»è¡ãéå§ãããšãæ°ããååã§ããŒãã«ãäœæãããŸãã ç§»è¡æã«ç§»è¡ããŒãã«èªäœã®ååã倿Žããããšãéåžžã«å°é£ã§ãã ã¿ã³ããªã³ãšäžç·ã«ããŒãã«ãã³ããŒããŠæ°ããååã§ãã®ååšããã§ãã¯ããããšã§èžãããšãã§ããŸãããããã¯ã»ãšãã©æ£åœåãããŸããã
äœã倿Žãããªãå ŽåãTimestampBehaviorãupdated_atããããã£ãæŽæ°ããçç±
補åã®ç·šéã«å
¥ãããŠãŒã¶ãŒãšã«ããŽãªãèšå®ããŸãã ãæŽæ°æ¥æãããããã£ãæŽæ°ãããŠããããšã«æ³šæããŠãã ããã ããã§åã³ç·šéãéå§ããäœã倿Žããã«ãä¿åããã¯ãªãã¯ããŸãã Updated Atããããã£ãåã³æŽæ°ãããŸããã ããã¯ãã®ããã§ãã£ãŠã¯ãªããŸããã
ããã¯ããuser_idããšãcategory_idãã远å ããããã«çºçããŸããã
ãã§ãŒã³ã¯æ¬¡ã®ãšããã§ãã ãã©ãŒã ãPOSTãªã¯ãšã¹ãã§éä¿¡ããŸãã ãã¡ããããã®äžã®ããŒã¿ã¯æåå圢åŒã§ãã
$model->load(Yii::$app->request->post())
ããµãŒããŒã§åŒã³åºãããŸãã ããšãã°ãããããã£
user_id = "1" (string)
ãŸãã
次ã«ã
$model->save()
ãåŒã³åºããã
TimestampBehavior
ïŒ
extends AttributeBehavior
ã
extends AttributeBehavior
ïŒãèµ·åããŸãã
AttributeBehavior.php public function evaluateAttributes($event) { ... && empty($this->owner->dirtyAttributes) ... }
BaseActiveRecord.php public function getDirtyAttributes($names = null) { ... || $value !== $this->_oldAttributes[$name]) ... }
å€
$this->_oldAttributes[$name]
ããŒã¿ããŒã¹ããããŒããããããã
$this->_oldAttributes['user_id'] = 1 (int)
ãŸãã å³å¯ãªæ¯èŒã¯falseãè¿ããããããã£ã¯å€æŽããããšèŠãªãããŸãã
ãããä¿®æ£ããã«ã¯ãrulesïŒïŒã¡ãœããã«å€ãã£ã«ã¿ãªã³ã°ã远å ããå¿
èŠããããŸãã
nullã§ã¯ãªãããããã£ã®å Žåããã¹ãŠãéåžžã«åçŽã§ãããintã«ãã£ã¹ãããŸãã nullã®å¯èœæ§ãããããããã£ã®å Žåãã³ãŒã«ããã¯ãèšè¿°ããå¿
èŠããããŸãã ã¢ããªã±ãŒã·ã§ã³ã§ã¯ã2çªç®ã®ãªãã·ã§ã³ã
Bootstrap DateTimePicker-ã€ã³ã¿ãŒãã§ã€ã¹ã«è¡šç€ºãããããšãµãŒããŒã«å€ãéä¿¡ããããã®2ã€ã®ç°ãªã圢åŒ
ãã£ã«ã¿ãŒ
created_from, created_to, updated_from, updated_to
ã远å ããŸãã æ¥ä»/æå»ã«ã€ããŠã¯ãéåžžãBootstrap Datepicker / Datetimepickerã«
kartikãŠã£ãžã§ããã䜿çšã
ãŸã ã

ãã ãã1ã€ã®åé¡ããããŸããå€ã®è¡šç€ºãšä¿åã«ç°ãªã圢åŒãèšå®ããããšã¯ã§ããŸããã ãã®çµæãã14 junio 2016ãmarããã®ãããªãã®ããµãŒããŒã«éä¿¡ã§ããŸãã ãããä¿®æ£ããã«ã¯ãæ°ãã圢åŒã®é衚瀺ãã£ãŒã«ããã¬ã³ããªã³ã°ã«è¿œå ããŸãã Datetimepickerã§ã¯ãlinkFieldãªãã·ã§ã³ãšlinkFormatãªãã·ã§ã³ãèšå®ã§ããŸããDatepickerã§ã¯ãchangeDateã€ãã³ãããã£ããããŠæåã§ãã©ãŒãããããå¿
èŠããããŸãã ãŸããå€ã®ã¯ãªã¢ãã¿ã³ãã¯ãªãã¯ããããšãåŠçããå¿
èŠããããŸãã
ã¯ãªã¢ãã¿ã³ãå®ååããŠãèŠæ ããè¯ãããããšãã§ããŸãã
main.css .input-group.date .kv-date-remove, .input-group.date .kv-date-calendar { color: #626262; } .input-group.date .kv-date-remove-custom { position: absolute; z-index: 3; color: #000; opacity: 0.4; font-size: 16px; font-weight: 700; line-height: 0.6; right: 50px; top: 14px; cursor: pointer; } .input-group.date .kv-date-remove-custom:hover { opacity: 0.6; } .input-group.date input { padding-right: 30px; } .input-group.date .input-group-addon.kv-date-calendar + .kv-date-remove-custom { left: 50px; right: auto; } .input-group.date .input-group-addon.kv-date-calendar + .kv-date-remove-custom + input { padding-left: 32px; }

ãšããã§ãå€ãã®ããŒãããã«ãŒãããŒã«ãªãŒãŒã·ã§ã³ããµããŒãããŠãããšããäºå®ã«å°ãé©ããŠããŸãããç°ãªã圢åŒã§å€ã衚瀺ããŠéä¿¡ããæ¹æ³ã¯ãããŸããã ç§ã®æèŠã§ã¯ãdatepickerã¯selectã¿ã°ã®çŽæ¥çãªé¡äŒŒç©ã§ãã ããã¹ããselectã§è¡šç€ºãããªãã·ã§ã³å€ãéä¿¡ããdatepickerã§æ¥ä»ãçŸãããããããã圢åŒã§è¡šç€ºãããã¯ãã«ã«ã§éä¿¡ããŸãã
åãkartikã«ã¯ã¢ãžã¥ãŒã«yii2-datecontrolãããããã®ã¢ãžã¥ãŒã«ã§å¥ã®ä¿å圢åŒãæå®ã§ããŸãã ããããããã©ã«ãã§ã¯è¡šç€ºãããããã¹ãããµãŒããŒã«éä¿¡ããããã§è§£æããä¿åããããã«æå®ããã圢åŒã§ãã©ãŒãããããŠããéä¿¡ãããããç§ã¯ããã奜ãã§ã¯ãããŸããã§ããã ã¯ã©ã€ã¢ã³ãã§æžåŒèšå®ãèšå®ã§ããŸãããäžè¬çã«ã¯ããé¢åã§ãèšå®ããçç±ã¯ãããŸãããæ¥ä»ãYYYY-mm-ddã§æžåŒèšå®ããã ãã§ãã
DateTimePickerãæã€ãã£ãŒã«ãã®ãŠãŒã¶ãŒã¿ã€ã ãŸãŒã³ã¢ã«ãŠã³ãã£ã³ã°
ãã®ãããæ¥ä»ã«ãããã£ã«ã¿ãŒããããŸãã ããã§ãç°ãªãã¿ã€ã ãŸãŒã³ã®ãŠãŒã¶ãŒãããããšãæ³åããŠãã ããã ãµãŒããŒãšããŒã¹ã¯UTCã§ãã åºåã®ãã©ãŒãããã¯ãã©ãŒããã¿ãŒã®èšå®ã«ãã£ãŠæ±ºãŸããŸãããå
¥åãã©ãããã°ããã§ããïŒ ãã£ã«ã¿ãŒã®ãŠãŒã¶ãŒã¯ãã°ãªããããŒã¿ã«è¡šç€ºãããäºå®ã®æéãèšå®ããŸãã 解決çã¯ç°¡åã§ãããã©ãŒã ãèªã¿èŸŒãã åŸããŠãŒã¶ãŒã®ã¿ã€ã ãŸãŒã³ãããµãŒããŒã®ã¿ã€ã ãŸãŒã³ã«æéãšãšãã«ãã£ãŒã«ãå€ã倿ããå¿
èŠããããŸãã ãããã£ãŠãã¢ããªã±ãŒã·ã§ã³å
ã§ã¯ãæå»ã¯åžžã«UTCã«ãªããŸãã

JavaScriptã³ãŒãã®ãŠã£ãžã§ãã
ãã¥ãŒãã¡ã€ã«ã«javascriptã³ãŒããèšè¿°ããå¿
èŠãããå ŽåããããŸãã ãã¡ãããjsãã¡ã€ã«ã«æžãèŸŒãæ¹ãè¯ãã§ãããå¥ã®ã±ãŒã¹ããããŸãã å€ãã®å Žåã圌ãã¯ãããæååã§æžããregisterJsïŒïŒãéããŠç»é²ããŠãããã¥ã¡ã³ãã®æåŸã«æ®ãã®ã¹ã¯ãªãããšãšãã«è¡šç€ºããŸãã ãã ãããã¹ãŠã®ç·šéè
ãè¡ã«ãã€ã©ã€ãã衚瀺ããããã§ã¯ãªããåŒçšç¬Šã«åé¡ãããå¯èœæ§ããããè¡ããªããšäžå€®ã«è¡šç€ºãããŸãã
begin()
ãš
end()
åŒã³åºãã®éã«ã³ã³ãã³ããååŸããã¿ã°ãåé€ããŠ
registerJs()
ãåŒã³åºããŠã£ãžã§ãããäœæã§ã
begin()
ããã©ã«ãã§ã¯
\yii\web\View::POS_READY
ïŒã
<?php
ãæ³šæ
ãŸãã1ã€ã®ãã¡ã€ã³ïŒããšãã°ããã¹ãã£ã³ã°ïŒã«é«åºŠãªã¢ããªã±ãŒã·ã§ã³ãé
眮ããæ¹æ³
ã«é¢ããããã¥ã¡ã³ããžã®ãªã³ã¯ãæ®ããŸãã ãyii2é«åºŠãªåäžãã¡ã€ã³ãã®ãªã¯ãšã¹ãã«å¿ããŠGoogleã¯ãApacheèšå®ã䜿çšããäŸãæäŸããŠããŸãããå®éã«ã¯ããã¹ãŠãã¯ããã«åçŽã§ãã ãããŠãæ£ãããªã³ã¯ã®ããã«ããyii2é«åºŠãªå
±æãã¹ãã£ã³ã°ããå
¥åããããšãæšæž¬ããå¿
èŠããããŸãã ã€ãŸãããbackend / webããã©ã«ããŒããfrontend / web / adminããã©ã«ããŒã«ç§»åãããindex.phpãã®ãã¹ãç·šéããå¿
èŠããããŸãã
ãã¹ãŠã®äŸã¯ãå¥ã
ã®ã³ããã
ã§githubã§è¡šç€ºã§ããŸãã