ãšã³ããªãŒ
YiiãšNode.jsã®ãã¡ã³ã§ãããã¹ãŠã®Khabrovitesã«ããã«ã¡ã¯ã
Jiiãã¬ãŒã ã¯ãŒã¯ãšãã®ããŒãã«é¢ããäžé£ã®èšäºã販売ããŠããŸãã åã®éšåã§ã¯ãã¢ããªã±ãŒã·ã§ã³ãåæåããã«äœ¿çšã§ãããã¬ãŒã ã¯ãŒã¯ã®éšåãã€ãŸã
Query Builderãš
Active Recordã«ã€ããŠèŠãŠããŸãã ã æ祚ïŒããã³æçŽãšã³ã¡ã³ãïŒãããç¶ç¶ãã䟡å€ãããããšãæããã«ãªããŸããã ä»åã¯ãJiiãã¬ãŒã ã¯ãŒã¯ã®ã¢ãŒããã¯ãã£ãšæ§é ã³ã³ããŒãã³ãã«ã€ããŠèª¬æããŸãã
ã€ããªãã®ãŒ
ãã¬ãŒã ã¯ãŒã¯ã®æ©èœãPHPããJavaScriptã«ç§»æ€ããããšã¯ç°¡åãªäœæ¥ã§ã¯ãªãããããããå®è¡ããããšã¯ã§ããŸããã èšèªã«ã¯éåžžã«ç°ãªãæ©èœãšéãããããäž»ãªãã®ã¯JavaScriptã®éåææ§ã§ãã
以äžã¯ããããã®åé¡ãã©ã®ããã«è§£æ±ºããããããããŠç§ãåŸã£ãå®è·µã§ãã ä»ã®éçºè
ã¯ãJiiãšãã®æ¡åŒµæ©èœãéçºãããšãã«åããã©ã¯ãã£ã¹ã«åŸãå¿
èŠããããŸãã
çŽæ
åéåææäœã¯ãES6æšæºãå®è£
ããPromiseãªããžã§ã¯ããè¿ããŸãã ãããè¡ãã«ã¯ã
whenã©ã€ãã©ãªã䜿çšããŸãã
æ¥é èŸ
load ïŒloadDataïŒïŒïŒã§å§ãŸãã¡ãœããã¯Promiseãè¿ããæ¥é èŸ
get ïŒgetUserïŒïŒãgetïŒ 'id'ïŒïŒãæã€ã¡ãœããã¯ããŒã¿ãåæçã«è¿ããŸãã
API Yii 2ã®ä¿å
Jiiã®åœåã®ã¢ã€ãã¢ã¯ãçŸãããªãããªPHPãã¬ãŒã ã¯ãŒã¯ãJavaScriptã«ç§»æ€ããããšã§ãã ãã®ãããnode.jsãè©Šçš/åãæ¿ãããPHPéçºè
ã¯ãäžã®ãã¬ãŒã ã¯ãŒã¯ããã°ããç°¡åã«åŠã¶ããšãã§ããŸãã
åç
§ã¯ã©ã¹ãèªãŸãªããŠãå¥ã®ããã°ã©ãã³ã°èšèªïŒ
åã蟌ã¿æ§
Jiiã¯ããã©ãŠã¶ããµãŒããŒãé»è©±ã®ã£ãããããŒãWebããããªã©ãå¯èœãªéãæ©èœãããšããäºå®ãèæ
®ããŠèšèšãããŠããŸãã
Yiiã¯ããªãå€ãã®ã°ããŒãã«å®æ°ïŒ
YII_ * ïŒãã¯ã©ã¹
Yiiããã³åå空é
yiiã
çæããŸããã
Jiiã¯
è©°ãŸããŸãã
ã°ããŒãã«ã¹ããŒã¹ã ãã©ãŠã¶ã¯ã
Jii.noConflictïŒïŒãåŒã³åºãããšã§é衚瀺ã«ã§ããåäžã®Jiiãªããžã§ã¯ãã«ã¢ã¯ã»ã¹ã§ããŸãã ãµãŒããŒåŽã§ã¯ãã°ããŒãã«ã«ã¯äœãæžã蟌ãŸãããçµæãšããŠJiiãè¿ãããŸã
requireïŒ 'jii'ïŒãåŒã³åºã
ãŸã ã
Npmããã±ãŒãž
Jiiã¯jii- *ããã±ãŒãžã®ã»ãããšããŠé
åžãããç¬èªã®ããã±ãŒãžãããŒãžã£ãŒïŒhiãMeteorïŒã¯ãããŸããã ã€ãŸããJiiã䜿çšãããšãä»ã®npmããã±ãŒãžããã©ã°ã€ã³ã§ããŸãã
Jiiã¯ããã€ãã®ããã±ãŒãžã«åå²ãããŠãããããããŒãã§äœ¿çšã§ããŸãã ããšãã°ãActiveRecordã®ã¿ã®äœ¿çšãéå§ããå Žåã¯ãjii-ar-sqlãã€ã³ã¹ããŒã«ããŸãããã³ã³ãããŒã©ãŒããã¥ãŒãhttpãµãŒããŒããã®ä»ã®å¿
èŠã®ãªãã³ãŒãã¯ãããŸããã
以åã® èšäºãèªãã å Žåã¯ããã§ã«ãããèŠãŠããŸãã
çŸæç¹ã§ã®Jiiã®äž»ãªããã±ãŒãžã¯æ¬¡ã®ãšããã§ãã
ã²ãã¿ãŒãšã»ãã¿ãŒ
Yiiã®äž»ãªæ©èœã®1ã€ã¯ãã²ãã¿ãŒãšã»ãã¿ãŒãä»ããŠãªããžã§ã¯ãã®ããããã£ãšã¡ãœããã«ç°¡åã«ã¢ã¯ã»ã¹ã§ããããšã§ããããšãã°ã
$ model-> userã
䜿çšããŠã¢ã¯ã»ã¹ãããšãã¢ãã«ããããã£ãååŸãããã
getUserïŒïŒã¡ãœãããåŒã³åºãããããŠãŒã¶ãŒãªã¬ãŒã·ã§ã³ãååŸãããã§ããŸãã DBã¯å®å
šãªéæ³ã§ããã誰ããæ°ã«å
¥ã£ãŠããŸãã
JavaScriptã§ã¯ããã¹ãŠã®ãã©ãŠã¶ãŒãã²ãã¿ãŒãšã»ãã¿ãŒããµããŒãããŠããããã§ã¯ãªããå€ãã®ãããžã§ã¯ãã¯ãŸã IE8ããµããŒãããå¿
èŠããããããJiiã§ã¯
getïŒ 'user'ïŒããã³
setïŒ 'user'ã 'Ivan'ïŒã¡ãœãããšããŠå®è£
ãããŸãã ãã®ã¢ãããŒãã¯ã
Backboneãªã©ã®å€ãã®ã©ã€ãã©ãªã§èŠã€ããããšãã§ããŸãã
å°æ¥ãå€ããã©ãŠã¶ã®å¿
èŠæ§ããªããªããšãå®éã®ã²ãã¿ãŒãšã»ãã¿ãŒãããããä»ããŠæ©èœããget / setã¡ãœãããšäžŠè¡ããŠè¿œå ãããŸãã
ã¯ã©ã¹ãšåå空é
圌ããèšãããã«ããã¹ãŠã®èªå°å¿ã®ããããã°ã©ããŒã¯JavaScriptã§ã¯ã©ã¹ã®ç¬èªã®å®è£
ãæžãã¹ãã§ãã ãã®ãããããã§ã¯ãã¯ã©ã¹ãå®è£
ããããã«ãä»ã®å
éšãããžã§ã¯ãã§æ¢ã«ãã瀺ãããŠãã
Neatnessã©ã€ãã©ãªã䜿çšããŸãã
ES6ã¯ã©ã¹ïŒCoffeeScript / TypeScriptã§ã¯ãªãïŒãéžæããŠãã ããã
ã³ã¡ã³ããš
githubã«ã¯ãããã«é¢ããå°ããªããªããŒãæ¢ã«ãããŸãã
ãŸããJiiã§ES6ãäžè¶³ããŠããçç±ãè¿°ã¹ãŸãã
- node.jsã«ã¯ããŒãã®ååŠçãå¿
èŠã§ãïŒio.jsããµããŒãããŸãïŒ
- es6ã«ã¯åå空éã¯ãããŸããããYiiã®æ©èœãç¹°ãè¿ãããã«å¿
èŠã§ãã ã¢ãžã¥ãŒã«ãä»ããŠå®è£
ã§ããŸãããæŸèæã«ãªããŸãã æŸèæãå¥ã®æŸèæã«å€æŽããŸã-æå³ããããŸããã
- ES6ã¯ã²ãã¿ãŒãšã»ãã¿ãŒã®äœ¿çšãæãã§ããŸãããäžèšã®ããã«å€ããã©ãŠã¶ãŒã§ã¯ãµããŒããããŠããŸãã
- å€ãã®éçºè
ã¯es6 / coffeescript / typescript圢åŒãç¥ãããããã¯è¿œå ã®ãšã³ããªã®ãããå€ã«ãªããŸã
- ç°ãªã圢åŒïŒES5ããã³ES6ïŒã®ã³ãŒãã§ã®äœæ¥ãå°é£ã æ¢åã®ãããžã§ã¯ãã§ãã¹ãŠã®ã³ãŒãães6ã«å€æŽã§ãããšã¯éããŸãããães6ã¯ã©ã¹ãç¶æ¿ããå¿
èŠããããJii.defineClassïŒïŒã䜿çšããŠã¯ã©ã¹ãäœæããå¿
èŠããããŸã-æŸèæã¯ãªããªããŸããã
以äžã«ããã®ãããã¯ã«é¢ããæ祚ãæ祚ãã³ã¡ã³ããè¿œå ããŸããïŒ
ããã«ãŠã§ã¢
Yiiãã¬ãŒã ã¯ãŒã¯ã§ã¯ãã³ã³ããŒãã³ãã¯
Yiiãä»ããŠã°ããŒãã«ã«ã¢ã¯ã»ã¹ã§ããŸã
:: $ app-> ...ãã ãã
Jiiã§ã¯ããã¹ãŠã®ã³ã³ããŒãã³ããã°ããŒãã«ã«é
眮ã§ããããã§ã¯ãããŸããã ãããã®äžéšïŒèŠæ±ãå¿çãWebãŠãŒã¶ãŒãã»ãã·ã§ã³ãªã©ïŒã¯ã³ã³ããã¹ãïŒèŠæ±ïŒã«é¢é£ä»ããããŠããŸãã
ãã®ãããªã³ã³ããŒãã³ãã¯ã³ã³ããã¹ãïŒ
Jii.base.Context ïŒã§äœæããããã©ã¡ãŒã¿ãŒãšããŠactionã«æž¡ãããŸããããã¯
expressã«ãªã¯ãšã¹ããšã¬ã¹ãã³ã¹ãæž¡ãã®ãšåæ§ã§ãã
Jii.defineClass('app.controllers.SiteController', { __extends: Jii.base.Controller, actionIndex: function(context) { context.response.data = this.render('index'); context.response.send(); } });
ãšã³ãã£ãã£
Jiiã¢ããªã±ãŒã·ã§ã³ã¯ãmodel-view-behaviorïŒMVCïŒãã¶ã€ã³ãã¿ãŒã³ã«åŸã£ãŠç·šæããã次ã®ãšã³ãã£ãã£ãæã¡ãŸãã
- ã¢ããªã±ãŒã·ã§ã³ ïŒãããã¯ã°ããŒãã«ã«ã¢ã¯ã»ã¹å¯èœãªãªããžã§ã¯ãã§ãããããŸããŸãªã¢ããªã±ãŒã·ã§ã³ã³ã³ããŒãã³ãã®æ£ããæäœãšããªã¯ãšã¹ããåŠçããããã®èª¿æŽãå®è¡ããŸãã
- ã¢ããªã±ãŒã·ã§ã³ã³ã³ããŒãã³ã ïŒãããã¯ãã¢ããªã±ãŒã·ã§ã³ã«ç»é²ãããããŸããŸãªæ©èœãæäŸãããªããžã§ã¯ãã§ãã
- èŠæ±ã³ã³ããŒãã³ã ïŒãããã¯ãèŠæ±ã®ã³ã³ããã¹ãã§ç»é²ãããçŸåšã®èŠæ±ãåŠçããããã®ããŸããŸãªå¯èœæ§ãæäŸãããªããžã§ã¯ãã§ãã
- ã¢ãžã¥ãŒã« ïŒãããã¯ãMVCã®ãã¹ãŠã®ããŒã«ãå«ãèªå·±å®çµåã®ããã±ãŒãžã§ãã ã¢ããªã±ãŒã·ã§ã³ã¯ãããã€ãã®ã¢ãžã¥ãŒã«ã䜿çšããŠç·šæã§ããŸãã
ãããã®äœ¿çšäŸã¯
ãã¢ã§èŠãããšãã§ããŸãã
çšé
ã¢ããªã±ãŒã·ã§ã³ã¯ãJiiã¢ããªã±ãŒã·ã§ã³ã·ã¹ãã ã®æ§é å
šäœãšã©ã€ããµã€ã¯ã«ãå¶åŸ¡ãããªããžã§ã¯ãã§ãã éåžžãJiiã¢ããªã±ãŒã·ã§ã³ã®1ã€ã®ã€ã³ã¹ã¿ã³ã¹ã¯ã1ã€ã®ã¯ãŒã«ãŒïŒããã»ã¹ïŒNode.jsã«å°éããŸããããã¯ãJii.appãä»ããŠå©çšã§ããŸãã
å
¥åã¹ã¯ãªãããã¢ããªã±ãŒã·ã§ã³ãäœæãããšãæ§æãããŒããããã¢ããªã±ãŒã·ã§ã³ã«é©çšãããŸãã次ã«äŸã瀺ããŸãã
var Jii = require('jii');
Yiiãš
ã®éèŠãªéãã¯ãæ§æã2ã€ã®éšå-ã¢ããªã±ãŒã·ã§ã³æ§æïŒã¢ããªã±ãŒã·ã§ã³ã»ã¯ã·ã§ã³ïŒãšã³ã³ããã¹ãïŒèŠæ±ïŒæ§æïŒã³ã³ããã¹ãã»ã¯ã·ã§ã³ïŒã«åãããŠããããšã§ãã ã¢ããªã±ãŒã·ã§ã³æ§æã¯ãã³ã³ããŒãã³ããã¢ãžã¥ãŒã«ãäœæããã³æ§æããã¢ããªã±ãŒã·ã§ã³èªäœïŒJii.appïŒãæ§æããŸãããããã¯ãã¹ãŠãã¯ãŒã«ãŒã®èµ·åæã«çºçããŸãã 次ã«ãã³ã³ããã¹ãæ§æã¯ãåã¢ã¯ã·ã§ã³åŒã³åºãïŒhttpèŠæ±ãã³ã³ãœãŒã«ã³ãã³ãåŒã³åºããªã©ïŒã®ã³ã³ããŒãã³ããäœæããã³æ§æããŸãã äœæãããã³ã³ããŒãã³ãã¯ãã¢ã¯ã·ã§ã³ã¡ãœããã®æåã®åŒæ°ãšããŠæž¡ãããŸãã
å€ãã®å Žåãã¢ããªã±ãŒã·ã§ã³ã®æ§æã¯éåžžã«è€éã§ããããããã¡ã€ã«ã«è»¢éãããããã€ãã®æ§æãã¡ã€ã«ã«åå²ãããŸãã
ã¢ããªã±ãŒã·ã§ã³ã³ã³ããŒãã³ã
ã¢ããªã±ãŒã·ã§ã³ã«ã¯ãã¢ããªã±ãŒã·ã§ã³ãæ©èœããããã®ããŸããŸãªæ段ãæäŸããå€ãã®ã¢ããªã±ãŒã·ã§ã³ã³ã³ããŒãã³ããæ ŒçŽãããŸãã ããšãã°ãurlManagerã³ã³ããŒãã³ãã¯ãWebèŠæ±ãé©åãªã³ã³ãããŒã©ãŒã«ã«ãŒãã£ã³ã°ããŸãã dbã³ã³ããŒãã³ãã¯ãããŒã¿ããŒã¹ãæäœããããã®ããŒã«ãæäŸããŸãã ãªã©
ã¢ããªã±ãŒã·ã§ã³ã®åã³ã³ããŒãã³ãã«ã¯ç¬èªã®äžæã®IDããããåãã¢ããªã±ãŒã·ã§ã³å
ã®ä»ã®ããŸããŸãªã³ã³ããŒãã³ãéã§èå¥ããããšãã§ããŸãã 次ã®ããã«ããŠã³ã³ããŒãã³ãã«ã¢ã¯ã»ã¹ã§ããŸãã
Jii.app.ComponentID
çµã¿èŸŒã¿ã¢ããªã±ãŒã·ã§ã³ã³ã³ããŒãã³ã
Jiiã«ã¯ãåºå®IDãšããã©ã«ãæ§æãæã€ããã€ãã®çµã¿èŸŒã¿ã¢ããªã±ãŒã·ã§ã³ã³ã³ããŒãã³ãããããŸãã
以äžã¯ãçµã¿èŸŒã¿ã¢ããªã±ãŒã·ã§ã³ã³ã³ããŒãã³ãã®ãªã¹ãã§ãã ãããã¯ãä»ã®ã¢ããªã±ãŒã·ã§ã³ã³ã³ããŒãã³ããšåæ§ã«æ§æã§ããŸãã ã¢ããªã±ãŒã·ã§ã³ã®çµã¿èŸŒã¿ã³ã³ããŒãã³ããæ§æãããã®ã³ã³ããŒãã³ãã®ã¯ã©ã¹ãæå®ããªãå Žåãããã©ã«ãå€ã䜿çšãããŸãã
- db ãJii.sql.BaseConnection ïŒã¯ãã¯ãšãªãå®è¡ã§ããããŒã¿ããŒã¹æ¥ç¶ã§ãã ãã®ã³ã³ããŒãã³ããæ§æãããšãã¯ãã³ã³ããŒãã³ãã¯ã©ã¹ãšä»ã®å¿
èŠãªãã©ã¡ãŒã¿ãŒãæå®ããå¿
èŠãããããšã«æ³šæããŠãã ããã
- urlManager ãJii.urlManager.UrlManager ïŒURLã®è§£æãšäœæã«äœ¿çšãããŸãã
- assetManager ãJii.assets.AssetManager ïŒã¢ããªã±ãŒã·ã§ã³ãªãœãŒã¹ã®ç®¡çããã³å
¬éã«äœ¿çšã
- view ãJii.view.View ïŒãã¥ãŒã®è¡šç€ºã«äœ¿çšãããŸãã
ã³ã³ããã¹ãã³ã³ããŒãã³ã
ã³ã³ããã¹ãã³ã³ããŒãã³ãã®ã»ããã¯ããããé©çšãããå Žæã«ãã£ãŠç°ãªããŸãã æãäžè¬çãªãªãã·ã§ã³ã¯ããŠãŒã¶ãŒããã®HTTPãªã¯ãšã¹ãã§ããããã«ã€ããŠã¯ãçµã¿èŸŒã¿ã®ã³ã³ããŒãã³ãã»ãããæ€èšããŸãã
ã¢ããªã±ãŒã·ã§ã³ã³ã³ããŒãã³ããšåæ§ã«ãåã¢ããªã±ãŒã·ã§ã³ã³ã³ããŒãã³ãã«ã¯åºæã®IDããããåãã³ã³ããã¹ãå
ã®ä»ã®ããŸããŸãªã³ã³ããŒãã³ãéã§èå¥ã§ããŸãã 次ã®ããã«ããŠã³ã³ããŒãã³ãã«ã¢ã¯ã»ã¹ã§ããŸãã
actionIndex: function(context) { context.ComponentID }
ã€ã³ã©ã€ã³ã¯ãšãªã³ã³ããŒãã³ã
以äžã¯ãçµã¿èŸŒã¿ã¯ãšãªã³ã³ããŒãã³ãã®ãªã¹ãã§ãã æ§æãã¡ã€ã«ã®ã³ã³ããã¹ãã»ã¯ã·ã§ã³ã§ãä»ã®ã³ã³ããŒãã³ããšåæ§ã«ããããæ§æã§ããŸãã
- response ãJii.base.Response ïŒãŠãŒã¶ãŒã«éä¿¡ããããµãŒããŒããã®ããŒã¿ãè¡šããŸãã
- request ãJii.base.Request ïŒãšã³ããŠãŒã¶ãŒããåä¿¡ãããªã¯ãšã¹ããè¡šããŸãã
- user ãJii.user.WebUser ïŒèªèšŒããããŠãŒã¶ãŒæ
å ±ãè¡šããŸãã
ã³ã³ãããŒã©ãŒ
ã³ã³ãããŒã©ã¯ã
MVCã¢ãŒããã¯ãã£ã®äžéšã§ãã ãããã¯
Jii.base.Controllerããç¶æ¿ãããã¯ã©ã¹ã®ãªããžã§ã¯ãã§ããããªã¯ãšã¹ãã®åŠçãšã¬ã¹ãã³ã¹ã®çæãæ
åœããŸãã åºæ¬çã«ããµãŒããŒïŒ
Jii.httpServer.HttpServer ïŒã«ãã£ãŠHTTPãªã¯ãšã¹ããåŠçãããšããã³ã³ãããŒã©ãŒã¯å
¥åããŒã¿ãåæãããããæž¡ããŸã
ã¢ãã«ã§ãã¢ãã«ã®çµæã[ãã¥ãŒ]ïŒæ§é ãã¥ãŒïŒã«æ¿å
¥ããæçµçã«çºä¿¡å¿çãçæããŸãã
ã¢ã¯ã·ã§ã³
ã³ã³ãããŒã©ãŒã¯
ã¢ã¯ã·ã§ã³ã§æ§æãããŸããããã¯ããšã³ããŠãŒã¶ãŒãã¢ã¯ã»ã¹ããŠãããããã®å®è¡ãèŠæ±ã§ããã¡ã€ã³ãããã¯ã§ãã
æ©èœçã ã³ã³ãããŒã©ãŒã«ã¯1ã€ä»¥äžã®ã¢ã¯ã·ã§ã³ããããŸãã
次ã®äŸã¯ã2ã€ã®ã¢ã¯ã·ã§ã³
viewããã³
createãæã€
ãã¹ãã³ã³ãããŒã©ãŒã瀺ããŠã
ãŸã ã
Jii.defineClass('app.controllers.PostController', { __extends: Jii.base.Controller, actionView: function(context) { var id = context.request.get('id'); return app.models.Post.findOne(id).then(function(model) { if (model === null) { context.response.setStatusCode(404); context.response.send(); return; } context.response.data = this.render('view', { model: model }); context.response.send(); }); }, actionCreate: function(context) { var model = new app.models.Post(); Jii.when.resolve().then(function() {
ãã¥ãŒã¢ã¯ã·ã§ã³ïŒ
actionViewïŒïŒã¡ãœããã§å®çŸ©ïŒã§ã¯ãã³ãŒãã¯æåã«èŠæ±ãããã¢ãã«IDã«åŸã£ãŠã¢ãã«ãããŒãããŸãã ã¢ãã«ãæ£åžžã«ããŒãããããšãã³ãŒãã¯viewãšãã
ãã¥ãŒã䜿çšããŠã¢ãã«ã衚瀺ã
ãŸã ã
äœæã¢ã¯ã·ã§ã³ïŒ
actionCreateïŒïŒã¡ãœããã§å®çŸ©ïŒã§ã¯ãã³ãŒãã¯äŒŒãŠããŸãã 圌ã¯æåã«ãã¯ãšãªããã®ããŒã¿ã䜿çšããŠã¢ãã«ãããŒãããã¢ãã«ãä¿åããããšããŸãã ãã¹ãŠãããŸããã£ãå Žåãã³ãŒãã¯ãã©ãŠã¶ãæ°ããäœæãããã¢ãã«ã®IDãæã€
ãã¥ãŒã¢ã¯ã·ã§ã³ã«ãªãã€ã¬ã¯ãããŸãã ãã以å€ã®å Žåã¯ããŠãŒã¶ãŒãå¿
èŠãªããŒã¿ãå
¥åã§ãã
äœæãã¥ãŒã衚瀺ãããŸãã
ã«ãŒã
ãšã³ããŠãŒã¶ãŒã¯ããããã*ã«ãŒã*ãä»ããŠã¢ã¯ã·ã§ã³ã«ã¢ã¯ã»ã¹ããŸãã ã«ãŒãã¯ã次ã®éšåã§æ§æãããç·ã§ãã
- ã¢ãžã¥ãŒã«IDïŒã³ã³ãããŒã©ãŒãã¢ããªã±ãŒã·ã§ã³ã«å±ããã[ã¢ãžã¥ãŒã«]ïŒæ§é ã¢ãžã¥ãŒã«ïŒã«å±ããå Žåã«ã®ã¿ååšããŸãã
- ã³ã³ãããŒã©ãŒIDïŒåãã¢ããªã±ãŒã·ã§ã³ïŒãŸãã¯ã³ã³ãããŒã©ãŒãã¢ãžã¥ãŒã«ã«å±ããŠããå Žåã¯åãã¢ãžã¥ãŒã«ïŒã®ä»ã®ãã¹ãŠã®ã³ã³ãããŒã©ãŒã®äžã§ã³ã³ãããŒã©ãŒãäžæã«èå¥ããæååã
- ã¢ã¯ã·ã§ã³IDïŒåãã³ã³ãããŒã©ãŒã®ä»ã®ãã¹ãŠã®ã¢ã¯ã·ã§ã³ã®äžã§ã¢ã¯ã·ã§ã³ãäžæã«èå¥ããæååã
ã«ãŒãã®åœ¢åŒã¯æ¬¡ã®ãšããã§ãã
ControllerID/ActionID
ãŸãã¯ãã³ã³ãããŒã©ãŒãã¢ãžã¥ãŒã«ã«å±ããŠããå Žåã¯æ¬¡ã®åœ¢åŒïŒ
ModuleID/ControllerID/ActionID
ã¢ã¯ã·ã§ã³äœæ
ã¢ã¯ã·ã§ã³ãäœæããããšã¯ãã³ã³ãããŒã©ã¯ã©ã¹ã§ãããã*ã¢ã¯ã·ã§ã³ã¡ãœãã*ã宣èšããããšãšåããããé£ãããããŸããã ã¢ã¯ã·ã§ã³ã¡ãœããã¯ãååã
actionãšããåèªã§å§ãŸãã¡ãœããã§ãã ã¢ã¯ã·ã§ã³ã¡ãœããã®æ»ãå€ã¯ããšã³ããŠãŒã¶ãŒã«éä¿¡ãããå¿çããŒã¿ã§ãã 以äžã®ã³ãŒãã¯ã2ã€ã®ã¢ã¯ã·ã§ã³
ã€ã³ããã¯ã¹ãš
hello-worldãå®çŸ©ããŠã
ãŸã ã
Jii.defineClass('app.controllers.SiteController', { __extends: Jii.base.Controller, actionIndex: function(context) { context.response.data = this.render('index'); context.response.send(); }, actionHelloWorld: function(context) { context.response.data = 'Hello World'; context.response.send(); } });
éå£èšŽèš
ã¢ã¯ã·ã§ã³ã¯ã
Jii.base.ActionãŸãã¯ãã®åå«ããç¶æ¿ãããã¯ã©ã¹ãšããŠå®çŸ©ã§ããŸãã
ãã®ãããªã¢ã¯ã·ã§ã³ã䜿çšããã«ã¯ã次ã®ããã«ãã³ã³ãããŒã©ãŒã¯ã©ã¹ã®
Jii.base.Controller.actionsïŒïŒã¡ãœããããªãŒããŒã©ã€ãããŠã¢ã¯ã·ã§ã³ãæå®ããå¿
èŠããããŸãã
actions: function() { return {
ã芧ã®ãšããã
actionsïŒïŒã¡ãœããã¯ãããŒãã¢ã¯ã·ã§ã³IDã§ãå€ãã¢ã¯ã·ã§ã³ã¯ã©ã¹ãŸãã¯[æ§æ]ïŒæŠå¿µæ§æïŒã®å¯Ÿå¿ããååã§ãããªããžã§ã¯ããè¿ãå¿
èŠããããŸãã çµã¿èŸŒã¿ã®ã¢ã¯ã·ã§ã³ãšã¯ç°ãªããåã
ã®ã¢ã¯ã·ã§ã³IDã«ã¯ã
ã¢ã¯ã·ã§ã³ïŒïŒã¡ãœããã§å®çŸ©ãããŠããéããä»»æã®æåãå«ããããšãã§ããŸãã
å¥ã®ã¢ã¯ã·ã§ã³ãäœæããã«ã¯ã
Jii.base.Actionã¯ã©ã¹ãŸãã¯ãã®åå«ããç¶æ¿ããpublic
runïŒïŒã¡ãœãããå®è£
ããå¿
èŠããããŸãã
runïŒïŒã¡ãœããã®åœ¹å²ã¯ãä»ã®ã¢ã¯ã·ã§ã³ã¡ãœãããšäŒŒãŠããŸãã äŸãã°
Jii.defineClass('app.components.HelloWorldAction', { __extends: Jii.base.Action, run: function(context) { context.response.data = 'Hello World'; context.response.send(); } });
ã¢ãžã¥ãŒã«
ã¢ãžã¥ãŒã«ã¯ãã¢ãã«ããã¥ãŒãã³ã³ãããŒã©ãŒãããã³ãã®ä»ã®è£å©ã³ã³ããŒãã³ãã§æ§æãããèªå·±å®çµåã®ãœãããŠã§ã¢ãããã¯ã§ãã ã¢ããªã±ãŒã·ã§ã³ã«ã¢ãžã¥ãŒã«ãã€ã³ã¹ããŒã«ãããšããšã³ããŠãŒã¶ãŒã¯ãããã«ã¢ã¯ã»ã¹ã§ããŸã
ã³ã³ãããŒã©ãŒã«ã ãã®ãããã¢ãžã¥ãŒã«ã¯ãã°ãã°ãããã¥ã¢ã¢ããªã±ãŒã·ã§ã³ãšèŠãªãããŸãã ã¢ããªã±ãŒã·ã§ã³ãšã¯ç°ãªããã¢ãžã¥ãŒã«ãåå¥ã«äœæããããšã¯ã§ããŸãããã¢ããªã±ãŒã·ã§ã³å
ã«ããå¿
èŠããããŸãã
ã¢ãžã¥ãŒã«ã®äœæ
ã¢ãžã¥ãŒã«ã¯ã
ããŒã¹ã¢ãžã¥ãŒã«
ãã¹ ïŒ
Jii.base.Module.basePath ïŒãšåŒã°ãããã£ã¬ã¯ããªã«é
眮ãããŸãã ã¢ããªã±ãŒã·ã§ã³ãã£ã¬ã¯ããªãšåæ§ã«ããã®ãã£ã¬ã¯ããªã«ã¯ã
controllers ã
models ã
viewsãããã³ãã®ä»ã®ãµããã£ã¬ã¯ããªãããããããã¯controllersãmodelsãviewsãããã³ãã®ä»ã®èŠçŽ ããã¹ãããŸãã 次ã®äŸã¯ãã¢ãžã¥ãŒã«ã®ãµã³ãã«ã³ã³ãã³ãã瀺ããŠããŸãã
modules/ forum/ Module.js controllers/ DefaultController.js models/ views/ layouts/ default/ DefaultController index.ejs
ã¢ãžã¥ãŒã«ã¯ã©ã¹
åã¢ãžã¥ãŒã«ã¯ã
Jii.base.Moduleãç¶æ¿ããäžæã®ã¯ã©ã¹ã䜿çšããŠå®£èšãã
ãŸã ã ãã®ã¯ã©ã¹ã¯ã
ããŒã¹ã¢ãžã¥ãŒã«
ãã¹ã®ã«ãŒãã«é
眮ããå¿
èŠããã
ãŸã ã ã¢ããªã±ãŒã·ã§ã³ïŒã¯ãŒã«ãŒïŒã®èµ·åäžã¯
察å¿ããã¢ãžã¥ãŒã«ã¯ã©ã¹ã®ã€ã³ã¹ã¿ã³ã¹ã1ã€äœæãããŸãã ã¢ãžã¥ãŒã«ã³ãŒããããŒã¿ãšã³ã³ããŒãã³ããå
±æã§ããããã«ãã¢ããªã±ãŒã·ã§ã³ã€ã³ã¹ã¿ã³ã¹ãšåæ§ã«ã¢ãžã¥ãŒã«ã€ã³ã¹ã¿ã³ã¹ãå¿
èŠã§ãã
ã¢ãžã¥ãŒã«ã¯ã©ã¹ãã©ã®ããã«èŠãããã®äŸã次ã«ç€ºããŸãã
Jii.defineClass('app.modules.forum.Module', { __extends: Jii.base.Module, init: function(context) { this.params.foo = 'bar'; return this.__super(); } });
ã¢ãžã¥ãŒã«å
ã®ã³ã³ãããŒã©ãŒ
ã¢ãžã¥ãŒã«ã³ã³ãããŒã©ãŒãäœæãããšãã¯ãã¢ãžã¥ãŒã«ã¯ã©ã¹ã®åå空éã®ã³ã³ãããŒã©ãŒãµãã¹ããŒã¹ã«ã³ã³ãããŒã©ãŒã¯ã©ã¹ãé
眮ããã®ãäžè¬çã§ãã ãŸããããã¯ãã³ã³ãããŒã©ã¯ã©ã¹ãã¡ã€ã«ã
ããŒã¹ã¢ãžã¥ãŒã«
ãã¹ã® ã³ã³ãããŒã©ãã£ã¬ã¯ããªã«é
眮ãããããšãæå³ã
ãŸã ã ããšãã°ãåã®äŸã®
ãã©ãŒã©ã ã¢ãžã¥ãŒã«ã§
ãã¹ãã³ã³ãããŒã©ãŒã説æããã«ã¯ãã³ã³ãããŒã©ãŒã¯ã©ã¹ã次ã®ããã«å®£èšããŸãã
var Jii = require('jii'); Jii.defineClass('app.modules.forum.controllers.PostController', { __extends: Jii.base.Controller,
Jii.base.Module.controllerNamespaceããããã£ãèšå®ããããšã§ãã³ã³ãããŒã©ãŒã¯ã©ã¹ã®åå空éãå€æŽã§ããŸãã ã³ã³ãããŒã©ãŒããã®åå空éããå€ããå Žåãã¢ããªã±ãŒã·ã§ã³ã§è¡ãããã®ãšåæ§ã«ã
Jii.base.Module.controllerMapããããã£ãŒãèšå®ããããšã§
ã³ã³ãããŒã©ãŒã«ã¢ã¯ã»ã¹ã§ããŸãã
ã¢ãžã¥ãŒã«ã䜿çšãã
ã¢ããªã±ãŒã·ã§ã³ã§ã¢ãžã¥ãŒã«ã䜿çšããã«ã¯ãã¢ããªã±ãŒã·ã§ã³æ§æã®
Jii.base.Application.modulesããããã£ã«ã¢ãžã¥ãŒã«ãå«ããã ãã§ãã 次ã®ã³ãŒãã¯ãã¢ããªã±ãŒã·ã§ã³æ§æã§
ãã©ãŒã©ã ã¢ãžã¥ãŒã«ã䜿çšããŠããŸãã
var config = { application: {
Jii.base.Application.modules
ããããã£ã«ã¯ ãã¢ãžã¥ãŒã«æ§æãå«ããªããžã§ã¯ã
ãå²ãåœãŠãããŸãã åãªããžã§ã¯ãããŒã¯ãã¢ãžã¥ãŒã«ãä»ã®ã¢ããªã±ãŒã·ã§ã³ã¢ãžã¥ãŒã«ã®äžã§äžæã«èå¥ãã*ã¢ãžã¥ãŒã«èå¥å*ã§ããã察å¿ãããªããžã§ã¯ãã¯ã¢ãžã¥ãŒã«ãäœæããããã®æ§æã§ãã
ã¢ãžã¥ãŒã«ãžã®ã¢ã¯ã»ã¹
ã¢ãžã¥ãŒã«ã€ã³ã¹ã¿ã³ã¹ãžã®ã¢ã¯ã»ã¹ã¯ã次ã®æ¹æ³ã§ååŸã§ããŸãã
var module = Jii.app.getModule('forum');
ã¢ãžã¥ãŒã«ã®ã€ã³ã¹ã¿ã³ã¹ãããã°ãã¢ãžã¥ãŒã«ã«ç»é²ãããŠãããã©ã¡ãŒã¿ãŒãšã³ã³ããŒãã³ãã«ã¢ã¯ã»ã¹ã§ããŸãã äŸãã°
var maxPostCount = module.params.maxPostCount;
çµè«ãšããŠ
以äžã§ã¯ãJiiã³ãŒã圢åŒã«é¢ãã調æ»ãææ¡ããŸãã JavaScript以å€ã®åœ¢åŒãéžæããå Žåã¯ããã®èšäºã®ãES6ã¯ã©ã¹ã§ã¯ãªãïŒCoffeeScript / TypeScriptã§ã¯ãªãïŒãã»ã¯ã·ã§ã³ã§èª¬æãããŠããåé¡ã®è§£æ±ºæ¹æ³ãã³ã¡ã³ãã§ç€ºããŠãã ããã
Jiiã¯ãªãŒãã³ãœãŒã¹ãããžã§ã¯ãã§ããããšãæãåºãããŠãã ãããã ãã誰ãããã®éçºã«åå ããŠãããããšãŠãå¬ããã§ãã affka@affka.ruã«æžã蟌ã¿ãŸãã
ãã¬ãŒã ã¯ãŒã¯ãµã€ã
-jiiframework.ruGitHub-
https://github.com/jiisoftæ©èœã®è°è«ã¯
githubã§è¡ãããŸã
æ°ã«å
¥ããŸãããïŒ GitHubã«
æãä»ããŠãã ããïŒ
èšäºã®ããã²ãŒã·ã§ã³