
åºæã®ä»£ããã«
ç§ã¯2幎éYiiã§ããã°ã©ãã³ã°ãããŠãããæè¿Symfonyãã¬ãŒã ã¯ãŒã¯2ãèŠã€ãå§ããŸãããäžéšãããèãæãããã¢ãŒããã¯ãã£ãã³ã³ããŒãã³ãã®åŒ±ãæ¥ç¶æ§ããã«ããããã¢ããªã±ãŒã·ã§ã³ã®æè»æ§ã«é äºãããŠããŸãã æ°ãããã¬ãŒã ã¯ãŒã¯ã®ã¡ã€ã³ããã€ã¹ãèŠã€ããçŽåŸããã®äžã«CMSãæ§ç¯ããããšã¯å¯èœããå®æãããã®ã䜿çšããããšããå¯èœã ããããšèããŸããã
ããã¯ã¹ãœãªã¥ãŒã·ã§ã³ã¯ãŸã çºæãããŠããŸããããã©ããããããç§ã¯Symfony CMFãããžã§ã¯ãã®Webãµã€ããããŸãããšãDrupalã®èšèšãåŒãåºãããã«çµç«ã©ã€ã³ã§äœæ¥ããŠãããšãã«ééããåé¡ã解決ããããã®äœç³»çãªã¢ãããŒãã«ãã®å Žã§ã¶ã€ãããŸããã Habréã«ã¯ãCMFã«é¢ããåºçç©ã¯ãªãããããžã§ã¯ãèªäœã¯ãŸã éåžžã«ç²éã§ãããå°æ¥ã¯ãã¹ãŠãããããããã«èŠããŸãããå Žæã«ãã£ãŠã¯äžæºããããŸãã
symfony cmf
Symfony CMFãããžã§ã¯ãã¯ãSymfony Framework 2ã䜿çšãããã¹ãŠã®äººã®CMSã«åºæã®æ©èœã®éçºãç°¡çŽ åããããã«èšèšãããŠããŸãã
ãããžã§ã¯ãã®äž»ãªæ©èœïŒ
- ã³ã³ããŒãã³ãã®æ¥ç¶æ§ãæªã
- æ¡åŒµæ§
- 䟿å©ã
- ãã¹ã¿ããªãã£
CMFãšããèšèã«æ³šç®ãã䟡å€ããããŸã-ãããžã§ã¯ãèªäœã¯CMSã§ã¯ãªãã ãã¬ãŒã ã¯ãŒã¯ã§ãã ãã¹ãŠã®ã³ã³ããŒãã³ããäºãã«å¯æ¥ã«çµã³ä»ããããŠããCMSãšã¯ç°ãªããSymfony CMFã§ã¯æ¬¡ã®ããšãã§ããŸãã
- 奜ããªãã®ã䜿ã
- æ°ã«å ¥ããªããã®ã眮ãæãã
- äžèŠãªãã®ãç¡èŠãã
ã€ãŸããã¿ãŒã³ããŒã¿ãŒã³ããŒã¢ããªã±ãŒã·ã§ã³ã§ã¯ãªããäžé£ã®ã¢ãžã¥ãŒã«åŒéçºããŒã«ãæäŸãããŠããŸãããCMSæ©èœãæäŸããåºæ¬çãªãã³ãã«ã¯ãã§ã«éçºãããŠããŸãã
ãªãå¥ã®CMFãªã®ãïŒ
ææïŒ1C-BitrixãUMIïŒãšç¡æïŒDrupalãMODxãWordpressãJoomlaïŒã®äž¡æ¹ã®æ¢è£œåãåžå Žã«åºåã£ãŠããã®ã¯ç§å¯ã§ã¯ãããŸããã ãããã£ãŠã CMS / CMFã®ç¢æãèŠããšãçåãçããã®ã¯åœç¶ã§ãããªãå¥ã®CMSãäœæããå¿ èŠãããã®ã§ããïŒ åœŒãã¯ãã§ã«ãšãŠããã£ã±ãã§ãã
ãããŠãç§ã¯çµ¶å¯Ÿã«åæããŸãã ãŠãŒã¶ãŒãšããŠã
CMSã¯æ¬åœã«1ããŒã¹ã§ãã ããããéçºè ãšããŠãç§ã¯ãã°ãã°æ±ãè¡ãæ¶ãæµããããããããã£ãšäœããåŸãããšããŸãããããã¯åºæ¬ã·ã¹ãã ãšãµãŒãããŒãã£ã®æ¡åŒµæ©èœã®äœè ã«ãã£ãŠå®ãããããã®ã§ã¯ãããŸããã§ããã
ååã«èããããŠããªãã¢ãŒããã¯ãã£ã®ãããæ¢æã®ãœãªã¥ãŒã·ã§ã³ã䜿çšããå Žåã次ã®ããšã«å¯ŸåŠããå¿ èŠããããŸãã
- ããžãã¯ãæ§æãã³ã³ãã³ããããã³ãã¬ãŒã³ããŒã·ã§ã³ã®æ確ãªåé¢ã®æ¬ åŠã Drupalã¢ãžã¥ãŒã«ãæãåºãã®ã«ååã§ã-ãã¡ã€ã«ã®æãç解ã§ããªãã°ããŒãã«é¢æ°ã®ããã·ã¥ãããã¯ãªã©ã ãšããã§ããã®åé¡ãè°è«ããè¯ãèšäº
- å€ãããŒãžã§ã³ããã®å€ãã®ã¬ã¬ã·ãŒã³ãŒããæ®ã£ãŠããŸãã éçºè ã¯æã ãããä¿®æ£ããããšè©Šã¿ãã«ãŒãã«ããã®ä»ã®åã³ãæžãçŽãããšãçŽæããŸãããæ°ããïŒæžãçŽãããïŒããŒãžã§ã³ãã䜿çšå¯èœã段éã«éãããŸã§ãå€ãã®æéãçµéããŸãã
- å€ãã®å Žåãã·ã¹ãã ã«ã¯éçºããã¹ããªã©ã®æŠå¿µã¯ãªããå±éçšã®ããŒã«ããããŸãã
- ãã£ãã·ã³ã°ã®åé¡ã ã©ããã«ãªããã©ããã«ããããååãªæè»æ§ãæäŸããŠããªããé害ã«åé¡ãããããŸãã¯åã«ä¿åããªããªã©
- 倧èŠæš¡ïŒãã®å Žåã¯çžå¯ŸçãªçšèªïŒããŒã¿ããªã¥ãŒã ã§ã®äœããã©ãŒãã³ã¹
- ç¬èªã®ã³ã³ããŒãã³ãã®äœæãæ¢åã®ã³ã³ããŒãã³ãã®ãªãŒããŒã©ã€ããå°é£
- äºåå®çŸ©ãããããŒã¿åããéžæããå¿ èŠããããŸãããªã¬ãŒã·ã§ãã«DBMSã®äžã«EAVãªããžããªãããããããã«æªã
- CMSã®äœè ãçºæããäžå¿«ãªãã³ãã¬ãŒããã€ã¯...
- ...ãããŠããã¯ãã¹ãŠNIHçå矀ã®çµæãšããŠã
ãããã®ã·ã¹ãã ã®éçºè ã¯æ¬ ç¹ãèªèããŠãããç³ãç«ãŠãæåŠããŸããããçŸæç¹ã§ã¯ããããã¹ãŠã®åé¡ã解決ããããšã¯äžå¯èœã§ãã ããããç§ãã¡ã¯ãŸã£ããèªããŸããããŠãŒã¶ãŒã®å©äŸ¿æ§ã®ããã«CMSã解決ãã¹ãå€ãã®åé¡ãå®åŒåããSymfony CMFã§ãããã®åé¡ãã©ã®ããã«è§£æ±ºããããã確èªããŸãã åé¡ã¯æ¬¡ã®ãšããã§ãã
- ããŒã¿ã¹ãã¬ãŒãž
- ãã³ãã¬ãŒãã·ã¹ãã
- ã«ãŒãã£ã³ã°ãCNCãããã³ãŠãŒã¶ãŒãããããã¹ãŠå¶åŸ¡ããæ¹æ³
- ã¡ãã¥ãŒèšå®
- ã³ã³ãã³ã管çïŒããŒãžäžã®ç·šéå¯èœãªãããã¯ãã©ã€ããµã€ãã§ã®ããã³ããšã³ãç·šéããã¡ã€ã«ã®ã¢ããããŒãïŒ
- åœéå
- è¯ã管çè
åé¡ããå§ããŸãããã
ããŒã¿ã¹ãã¬ãŒãžã®åé¡
CMSã®æŠå¿µã®å®éã®è§£éã«åºã¥ããŠãCMSã®æãéèŠãªã³ã³ããŒãã³ãã¯ããŒã¿ã¹ãã¬ãŒãžã§ããããšãæããã«ãªããŸãã ããã«-CMSã¯ãç°ãªãããããã£ãæã€ããŒã¿ã¹ãã¬ãŒãžãæäŸããå¿ èŠããããŸã ã ããšãã°ãBlogPostãNewsItemãªã©ã®è³æã®å Žåãå ±éã®
title
ãã£ãŒã«ããš
body
ãã£ãŒã«ããäœæã§ããŸãããããããšãéããçããŸãããã¥ãŒã¹ã«åçãæ·»ä»ããå¿ èŠãããå ŽåããããŸãã
ãªã³ã©ã€ã³ã¹ãã¢ãæ³åããŠãã ããã ããŒã¿ããŒã¹ã«ã¯äœãä¿åãããŠããŸããïŒ å°ãªããšãã補åã®èª¬æãšæ³šæå±¥æŽã 1ã€ç®ãšã¯ç°ãªãã2ã€ç®ã®ã¹ãã¬ãŒãžã¹ããŒã ãèšèšããæ¹ãã¯ããã«ç°¡åã§ãããäž¡è ãªãã§ã¯äž¡æ¹ãååšã§ããªãããšã¯æããã§ãã ãããã£ãŠã次ã®èŠä»¶ïŒ CMSã¯ãCMSå ãšã·ã¹ãã ã®ä»ã®éšåã®äž¡æ¹ã®ã³ã³ãã³ãã«ãªã³ã¯ã§ããå¿ èŠããããŸã ã
ãµã€ãäžã®ã³ã³ãã³ãèªäœã¯ãã»ãšãã©ã®å Žåããã¡ã€ã«ã·ã¹ãã ã幟åç¹°ãè¿ãããªãŒæ§é ã®åœ¢åŒã§ç·šæãããŠããŸãã ãµã€ãã®äœæè ã¯åæã«ãããŒãºã«å¿ããŠããŸããŸãªæ¹æ³ã§ã³ã³ãã³ããæŽçããã¡ãã¥ãŒãè³æã®ã¢ãã¬ã¹ãæè»ã«æ§æããããšèããŠããŸãã ãããã£ãŠã CMSã¯ããŒã¿ãããªãŒæ§é ã§æ瀺 ããåæã«è€æ°ã®ç¬ç«ããããªãŒã«å¯Ÿå¿ã§ããå¿ èŠããããŸã ã
ãŠãŒã¶ãŒãCMSã§è©°ãŸãããæ å ±ããçæ³çãªæ§é ã«ãªã£ãŠããããšã¯ã»ãšãã©ãããŸããã å Žåã«ãã£ãŠã¯ã1ã€ãå¥ã®ã3çªç®ã10çªç®ã®ãã£ãŒã«ããè¿œå ããå¿ èŠãããå ŽåããããŸããCMSã¯ãã³ã³ãã³ãã«å¯ŸããŠåäžã®ã¹ããŒã ã®äœ¿çšã匷å¶ããã¹ãã§ã¯ãããŸãã ã
倧èŠæš¡ãªçµç¹ã§ã¯ãã¯ã³ã¯ãªãã¯ã§å ¬éããã®ã§ã¯ãªãããµã€ãã«è¡šç€ºãããåã«ããã€ãã®æ€èšŒæ®µéãçµãããšãçãããããŸãããCMS ã¯ããªãŒéã®ã³ã³ãã³ãã®ç§»åãšãšã¯ã¹ããŒãããµããŒãããå¿ èŠããããŸãã ãããŠãç©èªã®ããã«ããã€ã§ã埩å ã§ããã³ã³ãã³ãã®ããŒãžã§ã³ãä¿æããŠãããšããã§ãããã
ä»ã®åœãå°åã®ãŠãŒã¶ãŒã«ã€ããŠèŠããŠãã䟡å€ããããŸãã éåžžãWebãµã€ãå šäœãå¥ã®èšèªã«ç¿»èš³ããå¿ èŠã¯ãããŸãããã CMSã¯ãç°ãªãèšèªã§ã³ã³ãã³ãã衚瀺ããæ©èœãæäŸããæå®ãããã«ãŒã«ã«åŸã£ãŠãªãã·ã§ã³ã®ãã©ãŒã«ããã¯ãæäŸããå¿ èŠããããŸã ã
ã³ã³ãã³ããå€ãããå Žåã¯ã å šææ€çŽ¢ ã ãµãããªãŒãžã®ã¢ã¯ã»ã¹ãå¶åŸ¡ããããã®ã«ãŒã«ã決å®ããæ©èœãããã³è€æ°ã®äœæè ã«ããããã¥ã¡ã³ãã®å ¬éããã»ã¹ã®æ¯æŽãå¿ èŠã«ãªããŸãïŒã¯ãŒã¯ãããŒã¯ãã¹ãŠã®ãŠãŒã¶ãŒã§ç°ãªããŸãïŒã
ã³ã³ãã³ããªããžããª
1ã€ã®ãçèããåãé€ãããšãã§ããªãããšãæããã«ãªããŸãã ãªã¬ãŒã·ã§ãã«ããŒã¿ããŒã¹ã¯åçŽã«ãã®ãããªã¿ã¹ã¯ã«å¯ŸåŠã§ããŸããããã°ã©ãæ§é ããã©ããããŒã¿ããŒã¹ã«æ ŒçŽã§ãããããªã¢ã©ã€ãºããã¹ããã¹ãã»ãããªã©ã®ã¢ã«ãŽãªãºã ããããŸãã ããããåäžã®å®è£ ãæ©èœããå Žåã§ããç¹å®ã®ãšã³ãžã³ã«å³å¯ã«çµã³ä»ããããŠããå¯èœæ§ãé«ããããã¯ãã§ã«ç§ãã¡ã®èªç±ãšæè»æ§ã奪ã£ãŠããã®ã§ããã§ã«æªãããšã§ãã RDBMSãéé£ããå¿ èŠã¯ãããŸãã-ãããã¯å®å šã«ç°ãªãã¿ã¹ã¯ã®ããã«èšèšãããŠããã匱ãæ§é åãããèŠçŽ ã§æ§æãããããªãŒã§ã¯ãªããæ確ã«èšè¿°ãããããŒã¿ãå¿ èŠã§ãã
ãã ããåæºããããšã¯ãããŸãããçµå±ããã«ãžã§ã¢èªãé³èš³ãããšãã³ã³ãã³ããªããžããªããŸãã¯ã³ã³ãã³ããªããžããªãé·ãéèããŠããŸããã ãªããžããªã¯ãããŒã¿ãå¿ èŠãšããã¢ããªã±ãŒã·ã§ã³ã«é¢ä¿ãªããããŒã¿ã®èªã¿åããæžã蟌ã¿ãããã³ååŸã«ã¢ã¯ã»ã¹ã§ããããã«èšèšãããŠããŸãã å®éãããã¯äž»ã«ããŒã¿åŠçã®è«ççãªåŽé¢ã«éç¹ã眮ããããŒã¿ãŠã§ã¢ããŠã¹ã§ãã
JCR-170
ããã¥ã¡ã³ãæåã·ã¹ãã ã®ããŒã¿ã¹ãã¬ãŒãžã®åé¡ã¯äœå¹Žãåã«çºçããããã2000幎代ååã«ãDay SoftwareïŒã€ãŸãDavidNÃŒschelerïŒã®äººã ãJava Community Processãä»ããŠJavaã®Content Repository APIïŒJCRïŒä»æ§ãåãå ¥ããèŠæ±ãæåºããŸããããã®åŸãä»æ§ã¯çªå·JSR-283ïŒ2.0ïŒãJSR-333ïŒ2.1ãæçµãã©ããã¯8æ31æ¥ã«å®æïŒã§è¡ãããŸãããããããŸã§ã¯æåã®ãªãã·ã§ã³ãžã®ãªã³ã¯ãããäžè¬çã§ããã
ä»æ§ã«ããã°ããªããžããªã¯ãéå±€ããŒã¿ã®ä¿åãæ€çŽ¢ãæ€çŽ¢ãæäŸãããªããžã§ã¯ãããŒã¿ããŒã¹ã§ãã ããã«ãæäŸãããŠããAPIã䜿çšãããšãããŒã¿ã®ããŒãžã§ã³ç®¡çããã©ã³ã¶ã¯ã·ã§ã³ãå€æŽã®è¿œè·¡ãXMLã§ã®ã€ã³ããŒã/ãšã¯ã¹ããŒããããã³ãã€ããªãšã¡ã¿ããŒã¿ã®ä¿åã䜿çšã§ããŸãã
ãã®ãããªãªããžããªã¯ãããããã£ãæã€ããŒãã®ããªãŒãšããŠç·šæãããŸãã ããŒã¿ã¯ãããã«çŽæ¥æ ŒçŽãããæ°å€ãæååããŸãã¯ä»»æã®é·ãã®ãã€ããªããŒã¿ã«ããããšãã§ããŸãã ããŒãã¯ãã¿ã€ãã«çŽ°ååãããåããŒããç¹å®ã®åäœç¹æ§ããŸãã¯åçŽã«é£æ¥ããŒããåç §ã§ããŸãïŒç¹å¥ãªããããã£ãšåããŒããæã€äžæã®èå¥åã䜿çšïŒã
ä»æ§ã®2çªç®ã®ããŒãžã§ã³ããããªããžããªã¯SQLã¯ãšãªã«å¿çã§ããããã«ãªããŸããããã¯ãæåã®ãšãã£ã·ã§ã³ã®XPathã®å¯Ÿå¿ããã䟿å©ã§ãã
ãã®ãããªå¹žçŠã®å®çŸã®é®®ãããªäŸãšããŠãJavaã§æžããããªãŒãã³ãœãŒã¹ã®ãªããžããªã§ããApache Jackrabbitãããžã§ã¯ããéžã³åºãããšãã§ããŸãã äžèšã®ãã¹ãŠã®å©ç¹ã«å ããŠããã®ãããžã§ã¯ãïŒ2004幎ã«JCR APIã®åæå®è£ ãšããŠå§ãŸã£ãïŒã¯ãã³ã³ãã³ããžã®ã¢ã¯ã»ã¹ãæè»ã«å¶åŸ¡ã§ããŸãã ã¯ã©ã¹ã¿ãªã³ã°ãããã¯ã¡ã«ããºã ãªã©ããããŸãããä»ã¯ããŸãé¢çœããªãã®ã§ã¹ãããããŠãã ããã
PHPCR
ãããã誰ããJavaã§æžãããã§ã¯ãããŸããïŒ ïŒãã®ããŒãã«é¢ãããžã§ãŒã¯ãçç¥ããŸãïŒ
ç§ãã¡ã®ãããªäººã®ããã«ãPHPã®ã³ã³ãã³ããªããžããªãäœæãããŸãã-äžèšã®JCR APIã¯ãPHPã®ã¹ã¿ã€ã«ã«é©åããŠããŸãã APIãåãã§é©åã«æå®ãããŠãããšããäºå®ã«åºã¥ããŠã次ã®ããã«ãªããŸããã¢ããªã±ãŒã·ã§ã³ã1åäœæããŠãããããã¯ãšã³ããå€æŽããã ãã§ãïŒãã¡ãããçè«çã«ã¯ïŒã
éèŠãªãã©ã¹-ç§ãã¡ã¯èªè»¢è»ãçºæããŸããïŒèŠããŠããããã«ãCMSã®ããŒã¿ã¹ãã¬ãŒãžã®åé¡ã¯æ¢ã«è§£æ±ºãããŠããããïŒã
ãã¡ããããã®ãããªã€ãã·ã¢ããã¯èŠéããããããšã¯ãããŸããã§ãã-ããããã¯ã JCR 2.1ã§ã®PHPCRã®æ¡çšã®ãªã¯ãšã¹ããéä¿¡ããŸãã ã ãšãŠãããã
APIãJavaããPHPã«ç§»æ€ããŠç§»æ€ããããšã¯ã§ããªããããå®è£ ã«ã¯ãŸã éãããããŸãã èŠããã«ãããã¯PHPã®åæå®ã匱ããã¡ãœããã®ãªãŒããŒããŒãããµããŒãããŠããªããšããäºå®ã«ãããã®ã§ãã ãã®ãããäžéšã®ã€ã³ã¿ãŒãã§ã€ã¹ãšé¢æ°ã¯åçŽã«äžèŠãªãã®ãšããŠç Žæ£ããããªãŒããŒããŒããçºçããå Žåãã¡ãœããã¯ãªãã·ã§ã³ã®åŒæ°ãè¿œå ããŸããã éãã¯ããã§è©³çŽ°ã«èª¬æãããŠããŸãããããã«ã²ã©ããã®ã¯äœããããŸããã
çŸåšãPHPCRã¯æ¬¡ã®æ©èœããµããŒãããŠããŸãã
- ããªãŒã¢ã¯ã»ã¹
- UUIDã«ããããŒããžã®ã¢ã¯ã»ã¹
- ããŒãã§æ€çŽ¢
- ããŒãžã§ãã³ã°
- æ©äŒã®ç¹å®
- XMLãžã®ã€ã³ããŒããšãšã¯ã¹ããŒã
- ããã¯
- ãã©ã³ã¶ã¯ã·ã§ã³*
- èš±å¯
- ã¢ã¯ã»ã¹å¶åŸ¡*
- å€æŽè¿œè·¡
ïŒ*ïŒ-Jackalope-Jackrabbitã§ã¯ãŸã å®è£ ãããŠããŸããïŒè©³çŽ°ã¯ä»¥äžãåç §ïŒããã ããæ å ±ã¯å°ãå€ããªã£ãŠããå¯èœæ§ããããŸãã
PHPCRã®äž»èŠãªæŠå¿µ ïŒ
- ãã¹ãŠã®ã³ã³ãã³ãã¯ããŒãããªãŒã«æ ŒçŽãããŸã
- ããŒãã«ã¯ååãšã¿ã€ãããããŸã
- ããŒãã«ã¯ãå€ãä¿åããããŒã¿ãŒããŒããšããããã£ããããŸã
- ããããã£å€ã«ã¯ãæ°å€ãæååããã€ããªãªããžã§ã¯ããããã³ä»ã®ããŒããžã®ãªã³ã¯ãæ ŒçŽã§ããŸã
ã©ããã§ãã§ã«èããããšããããŸãããïŒ
ãã®ãããªãªããžããªãã©ã®ããã«èŠãããèŠãŠã¿ãŸãããïŒãã¡ãããæŠç¥çã«ïŒïŒ
<root> <cms> <pages> <home title="Hello"> <block title="News" content="Today: PHPCR presentation"></block> </home> <contact title="Contact" content="phpcr-users@groups.google.com"></contact> </pages> </cms> </root>
ä»ã®ãšããè¶ èªç¶çãªãã®ã¯ãããŸããã
äœæ¥ã«å¿ èŠãªãã®ã«ã€ããŠããå°ã詳ããèããŠã¿ãŸãããã
çµã³ç®
- ããŒãã¯åžžã«èŠªãæã€ååä»ãã³ã³ããã§ã
- XMLèŠçŽ ãæãåºããã
- ããŒããäœæãåé€ãå€æŽãã³ããŒã§ããŸã
- ããŒããã¹ã¯ã芪ããŒãã®ãã¹ãšçŸåšã®ããŒãã®ååã§æ§æãããŸãã
- ãã¹ïŒ/ cms / pages / home
- 芪ãã¹ïŒ/ cms / pages
- ãã¹ãåïŒããŒã
ããŒãã®ããããã£
- ããŒãã«ã¯å€ãä¿åããååä»ãããããã£ããããŸã
- XMLå±æ§ãé£æ³ããã
- ããŒã¿åïŒSTRINGãURIãBOOLEANãLONGãDOUBLEãDECIMALãBINARYãDATEãNAMEãPATHãWEAKREFERENCEãREFERENCE
- åç §ã¿ã€ãïŒåŒ±ïŒã¯ãä»ã®ããŒããžã®ãªã³ã¯ãäœæããŸã
- ããŒããšããããã£ã¯åå空éãæã€ããšãã§ããŸãïŒ
jcr:created
ãjcr:mimeType
ãphpcr:class
ããŒãã®äž»ãªã¿ã€ã
- 䜿çšãèš±å¯ãããååãããã³ããããã£ãšåããŒãã®ã¿ã€ããå®çŸ©ããŸã
- åããŒãã«ã¯åºæ¬ã¿ã€ããèšå®ãããŠããå¿ èŠããããŸã
-
nt:unstructured
ãäœã§ãã¹ãã¬ãŒãžã«äœ¿çšãããŸã
- ä»ã®çµã¿èŸŒã¿ã¿ã€ãã«ã¯ãntïŒã¢ãã¬ã¹ãntïŒãã©ã«ããŒãntïŒãã¡ã€ã«ãªã©ããããŸãã
- ç¬èªã®ã¹ããŒã ãäœæããã«ã¯ãæ°ããã¿ã€ãã®ããŒããå®çŸ©ã§ããŸã
ããã¯ã¹ã€ã³ããŒãã¿ã€ã
- åºæ¬åã«ã¯å€éç¶æ¿ããããŸãã
- ãã ããããŒãã«ç¹æ§ã®ãããªæ©èœãè¿œå ããããã¯ã¹ã€ã³ã¿ã€ãããããŸã
- ããã¯ã¹ã€ã³ã¿ã€ãã¯ããã®åç¶æéäžã«ããŒãã«å²ãåœãŠãããšãã§ããŸã
äŸïŒäžæã®èå¥åãæ ŒçŽãã
jcr:uuid
ããããã£ããããšããŸãã uuidãç¥ã£ãŠã
mix:referenceable
mix:versionable
äœæããããã«åºã¥ããŠ
mix:versionable
ãäœæã§ããŸãïŒãã ããããããã£
jcr:versionHistory
ã
jcr:predecessors
ã
jcr:baseVersion
ã
jcr:isCheckedOut
ã
jcr:mergeFailed
ãªã©ã
jcr:mergeFailed
ã§ãã ïŒ
ã¯ãŒã¯ã¹ããŒã¹
- è€æ°ã®ã¯ãŒã¯ã¹ããŒã¹ããããããããã«ããŒãã®ããªãŒããããŸã
- Unixãã¡ã€ã«ã·ã¹ãã ã«äŒŒãŠãããGit / SVNã®ãã©ã³ãã§ãããããã¯ããŒã³ãšããŒãžãå¯èœ
- åç¬ã§äœ¿çšã§ããŸã

