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
490
EC-CUBE 3.0勉強会
amidaike
1
1k
EC-CUBE3プラグイン勉強会
amidaike
0
480
EC-CUBE3デザイナー向け勉強会 #4
amidaike
0
330
EC-CUBE3デザイナー向け勉強会 #1
amidaike
0
310
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
980
Other Decks in Programming
See All in Programming
琵琶湖の水は止められてもNet--HTTPのリトライは止められない / You might be able to stop the water flow of Lake Biwa but you can't stop Net::HTTP retries
luccafort
PRO
0
510
型も通る、synthも通る、それでも危ない 〜AIのCDKの権限とコストを機械で検証する〜 / It Passes Type Checks, It Passes Synth Checks, but It’s Still Risky — Automatically Verifying Permissions and Costs in AI’s CDK —
seike460
PRO
1
510
AI時代のPHPer生存戦略 ~「言語、もうなんでもよくない?」に本気で向き合う~
vivion
0
220
PostgreSQL 18で考えるUUID主キー
kazuhiro1982
0
450
「寝てても仕事が進む」Claude Codeで組む第二の脳
tomoyafujita2016
0
250
複数の Claude Code が"放置"されてしまう問題をCLI ダッシュボードを自作して解決した話
sumihiro3
1
610
Japan Community Day at Kubecon + CloudNativeCon Japan 2026: Learning Container Privilege Control by Building My Own Low-Level Container Runtime
ternbusty
1
110
yield再入門 #phpcon
o0h
PRO
0
860
PHP に部分適用が来るぞ!……ところで何それ?おいしいの? #phpcon / phpcon-2026
shogogg
0
480
AIが無かった頃の素敵な出会いの話
codmoninc
1
340
Google Apps Script で Ruby を動かす
kawahara
0
120
使いながら育てる Claude Code — 開発フローの1コマンド化 × 繰り返し指摘の自動仕組み化
shiki_kakaku
0
1.5k
Featured
See All Featured
A designer walks into a library…
pauljervisheath
211
24k
Context Engineering - Making Every Token Count
addyosmani
9
1k
Navigating Algorithm Shifts & AI Overviews - #SMXNext
aleyda
1
1.5k
How to Grow Your eCommerce with AI & Automation
katarinadahlin
PRO
1
230
Building a Scalable Design System with Sketch
lauravandoore
463
34k
Prompt Engineering for Job Search
mfonobong
0
390
個人開発の失敗を避けるイケてる考え方 / tips for indie hackers
panda_program
123
22k
Winning Ecommerce Organic Search in an AI Era - #searchnstuff2025
aleyda
1
2.1k
What the history of the web can teach us about the future of AI
inesmontani
PRO
1
650
Money Talks: Using Revenue to Get Sh*t Done
nikkihalliwell
0
440
Rails Girls Zürich Keynote
gr2m
96
14k
Helping Users Find Their Own Way: Creating Modern Search Experiences
danielanewman
31
3.3k
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