Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
EC-CUBE3コードリーディング #5
Search
amidaike
March 16, 2016
Programming
1.5k
1
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
EC-CUBE3コードリーディング #5
amidaike
March 16, 2016
More Decks by amidaike
See All by amidaike
EC-CUBE3勉強会新しいデザインを作成してみよう
amidaike
0
480
EC-CUBE 3.0勉強会
amidaike
1
990
EC-CUBE3プラグイン勉強会
amidaike
0
480
EC-CUBE3デザイナー向け勉強会 #4
amidaike
0
330
EC-CUBE3デザイナー向け勉強会 #1
amidaike
0
300
EC-CUBE3デザイナー向け勉強会 #3
amidaike
1
230
EC-CUBE3コードリーディング #4
amidaike
0
1.3k
EC-CUBE3デザイナー向け勉強会 #2
amidaike
1
2.8k
EC-CUBE3コードリーディング #3
amidaike
1
970
Other Decks in Programming
See All in Programming
スマートグラスで並列バイブコーディング
hyshu
0
150
Skillsは効率化、Agentsは"自分の拡張"——Builder時代のエージェント編成(CC Night 2026)
wemra
1
140
代数的データ型って何が嬉しいの? #frontend_phpcon_do
kajitack
8
3.7k
Make SRE Operations Easier with Azure SRE Agent
kkamegawa
0
6.6k
Honoでのサプライチェーン侵害対策 〜 3つのライブラリに学ぶ
yusukebe
6
1.3k
正しくソフトウェアを作る、前提を疑うための認知の視点 / doubt-premise
minodriven
21
6.7k
技術記事、AIに書かせるか、自分で書くか? 〜それでも私が自分の手で書く理由〜 / #QiitaConference
jnchito
2
1.4k
「なぜそう決めたのか」を残し続ける仕組み ― Notion AI カスタムエージェント × Slack連携による設計判断の自動記録 - NIKKEI Tech Talk #47
niftycorp
PRO
0
200
キャリア迷子上等 ─ "ない道"は自分で作ればいい
16bitidol
3
2.1k
Mujeres en SEO Summit 2026 - Greatest Disaster Hits en Web Performance
guaca
0
180
AI 輔助遺留系統現代化的經驗分享
jame2408
1
480
気づいたらRubyで100作品 ー クリエイティブコーディングが生活の一部になるまで / 100 Ruby Sketches Later: How Creative Coding Became Part of My Life
chobishiba
3
590
Featured
See All Featured
HDC tutorial
michielstock
2
720
Leadership Guide Workshop - DevTernity 2021
reverentgeek
1
310
Pawsitive SEO: Lessons from My Dog (and Many Mistakes) on Thriving as a Consultant in the Age of AI
davidcarrasco
0
160
For a Future-Friendly Web
brad_frost
183
10k
Why Mistakes Are the Best Teachers: Turning Failure into a Pathway for Growth
auna
0
160
From Legacy to Launchpad: Building Startup-Ready Communities
dugsong
0
230
ラッコキーワード サービス紹介資料
rakko
1
3.7M
A better future with KSS
kneath
240
18k
Breaking role norms: Why Content Design is so much more than writing copy - Taylor Woolridge
uxyall
0
320
Mobile First: as difficult as doing things right
swwweet
225
10k
Embracing the Ebb and Flow
colly
88
5.1k
[RailsConf 2023 Opening Keynote] The Magic of Rails
eileencodes
31
10k
Transcript
EC-CUBE3ίʔυϦʔσΟϯά #5 EC-CUBEؔϢʔβάϧʔϓ 2016-03-16
࣍ 1. FormTypeΛͬͨDBొ 2. EC-CUBE3ίʔυϦʔσΟϯά ཧը໘ͷडཧ 3. EC-CUBE3Λͬͨ։ൃࢦ 4. ࣭ٙԠ
1.FormTypeΛͬͨDBొ
FormTypeΛͬͨDBొ • ࠓ·Ͱͷ։ൃऀ͚ษڧձͰFormTypeͱDoctrineͷ આ໌ΛݸผͰߦ͍·ͨ͠ɻ࣮ࡍʹController͔Β FormTypeͱDoctrineΛͬͯDBొ͢Δ·ͰΛઆ໌ ͠·͢ɻ
FormTypeΛͬͨDBొ • ContorllerɺFormTypeɺTwigΛ࡞͠·͢ɻ ECCUBEROOT/src/Eccube/Form/Type/StudyType.php ECCUBEROOT/src/Eccube/Controller/ StudyController.php ECCUBEROOT/app/template/default/study.twig • EccubeServiceProvider.phpɺ FrontControllerProvider.phpϑΝΠϧʹ৽ن࡞ͨ͠
ControllerͱFormTypeΛఆٛ͠·͢ɻ
FormTypeΛͬͨDBొ • StudyType.phpͷ༰ <?php namespace Eccube\Form\Type; use Symfony\Component\Form\AbstractType; use Symfony\Component\Form\FormBuilderInterface;
use Symfony\Component\Validator\Constraints as Assert; class StudyType extends AbstractType { /** * {@inheritdoc} */ public function buildForm(FormBuilderInterface $builder, array $options) { $builder ->add('customer_agreement', 'textarea', array( 'required' => true, 'label' => 'ձһن', 'constraints' => array( new Assert\NotBlank()), )); } /** * {@inheritdoc} */ public function getName() { return 'study'; } }
FormTypeΛͬͨDBొ • StudyController.phpͷ༰ <?php namespace Eccube\Controller; use Eccube\Application; use Eccube\Controller\AbstractController;
use Eccube\Entity\Help; use Symfony\Component\HttpFoundation\Request; class StudyController extends AbstractController { public function index(Application $app, Request $request) { $Help = $app['eccube.repository.help']->find(2); if (!$Help) { $Help = new Help(); } $builder = $app['form.factory']->createBuilder('study', $Help); $form = $builder->getForm(); $form->handleRequest($request); if ($form->isSubmitted() && $form->isValid()) { $Help = $form->getData(); $app['orm.em']->persist($Help); $app['orm.em']->flush(); return $app->redirect($app->url('study')); } return $app->render('study.twig', array( 'form' => $form->createView(), )); } }
FormTypeΛͬͨDBొ • study.twigͷ༰ {% extends 'default_frame.twig' %} {% block main
%} <div class="row"> <div class="col-md-6 col-md-offset-3"> <form action="{{ url('study') }}" method="post"> {{ form_widget(form._token) }} {{ form_row(form.customer_agreement) }} <p> <button type="submit" class="btn btn-primary btn- block">ొ</button> </p> </form> </div> </div> {% endblock %}
FormTypeΛͬͨDBొ • FrontControllerProviderʹՃ • EccubeServiceProviderʹՃ $c->match('/study', '\Eccube\Controller \StudyController::index')->bind('study'); return $c;
$types[] = new \Eccube\Form\Type\StudyType(); return $types;
2.EC-CUBE3ίʔυϦʔσΟϯά
EC-CUBE3ίʔυϦʔσΟϯά • AdminσΟϨΫτϦԼʹཧը໘༻ίϯτϩʔ ϥʔ͕ଘࡏ σΟϨΫτϦ໊ ػೳ໊ AdminController ϩάΠϯը໘ɺཧը໘τοϓ Content ίϯςϯπཧ༻
Customer ձһཧ༻ Order डཧ༻ Product ཧ༻ Setting جຊใઃఆɺγεςϜใઃఆ༻ Store ΦʔφʔζετΞ༻
EC-CUBE3ίʔυϦʔσΟϯά • Admin\Order\OrderController.phpɺ EditController.phpͷίʔυϦʔσΟϯά
3.EC-CUBE3Λͬͨ։ൃࢦ
EC-CUBE3Λͬͨ։ൃࢦ • EC-CUBE3ΛͬͯECαΠτΛߏங͢Δࡍͷ։ൃࢦ Λ͓͠͠·͢ɻ ͨͩ͜͠ͷࢦݸਓతͳݟղʹΑΔͷͰ͋Γɺެ ࣜݟղͰ͋Γ·ͤΜɻ
EC-CUBE3Λͬͨ։ൃࢦ • EC-CUBE3ͷόʔδϣϯʹ͍ͭͯ ։ൃ࣌Ͱ࠷৽όʔδϣϯͰ͋ΔEC-CUBEΛར༻͠ɺ όʔδϣϯΞοϓ͕ߦΘΕͨΒै͢ΔΑ͏ʹ͠·͢ɻ ͨͩ͠ɺར༻͍ͨ͠ϓϥάΠϯ͕࠷৽όʔδϣϯʹରԠ ͍ͯ͠ͳ͚ΕɺόʔδϣϯΛ߹ΘͤΔ͔ϓϥάΠϯΛ վम͢ΔΑ͏ʹ͠·͢ɻ
EC-CUBE3Λͬͨ։ൃࢦ • ΧελϚΠζʹ͍ͭͯ جຊϓϥάΠϯͰΧελϚΠζΛߦ͍·͕͢Ͳ͏ͯ͠ ϓϥάΠϯͰରԠ͢Δͷ͕͍͠߹ɺ ຊମଆʹର ͯ͠ΧελϚΠζΛߦ͏Α͏ʹ͠·͢ɻ ͨͩ͠ɺtwigϑΝΠϧʹؔͯ͠શͯ app/template Լʹอଘͤ͞ɺResourceԼʹ͋ΔTwigϑΝΠϧ
৮Βͳ͍Α͏ʹ͠·͢ɻ
EC-CUBE3Λͬͨ։ൃࢦ • ຊମଆΧελϚΠζରͱͳΔιʔε Controller FormType Repository Twig(app/templateԼʹอଘ) EccubeExtension ControllerProvider UtilԼͷΫϥε
EC-CUBE3Λͬͨ։ൃࢦ • DBʹ͍ͭͯ ৽ͨͳ߲͕ඞཁͳ߹ɺجຊϓϥάΠϯଆͰςʔϒ ϧΛ࡞֦ͯ͠ு͠·͢ɻͨͩ͠ɺ֎෦ΩʔΛѻ͏ඞཁ ੑ͕͋Δ࣌(dtb_productʹରͯ͠֎෦ΩʔΛషͬͯ ରԠ͍ͨ࣌͠ͳͲ)ɺຊମଆͷymlʹରͯ͠मਖ਼Λߦ ͏Α͏ʹ͠·͢ɻ
EC-CUBE3Λͬͨ։ൃࢦ • ը໘࡞ɺURLʹ͍ͭͯ ৽نը໘Λ࡞͢Δ߹ɺ੩తϖʔδϖʔδཧͰ ࡞͠ɺϩδοΫ͕ೖΔ߹ɺPluginͱͯ͠࡞͢ΔΑ ͏ʹ͠·͢ɻ طଘͷURLΛมߋ͍ͨ͠߹ɺFrontControllerProvider Λमਖ਼ͯ͠ରԠ͠ɺෆཁͳURLίϝϯτΞτ͞ ͤ·͢ɻ
EC-CUBE3Λͬͨ։ൃࢦ • EC-CUBE3ͷόʔδϣϯΞοϓʹ͏ै ຊདྷͰ͋ΕϑΝΠϧΛ্ॻ͖͢Δ͚ͩͰόʔδϣϯΞοϓՄೳ Ͱ͕͢ɺຊମʹΧελϚΠζߦ͏ͨΊόʔδϣϯΞοϓ࣌ खಈͰରϑΝΠϧͷΈ্ॻ͖͢ΔΑ͏ʹ͠·͢ɻ όʔδϣϯΞοϓ࣌ҎԼͷGitίϚϯυΛར༻ͯࠩ͠ΛऔΓग़͠ ରԠϑΝΠϧͷΈൺֱ͠ͳ͕ΒόʔδϣϯΞοϓ࡞ۀΛߦ͍·͢ɻ
git diff --name-only 3.0.8..3.0.9 | xargs tar cvzf 3.0.9.tar.gz ͜ͷίϚϯυΛ࣮ߦ͢Δͱɺ3.0.8͔Β3.0.9มߋରͱͳͬͨϑΝΠϧͷΈऔΓ ग़͢͜ͱ͕Մೳɻ
EC-CUBE3Λͬͨ։ൃࢦ • ϑΥʔϜλΠϓʹର͢ΔΧελϚΠζ طଘͷFormTypeʹର͢ΔΧελϚΠζΠϕϯτΛͬͯߦ ͏ͷͰͳ͘ɺϓϥάΠϯଆʹFormExtensionΛ༻ҙ֦ͯ͠ு Λߦ͍·͢ɻ ֦ுαϯϓϧ) https://github.com/EC-CUBE/ec-cube/compare/ master...chihiro-adachi:sample-form
→ձ໊ࣾͷআɺ͔ͳͷఆٛมߋɺ߲ՃͷαϯϓϧͰ͢ɻ
EC-CUBE3Λͬͨ։ൃࢦ • ެ։͞Ε͍ͯΔϓϥάΠϯಋೖ࣌ͷҙ ར༻Ͱ͖ΔϓϥάΠϯ͕͋Ε׆༻͠·͕͢ɺσβΠϯ͕߹Θͳ͍ ͷଟ͍ͨΊϓϥάΠϯʹରͯ͠σβΠϯͷमਖ਼Λ͢ΔΑ͏ʹ ͠·͢ɻ·ͨɺެ։͞Ε͍ͯΔϓϥάΠϯʹରͯ͠ෆ۩߹DBఆ ٛʹޡΓ͕͋Δͷଘࡏ͠·͢ͷͰɺϓϥάΠϯΠϯετʔϧޙҎ ԼͷίϚϯυΛ࣮ߦ͠DBͱymlϑΝΠϧͱࠩҟ͕ͳ͍͔֬ೝ͠·͢ɻ
vendor/bin/doctrine orm:schema-tool:update Λ࣮ߦͯ͠migrationՄೳ͔Ͳ͏͔Λ֬ೝ͢Δɻ vendor/bin/doctrine orm:schema-tool:update --dump-sql Λ࣮ߦͯ͠sqlΛ֬ೝ
EC-CUBE3Λͬͨ։ൃࢦ • ը૾ϑΝΠϧcssϑΝΠϧʹ͍ͭͯ σβΠϯΛมߋ͢ΔͨΊʹ৽ن࡞ͨ͠cssϑΝΠϧ ը૾ϑΝΠϧ html/template/default/assets Լʹஔ͠ɺϑϩϯτଆͷdefault_frame.twigʹ৽ن ࡞ͨ͠cssϑΝΠϧΛద༻ͤ͞ΔΑ͏ʹมߋ͠·͢ɻ
EC-CUBE3Λͬͨ։ൃࢦ • EC-CUBE3Πϯετʔϧ࣌ͷॳظσʔλʹ͍ͭͯ ෆཁͳॳظσʔλશͯίϝϯτΞτͯ͠ΠϯετʔϧΛͤ͞ͳ͍Α͏ ʹ͠·͢ɻ src/Eccube/Resource/doctrine/migration/Version20150613000000.php ͜ͷϑΝΠϧͰॳظσʔλΛೖ͓ͯ͠ΓෆཁͳͷίϝϯτΞτ͞ ͤ·͢ɻ ·ͨɺར༻͢Δ͜ͱ͕֬ఆ͍ͯ͠ΔϓϥάΠϯʹ͍ͭͯ৽ͨʹ migrationϑΝΠϧΛ࡞ͯ͠ॳظΠϯετʔϧ࣌ʹҰॹʹϓϥάΠϯ
ొͤ͞·͢ɻ →ޙ͔ΒϓϥάΠϯΛΠϯετʔϧͯ͠ྑ͍͕ɺΕΔՄೳੑ͋Δͨ ΊΠϯετʔϧͱಉ࣌ʹϓϥάΠϯొͤ͞Δɻ
EC-CUBE3Λͬͨ։ൃࢦ • EC-CUBE3ͷ։ൃڥ GitΛͬͨόʔδϣϯཧΛߦ͏Α͏ʹ͠·͕͢ɺ ECCUBEROOT/vendorσΟϨΫτϦΛআ͘શͯͷϑΝ ΠϧΛόʔδϣϯཧͤ͞ΔΑ͏ʹ͠·͢ɻ (ݸਓతʹGitBucketΛͬͯ։ൃΛ͍ͯ͠·͢ɻ)
EC-CUBE3Λͬͨ։ൃࢦ • ຊ൪ڥͷΠϯετʔϧɺө࡞ۀ ຊ൪ڥߏஙɺGit͔Β࠷৽ϑΝΠϧΛऔಘ͠ɺ php composer.phar install --no-dev Λ࣮ߦ͠ඞཁͳϥΠϒϥϦΛΠϯετʔϧ͔ͯ͠Β http://υϝΠϯ໊/install.php
ΛߦͬͯEC-CUBE3ΛΠϯετʔϧ͠·͢ɻ ιʔεमਖ਼͕ߦΘΕͨ߹ɺຊ൪ڥͷөGitΛͬͯөͤ͞ ΔΑ͏ʹ͠·͢ɻ ։ൃྃ → Gitpush → ຊ൪ڥ͔ΒGitͰ࠷৽ιʔεΛmerge ͱ͍͏ྲྀΕʹͳΓ·͢ɻ
EC-CUBE3Λͬͨ։ൃࢦ • ӡ༻։࢝ޙͷը໘ͷमਖ਼ը૾ϑΝΠϧͷमਖ਼ͳͲ ӡ༻͕։࢝͞ΕΕɺը໘ͷमਖ਼શͯཧը໘ͷ ʮϖʔδཧʯˠʮϖʔδฤूʯ Ͱߦ͍ɺը૾ϑΝΠϧʹ͍ͭͯFTPͰΞοϓϩʔυ Λߦ͍ߋ৽ͤ͞·͢ɻ (ݱࡏͷόʔδϣϯͰϖʔδཧͰ৽ن࡞ͨ͠ϖʔδ શͯuser_dataʹอଘ͞Εͯ͠·͏ͨΊຊମଆʹରͯ͠म ਖ਼͢Δඞཁ͕͋Γ·͢ɻ)
4.࣭ٙԠ
։ൃ࣌ͷࢀߟϖʔδ • GitHubWiki https://github.com/EC-CUBE/ec-cube/wiki • GitHubPages http://ec-cube.github.io • Qiitaͷهࣄ http://qiita.com/tags/EC-CUBE3