ãããŠä»ãããããã¹ãŠãæ±ãæ¹æ³ã®ããã€ãã®äŸïŒ
ã»ãã·ã§ã³äœæ
use PHPCR\SimpleCredentials; // , use Jackalope\RepositoryFactoryJackrabbit as Factory; $parameters = array( 'jackalope.jackrabbit_uri' => 'http://localhost:8080/server', ); $repository = Factory::getRepository($parameters); // $creds = new SimpleCredentials('admin','admin'); $session = $repository->login($creds, 'default');
CRUDæäœ
$root = $session->getRootNode(); // $node = $root->addNode('test', 'nt:unstructured'); // $node = $session->getNode('/test'); // / $node->setProperty('prop', 'value'); // $session->save(); // $node->remove(); // , - $session->save();
æšã®æ£æ©
$node = $session->getNode('/site/content'); foreach ($node->getNodes() as $child) { var_dump($child->getName()); } // foreach ($node as $child) { var_dump($child->getName()); } // foreach ($node->getNodes('di*') as $child) { var_dump($child->getName()); }
ããŒãžã§ãã³ã°
// $node = $session->getNode('/site/content/about'); $node->addMixin('mix:versionable'); $session->save(); // $node->setProperty('title', 'About'); $session->save(); // - ( ) // - ( ) // $session->save() $vm = $session->getWorkspace()->getVersionManager(); $vm->checkpoint($node->getPath()); // $node->setProperty('title', 'Ups'); $session->save(); // , « » $vm->checkin($node->getPath()); $base = $vm->getBaseVersion($node->getPath()); $current = $base->getLinearPredecessor(); $previous = $current->getLinearPredecessor(); // $frozenNode = $previous->getFrozenNode(); echo $frozenNode->getProperty('title'); // About // $vm->restore(true, $previous); $node = $session->getNode('/site/content/about'); echo $node->getProperty('title'); // About
æ€çŽ¢ãã
$qm = $workspace->getQueryManager(); // SQL2 "*" // // (. http://docs.jboss.org/exojcr/1.12.13-GA/developer/en-US/html/ch-jcr-query-usecases.html#d0e3332) $sql = "SELECT * FROM [nt:unstructured] WHERE [nt:unstructured].type = 'nav' AND ISDESCENDANTNODE('/some/path') ORDER BY score, [nt:unstructured].title"; $query = $qm->createQuery($sql, 'JCR-SQL2'); $query->setLimit($limit); $query->setOffset($offset); $queryResult = $query->execute(); foreach ($queryResult->getNodes() as $node) { var_dump($node->getPath()); }
ä»ã®ã³ãŒãäŸã¯ããã®ãã¬ãŒã³ããŒã·ã§ã³ã§èŠã€ããããšãã§ããŸãã
ãã ããããŸããŸãªããã¯ãšã³ãã®é åçãªèãã«æ»ããŸãã
çŸåšãå€ãã®å®è£ ã¯ãããŸãããããããã¯ãã§ã«èå³æ·±ããã®ã§ãã
- Midgard2 PHPCR
- ãžã£ãã«ããŒã
- ãžã£ãã¯ã©ãããããµããŒã
- Doctrine DBALïŒãªã¬ãŒã·ã§ãã«ããŒã¿ããŒã¹äžã®ããŒã¿ã¹ãã¬ãŒãžïŒããµããŒãããŸã
- MongoDBããµããŒãããŸãïŒå®éã¯ããã§ã¯ãããŸããïŒ
Midgard2 PHPCR
Midgard2ã¯ãCãPythonãããã³PHPã®ãã€ã³ããŒãåãããªãŒãã³ãœãŒã¹ã®ã³ã³ãã³ããªããžããªã§ãã
JCRãšã¯å°ãç°ãªãçšèªã§ããMidgard2ã¯ã php5-midgard2æ¡åŒµã䜿çšããŠMidgard2 PHPCRãä»ããŠã³ã³ãã³ãã«ã¢ã¯ã»ã¹ããããã®åãæ©èœãæäŸããŸãã libgda GNOMEã©ã€ãã©ãªã®äžã«æ§ç¯ãããMidgard2ã¯ããªããžããªããã¹ãã§ãããªã¬ãŒã·ã§ãã«ããŒã¿ããŒã¹ã®å°è±¡çãªãªã¹ããä¿æããŠããŸãã
ç§ã¯ããã«è»èã®ãã©ã€ã«ã€ããŠèšããŸã-PHPæ¡åŒµã¯ããªãå°æ°ã®ãªãã¬ãŒãã£ã³ã°ã·ã¹ãã çšã«æ§ç¯ãããŠããŸãïŒ
- Debian 7 Wheezyã®äžã§ã¯ãããã±ãŒãžã¯ãŸã äžå®å®ãªãã©ã³ãã«ãããŸãïŒåœç¶ãPHP-FPMãã»ã°ã¡ã³ããŒã·ã§ã³éåã«éãã«èœãšããŸãïŒã
- CentOSã®å Žåãããã±ãŒãžã¯ãã¹ãŠã®ã¢ãŒããã¯ãã£ã§å€ããªã£ãŠãããããã¹ãŠã§ã¯ãããŸããïŒãã ãããã®å Žåãåäœããå¯èœæ§ãéåžžã«é«ããæãå±ããŸããã§ããïŒ
- Windowsäžã®ãã«ãã¯èªç¶ã«ã¯ååšããŸããïŒããããããgnomesãã¯Midgard2èªäœã®ã«ãŒãã§ããã4幎åã®ãªããžããªå ã®ãã¡ã€ã«ã¯PHP4ã§ã衚瀺ãããŸãïŒ
- Mac OSãäžè¶³ããŠãããããMac OSã§ãã¹ãããããšã¯ã§ããŸããã§ããïŒãã ãããµã€ãã«ãããšããã¹ãŠã¯brewã§èšå®ãããŠããŸãïŒã
äžè¬çã«ããã¹ãŠãUbuntu Server 12.04ã«æ£åžžã«ã€ã³ã¹ããŒã«ãããããã±ãŒãžã¯ããã«æ°ãããäœãã¯ã©ãã·ã¥ããŸããã
ããããIRCã§Symfony CMFéçºè ãšè©±ããããšããããã®ããã¯ãšã³ããããã€ããŒãæ°ãæéå£ããŠããããã¹ããç¡å¹ã«ãªã£ãŠããããšãæããã«ãªããŸããã ãã®çç±ã¯ãMidgard2ããŒã ã®ã©ããã«ãããŸãããBergieã¯ä¿®æ£ããããšãçŽæããŸããã

Midgard2 PHPCRãSymfony CMFã§åäœãããããšãã§ããŸããã§ããã ãã¶ãä»ã®èª°ããæåããã§ãããã ä»ã§ã¯ãªãããã®åŸã
ãžã£ãã«ããŒã
ååã§ãŠãµã®ã®ããŒãïŒ Jackrabbit ã Jackalope ïŒãç Žãç¶ããããšã§ãJackalopeã¯3çš®é¡ã®ããŒã¿ãŠã§ã¢ããŠã¹ãžã®ã¢ã¯ã»ã¹ãæäŸããŸãã
- ããã¯ãã§ã«ç§ãã¡ã«ç¥ãããŠããŸãApache Jackrabbit
- Doctrine Database Abstraction Layerãããã«ããããµããŒããããŠããDBALãšã³ãžã³ã䜿çšã§ããŸãã ããã¯çè«äžãå®éã«ã¯ãMySQLãPostreSQLãããã³SQLiteã®ã¿ããã¹ããããŠããŸãïŒä»ã®äœãã䜿çšããŠããŸããïŒïŒã
- MongoD ïŒ2幎éæŽæ°ãããŠããªããç ŽæãŸãã¯ç¡é¢ä¿ã§ããå¯èœæ§ãé«ãïŒ
JackalopeïŒç¹ã«jackalope-jackrabbitïŒã¯éåžžã«å®å®ããŠãããæ©èœã®é¢ã§æãå®å šãªPHPCR APIå®è£ ãšããŠã®äœ¿çšãæšå¥šãããŸãã 圌女ãšäžç·ã«åããŸãã ãã ããPHPCR APIã®å¯çšæ§ãšæ©èœã確èªããphpcr-api-testsãjackalope-doctine-dbalã«å«ãŸããŠãããæéãçµã€ã«ã€ããŠè¿œãã€ãå¯èœæ§ããããŸãã
PHPCRã®æŠèŠ
ãã®ãããJCR APIæšæºã«æºæ ããã³ã³ãã³ããªããžããªã«ã¢ã¯ã»ã¹ããããã®ïŒPHPã«é©åããïŒAPIããããŸãã ãã®APIã®ããã«ãããŒã¿ãŠã§ã¢ããŠã¹ããã¢ããªã±ãŒã·ã§ã³ã³ãŒããæœè±¡åããããã€ãã®ã©ã€ãã©ãªãéçºãããŸããã
ãããŸã§ã®ãšããã2ã€ã®äž»èŠãªè³ªåãçºçããã¯ãã§ãããäž¡æ¹ãšãåçãããŸãã
PHPCRã䜿çšããå Žå
- éå±€ããã²ãŒã·ã§ã³æ§é ã䜿çšããå Žå
- çžäºã«é¢é£ããããŒã¿ãããå Žå
- ããŒã¿ã®ããŒãžã§ã³ç®¡çãå¿ èŠãªå Žå
PHPCRã䜿çšããªãå Žå
å³å¯ã«æ§é åãããã³ã³ãã³ããšéçŽã¯ãšãªã®äœ¿çšã«ã¯ããªã¬ãŒã·ã§ãã«ããŒã¿ããŒã¹ã䜿çšããããšããå§ãããŸãã ããšãã°ããªã³ã©ã€ã³ã¹ãã¢ã§ã¯ã補åã®èª¬æãPHPCRã«ä¿åãã泚æãRDBMSã«ä¿åã§ããŸãã
PHPCR ODM
ä»æ§ã¯åªããŠããŸãããAPIã¯æœè±¡çã§ãããæ¥åžžçã«äœ¿çšããã«ã¯äžäŸ¿ã§ãïŒçµå±ãã»ãšãã©ã¯äœããã®ORMã·ã¹ãã ã«äœ¿çšãããŠããŸãïŒã ãããŠãPHPCRãšObject Document Mapperã®æã§ããPHPCR ODMãããžã§ã¯ãããããŸãã
SF2ïŒSF2ã ãã§ãªãïŒã䜿çšããéçºè ã«éŠŽæã¿ã®ããDoctrine ORMã¯ã ããŒã¿ããããŒãã¿ãŒã³ãå®è£ ããŠRDMBSã«ä¿åãããããŒã¿ã«ã¢ã¯ã»ã¹ããŸãã
ODMã¯ãDoctrine ORMãšåæ§ã«ãããŒã¿ããããŒã䜿çšããŠãããžãã¹ããžãã¯ãããŒã¿ã¹ãã¬ãŒãžå±€ïŒãã®å Žåã¯ã³ã³ãã³ããªããžããªïŒããå®å šã«åé¢ããŸãã èè ã¯ãODMãHibernateã®ã¢ã€ãã¢ã«è§ŠçºãããŠããããšãæ£çŽã«èªããŠããŸãã
ODMã¯ãªããžã§ã¯ããPHPCRããŒããšããŠä¿åããããã¥ã¡ã³ããšåŒã³ãŸãã åæã«ãPHPCRã¯ãã§ã«å®è£ ã«äŸåããŠããªããããæ°ããããŒã¿ããŒã¹æœè±¡åå±€ïŒDBALïŒãèšè¿°ããå¿ èŠã¯ãããŸããã
PHPCR ODMçšèªææžãšã¯äœã§ããïŒ
ãã®ããã¥ã¡ã³ãã¯ãã€ã³ã¿ãŒãã§ã€ã¹ãå®è£ ããªãç°¡æœãªPHPã¯ã©ã¹ã§ããïŒãŸãã¯ããã€ã§ãå®è£ ã§ããŸãããã©ã€ãã©ãªèªäœã¯ãããå¿ èŠãšããŸããïŒãããã€ãã®åºæ¬çãªæœè±¡ã¯ã©ã¹ããç¶æ¿ãããŸããã ãã®ãããªãšã³ãã£ãã£ã«ã¯ã
final
ããŒã¯ãŒãã
wakeup()
ã¡ãœããã
clone()
ããã³
wakeup()
ã¡ãœããã®å®è£ ããŸãã¯å®è£ ã¯ãã¹ãã§ã¯ãããŸãããã æ éã«è¡ãå¿ èŠããããŸãã ãšã³ãã£ãã£èªäœã¯ãã¹ãã¬ãŒãžã«ã³ããããããããããã£ã§æ§æãããŸãã ODMã¯åºæ¬æ©èœïŒã¯ã©ã¹ã®ã¢ãããŒã·ã§ã³ããã£ãã·ã³ã°ãããã³ãªãŒãããŒãïŒãå®è£ ããDoctrine Commonã©ã€ãã©ãªã®äžã§å®è¡ããããããã¯ã©ã¹ã®ããããã£ãžã®ããŒã¿ãŠã§ã¢ããŠã¹ã®ããããã£ã®ãããã³ã°ã¯ãPHPã³ã¡ã³ããŸãã¯YAML / XMLã³ã³ãã£ã°ã¬ãŒã·ã§ã³ã®ã¢ãããŒã·ã§ã³ãéããŠãããç¥ãããæ¹æ³ã§è¡ãããŸãã åããã¥ã¡ã³ãã«ã¯ã¿ã€ãã«ãšã¿ã€ãã«ããããŸãã ãã¹ãŠã®ããã¥ã¡ã³ãã¯ããªãŒã§ç·šæãããä»ã®ããã¥ã¡ã³ããåç §ã§ããŸãã ãµã³ãã«ããã¥ã¡ã³ããã芧ãã ããã
namespace Demo; use Doctrine\ODM\PHPCR\Mapping\Annotations as PHPCRODM; /** * @PHPCRODM\Document */ class MyDocument { /** * @PHPCRODM\Id */ private $id; /** * @PHPCRODM\ParentDocument */ private $parent; /** * @PHPCRODM\Nodename */ private $name; /** * @PHPCRODM\Children */ private $children; /** * @PHPCRODM\String */ private $title; /** * @PHPCRODM\String */ private $content; // }
泚éã¯ãéåžžã®ããŒã¿åïŒããšãã°ãStringïŒã«å ããŠãåããã¥ã¡ã³ããŸãã¯èŠªããã¥ã¡ã³ããžã®ãªã³ã¯ã®ã¿ã€ããæå®ã§ããããšã«æ³šæããŠãã ããã
ããŒã¿ããããŒãã¿ãŒã³ã«æ £ããŠããªã人ã«ãšã£ãŠã¯ããã®ãããªã¯ã©ã¹ã¯ã¢ã¯ãã£ãã¬ã³ãŒã ïŒhiãrailsãYii-shnikiïŒã«å°ã䌌ãŠããããã«èŠãããããããŸãããããããã«ããŠãåãã§ã¯ãããŸããã
ãã®ãããªããã¥ã¡ã³ããã©ã®ããã«äœ¿çšããŸããïŒ
require_once '../bootstrap.php'; // $rootDocument = $documentManager->find(null, '/'); // $doc = new \Demo\Document(); $doc->setParent($rootDocument); $doc->setName('doc'); $doc->setTitle('My first document'); $doc->setContent('The document content'); // , $childDocument = new \Demo\Document(); $childDocument->setParent($doc); $childDocument->setName('child'); $childDocument->setTitle('My child document'); $childDocument->setContent('The child document content'); // , $documentManager->persist($doc); $documentManager->persist($childDocument); // , .. $documentManager->flush();
require_once '../bootstrap.php'; $doc = $documentManager->find(null, "/doc"); echo 'Found '.$doc->getId() ."\n"; echo 'Title: '.$doc->getTitle()."\n"; echo 'Content: '.$doc->getContent()."\n"; foreach($doc->getChildren() as $child) { if ($child instanceof \Demo\Document) { echo 'Has child '.$child->getId() . "\n"; } else { echo 'Unexpected child '.get_class($child)."\n"; } } // $documentManager->remove($doc); $documentManager->flush();
å°ããªã¡ã¢-ORMã§ã¯ãã¯ãšãªã䜿çšããŠããŒã¿ãåä¿¡ããã®ãäžè¬çã§ãã ODMã§ã¯ãããã«éå±€ã䜿çšããå¿ èŠããããŸãã ãã ããæ¬åœã«å¿ èŠãªå Žåã¯ãªã¯ãšã¹ããè¡ãããšãã§ããŸãã
PHPCR ODMã¯ãããŒãžã§ã³ç®¡çãšå€èšèªäž»çŸ©ãšãã2ã€ã®éåžžã«éèŠãªæ©èœãæ¢ã«å®è£ ããŠããŸãã æåã®ãã®ããå§ããŸãããã
PHPCRã«ã¯ãsimpleVersionableãšversionableã®2çš®é¡ã®ããŒãžã§ã³ç®¡çããããŸãã åçŽãªããŒãžã§ã³ç®¡çã®ããã«ããã§ãã¯ã€ã³/ãã§ãã¯ã¢ãŠãã®æ¹æ³ãšå€æŽã®ç·åœ¢å±¥æŽãæäŸãããŸãã Chekinã¯ããŒãã®æ°ããããŒãžã§ã³ãäœæããèªã¿åãå°çšã«ããŸããäœããæžã蟌ãã«ã¯ããã§ãã¯ã¢ãŠãããå¿ èŠããããŸãã
ããã«å ããŠãå®å šãªããŒãžã§ã³ç®¡çã¯ãéç·åœ¢ããŒãžã§ã³å±¥æŽïŒPHPCR-ODMã«ã¯ãŸã ãã«ããŒã¡ãœããããããŸããïŒããã³ã©ãã«ïŒJackalopeããµããŒããéå§ãããšããã«è¿œå ãããäºå®ã§ãïŒããµããŒãããŸããåããŒãã«ã€ããŠãããŒãžã§ã³ã«ã©ãã«ãè¿œå ã§ããŸãããåããŒãã®å±¥æŽå šäœã«ããã£ãŠã©ãã«ã2åç¹°ãè¿ãããšã¯ã§ããŸããïŒã€ãŸããå¥ã®ããŒãžã§ã³ãããŒã¯ããå Žåã¯ããŸãå€ãããŒãžã§ã³ããåé€ããå¿ èŠããããŸãïŒã
å®å šãªããŒãžã§ã³ç®¡çã¯
mix:versionable
ãPHPCR ã®åãšäžèŽããåå²ãèš±å¯ããŸããæ®å¿µãªãããPHPCRããŒãžã§ã³APIã¯PHPCR ODMã§å®å šã«ãµããŒããããŠããŸãã;å®å šãªæäœã®ããã«
PHPCR\VersionManager
ã¯ãPHPCRã»ãã·ã§ã³ãçŽæ¥æäœããå¿ èŠããããŸããããã«ã€ããŠã®è©³çŽ°ã¯ãã¡ããšãã¡ãã
ããŒãžã§ã³åã¯PHPCRã«ãã£ãŠçæãããã¢ããªã±ãŒã·ã§ã³ã«ãã£ãŠå¶åŸ¡ãããŸãããã³ãããã¡ãã»ãŒãžã³ã°ã®æŠå¿µã¯ãããŸããïŒãŸã å¿ èŠãããŸããïŒããããã«ãããããã¥ã¡ã³ãã«ãã®ã±ãŒã¹çšã®ãã£ãŒã«ããäœæããããšã誰ãæ°ã«ããŸããã
å€ãããŒãžã§ã³ã¯ãå€æŽããã³å€æŽã®ä¿åã«äœ¿çšã§ããŸããïŒäŸå€ã¯
restoreVersion()
ããã³ã¡ãœããã䜿çšããå Žå
removeVersion()
ã§ãã
äžéšã®ããã¥ã¡ã³ãã®ããŒãžã§ã³ç®¡çãµããŒããæå¹ã«ããã«ã¯ãã¢ãããŒã·ã§ã³ã§æ瀺çã«æå®ããå¿ èŠããããŸãã
/** * @Document(versionable="simple") */ class MyPersistentClass { /** @VersionName */ private $versionName; /** @VersionCreated */ private $versionCreated; }
ããŒãžã§ã³ã®æäœæ¹æ³ã«é¢ããããã¥ã¡ã³ãã¯ã»ãšãã©ãããŸãããèè ã¯ããœãŒã¹ã³ãŒãã®Phpdocã³ã¡ã³ãã«é£çµ¡ããããšããå§ãããŸãããããã£ãŠãç§ãã¡ã¯ãã®ãããªé«ãåé¡ã«é·ãéçãŸããªãã§ãå°ããªäŸãèŠãŠå ã«é²ã¿ãŸãããã
$article = new Article(); $article->id = '/test'; $article->topic = 'Test'; $dm->persist($article); $dm->flush(); // $dm->checkpoint($article); $article->topic = 'Newvalue'; $dm->flush(); // $versioninfos = $dm->getAllLinearVersions($article); $firstVersion = reset($versioninfos); // $oldVersion = $dm->findVersionByName(null, $article->id, $firstVersion['name']); echo $oldVersion->topic; // "Test" // $article = $dm->find('/test'); echo $article->topic; // "Newvalue" // $dm->restoreVersion($oldVersion); // echo $article->topic; // "Test" // , $article->topic = 'Newvalue'; $dm->flush(); $dm->checkpoint($article); // ( ) $dm->removeVersion($oldVersion);
å€èšèªäž»çŸ©ã«ã€ããŠãããã¥ã¡ã³ãã®ããããã£ã¯ãã¹ãŠã翻蚳å¯èœãšããŠããŒã¯ã§ããŸãã翻蚳äžã«ææžå šäœãè€è£œããããšããäºå®ã«ããããããã翻蚳ãå¿ èŠãšããªããã£ãŒã«ãã¯ç¡é§ã«ã³ããŒãããŸãããæ¯åäœæ¥çšã®èšèªãæå®ããå¿ èŠããªãããšã¯æããã§ããå¿ èŠãªèšèªãäžåºŠDocumentManagerã«äŒããã ãã§ããã¹ãŠã®ã¿ã€ãã®åŒã³åºã
find()
ãšæ°ããããã¥ã¡ã³ãã®äœæã«äœ¿çšãããŸãã䟿å©ïŒ
/** * @PHPCRODM\Document(translator="attribute") */ class MyPersistentClass { /** * * @Locale */ private $locale; /** * * @Date */ private $publishDate; /** * * @String(translated=true) */ private $topic; /** * * @Binary(translated=true) */ private $image; }
ãããŠããã£ãŒã«ãã翻蚳ããäœæ¥ã¯æ¬¡ã®ãšããã§ãã
// DocumentManager ( ) $localePrefs = array( 'en' => array('fr'), 'fr' => array('en'), ); $dm = new \Doctrine\ODM\PHPCR\DocumentManager($session, $config); $dm->setLocaleChooserStrategy(new LocaleChooser($localePrefs, 'en')); // : $doc = new Article(); $doc->id = '/my_test_node'; $doc->author = 'John Doe'; $doc->topic = 'An interesting subject'; $doc->text = 'Lorem ipsum...'; // $dm->persist($doc); $dm->bindTranslation($doc, 'en'); // $doc->topic = 'Un sujet intéressant'; $dm->bindTranslation($doc, 'fr'); // echo $doc->locale; // fr // PHPCR $dm->flush(); // // ( ) $doc = $dm->find(null, '/my_test_node'); // $doc = $dm->findTranslation(null, '/my_test_node', 'fr'); $doc->title = 'nouveau'; $dm->flush(); // ,
çŸåšã芪ãªã³ã¯ãšåãªã³ã¯ãå«ããã¹ãŠã®ãªã³ã¯ã«ã€ããŠãã»ãã·ã§ã³äžã«è¿œè·¡ã§ããããã¥ã¡ã³ãã¯1ã€ã ããªã®ã§ãããã©ã«ãèšèªãžã®ãã©ãŒã«ããã¯ããããŸããäœè ã¯ãŸã äœãããã°ããã®ããããããäžå®å šãªããã¥ã¡ã³ããåŠçããåé¡ã¯æªè§£æ±ºã®ãŸãŸã§ãïŒããã¥ã¡ã³ãã«èšèŒãããŠãããã£ãŒã«ããå®éã«ååšããªãå ŽåïŒããã ãããããã®åé¡ãã©ã®ããã«è§£æ±ºããããã¯æéãçµãŠã°ããããŸãã
ããã«ãå°æ¥ããã®ã³ã°ãçµæã®ãã£ãã·ã³ã°ãæ¹åããããã¥ã¡ã³ãã®æŽæ°ãéå§ããŸãïŒãŸã éåžžã«å°ãªãã§ãïŒãDoctrineDBALãšçµã¿åãããŠSolr / ElasticSearchãµããŒãã匷åããMongoDBã®å®è£ ãå®äºããããšããŸããçŸåšãéçºè ã¯Jackrabbitã®æ¬¡ã®ã¡ãžã£ãŒããŒãžã§ã³ïŒã³ãŒãããŒã OakïŒã«ç®ãåããäºææ§ãã¹ãããå®æœããŠããŸãããäž»ãªã¿ã¹ã¯ã¯PHPCRãšãã®å®éã®ã¢ããªã±ãŒã·ã§ã³ãžã®çµã¿èŸŒã¿ãä¿é²ããããšã§ãã
ãŸãšãããšãODMã䜿çšããå Žåãã¹ã¿ãã¯ã¯æ¬¡ã®ããã«ãªããŸãã
- JackalopeãŸãã¯Midgard2ã®åœ¢åŒã®ããã¯ãšã³ããæã€PHPã³ã³ãã³ããªããžããªïŒããŒã¿ã¯JackrabbitãŸãã¯RDBMSã«ä¿åãããŸãïŒ
- ããã¯ãšã³ãã«é¢ä¿ãªã䟿å©ãªäœæ¥ã®ããã®Doctrine Commonã®äžéšã«ããPHPCR-ODM
- çŽæ¥ã¢ããªã±ãŒã·ã§ã³ã³ãŒãã
èšäºã®ç¬¬2éšã«ç¶ããŸãã