
éšåããã²ãŒã·ã§ã³ é£çµ¡å
ããŒãžïŒããªããŒã¿ãŒããã©ãŒã ãã¡ãŒã«
ãã®ããŒãã§ã¯ïŒ
1.ããªããŒã¿ãŒ
2.ãã©ãŒã
3.ãã³ãã«æ§æ
Githubãããžã§ã¯ã
å¿
èŠãªããã¥ã¢ã«ã®äžéšãã€ã³ã¹ããŒã«ããæ¹æ³ã«ã€ããŠã¯ã ãªã³ã¯ã§ãªããžããªã®èª¬æãåç
§ããŠãã ãã ã ïŒããšãã°ãåã®ã¬ãã¹ã³ãçµãã«ãã®ã¬ãã¹ã³ããå§ãããå ŽåïŒ
ãåãåããããŒãž
ã«ãŒãã£ã³ã°
åã®ç« ã§äœæãããAboutãããŒãžãšåæ§ã«ãé£çµ¡å
ããŒãžã®ã«ãŒããå®çŸ©ããããšããå§ããŸãã ã«ããBloggerBlogBuâândleã«ãŒãã£ã³ã°ãã¡ã€ã«ãéããŸã
src/Blogger/BlogBundle/Resources/config/routing.yml
次ã®ã«ãŒãã£ã³ã°ã«ãŒã«ãè¿œå ããŸãã
ããã«ã¯æ°ãããã®ã¯äœããããŸãããã«ãŒã«ã¯/ contactãã³ãã¬ãŒãã«é©çšãããHTTP GETã¡ãœããã¯BloggerBlogãã³ãã«ã®ããŒãžã³ã³ãããŒã©ãŒã§contactActioné¢æ°ãå®è¡ããŸãã
ã³ã³ãããŒã©ãŒ
src/Blogger/BlogBundle/Controller/PageController.php
ããBloggerBlogãã³ãã«ã®ããŒãžã³ã³ãããŒã©ãŒã«é£çµ¡å
ããŒãžã®é¢æ°ãè¿œå ããŸããã
src/Blogger/BlogBundle/Controller/PageController.php
class PageController extends Controller {
ããã§ããã®é¢æ°ã¯éåžžã«ã·ã³ãã«ã«ãªããé£çµ¡å
ããŒãžã®ãã³ãã¬ãŒãã®ã¿ã衚瀺ãããŸãã åŸã§ã³ã³ãããŒã©ãŒã«æ»ããŸãã
ãã£ã¹ãã¬ã€
ãã³ãã¬ãŒããäœæããŸãã
src/Blogger/BlogBundle/Resources/views/Page/contact.html.twig
ãããŠã次ã®ã³ã³ãã³ããè¿œå ããŸãã
{
ãã®ãã³ãã¬ãŒããéåžžã«åçŽã§ãã ã¬ã€ã¢ãŠããã³ãã¬ãŒããæ¡åŒµããã¿ã€ãã«ãåå®çŸ©ããæ¬æãããã¯ã®ã³ã³ãã³ããå®çŸ©ããŸãã
ããŒãžãªã³ã¯
æåŸã«ãé£çµ¡å
ããŒãž
app/Resources/views/base.html.twig
ãžã®ãªã³ã¯ãè¿œå ããããã«ãã¢ããªã±ãŒã·ã§ã³ãã³ãã¬ãŒãã®ãªã³ã¯ãæŽæ°ããå¿
èŠããããŸã
#app/Resources/views/base.html.twig {% block navigation %} <nav> <ul class="navigation"> <li><a href="{{ path('BloggerBlogBundle_homepage') }}">Home</a></li> <li><a href="{{ path('BloggerBlogBundle_about') }}">About</a></li> <li><a href="{{ path('BloggerBlogBundle_contact') }}">Contact</a></li> </ul> </nav> {% endblock %}
ã¢ãã¬ã¹
httpïŒ// localhostïŒ8000ã«ç§»åããŠãããã²ãŒã·ã§ã³ããŒã®[é£çµ¡å
]ãªã³ã¯ãã¯ãªãã¯ãããšãéåžžã«åçŽãªé£çµ¡å
ããŒãžã衚瀺ãããŸãã ããã§ãé©åã«æ§æãããããŒãžãã§ããã®ã§ã次ã¯ãã©ãŒã ãæäœããŸãã ããã«ã¯ãããªããŒã¿ãšãã©ãŒã èªäœã®2ã€ã®åå¥ã®éšåãå«ãŸããŸãã ããªããŒã¿ãŒãšãã©ãŒã ã®æŠå¿µã«ç§»ãåã«ããªã¯ãšã¹ãããã®ããŒã¿ãã©ã®ããã«åŠçããããèããå¿
èŠããããŸãã
é£çµ¡å
ãšã³ãã£ãã£
ãŠãŒã¶ãŒããã®ãªã¯ãšã¹ããè¡šãã¯ã©ã¹ãäœæããããšããå§ããŸãããã ãªã¯ãšã¹ãã®ååã件åãæ¬æãªã©ã®åºæ¬çãªæ
å ±ãåãå
¥ããããšèããŠããŸãã æ°ãã
src/Blogger/BlogBundle/Entity/Enquiry.php
ãäœæãã次ã®ã³ã³ãã³ãã«è²Œãä»ã
src/Blogger/BlogBundle/Entity/Enquiry.php
ã
<?php
ãã³ãïŒIDE PHPStormã䜿çšããŠããå ŽåïŒã²ãã¿ãŒãšã»ãã¿ãŒãèªåçã«çæããããšãã§ããŸãã
ãããè¡ãã«ã¯ïŒ
1.ãã¡ã€ã«ïŒãŸãã¯Alt + Insertã®çµã¿åããïŒã§ããŠã¹ã®å³ãã¿ã³ãã¯ãªãã¯ãã[çæ]ãéžæããŸã

2.次ã®ã²ãã¿ãŒãšã»ãã¿ãŒ

3.ãã¹ãŠã匷調衚瀺ããŠã[OK]ãæŒããŸãã

ã芧ã®ããã«ããã®ã¯ã©ã¹ã¯ãããã€ãã®ä¿è·ãããå€æ°ãšãããã«ã¢ã¯ã»ã¹ããããã®ã¡ãœãããå®çŸ©ããã ãã§ãã å€æ°ãæ€èšŒããæ¹æ³ããå€æ°ããã©ãŒã èŠçŽ ã«ã©ã®ããã«é¢ä¿ãããã決å®ãããã®ã¯äœããããŸããã ããã«ã€ããŠã¯åŸã§èª¬æããŸãã
ã泚æ
Symfony2ã§åå空éãã©ã®ããã«äœ¿çšããããã«ã€ããŠè©±ããŸãããã äœæãããšã³ãã£ãã£ã¯ã©ã¹ã¯ã Blogger\BlogBundle\Entity
åå空éãå®çŸ©ããŸãã Symfony2ã¯PSR-0èªåããŒãæšæºããµããŒãããŠãããããåå空éã¯ãã³ãã«ãã¡ã€ã«æ§é ãçŽæ¥æããŸãã Inquiryãšã³ãã£ãã£ã¯ã©ã¹ã¯src/Blogger/BlogBundle/Entity/Enquiry.php
ã«ãããSymfony2ã«ã¯ã©ã¹ã®æ£ãããªãŒãããŒããæäŸããŸãã
Symfony2ãªãŒãããŒããŒã¯ãBloggeråå空éãsrcãã£ã¬ã¯ããªã«ããããšãã©ã®ããã«ç解ããŸããïŒ ããã¯ãautoload configuration app/autoload.php
ã«ãã£ãŠä¿èšŒãããŸã
$loader = require __DIR__.'/../vendor/autoload.php'; AnnotationRegistry::registerLoader(array($loader, 'loadClass')); return $loader;
ç»é²ãããŠããªããã¹ãŠã®åå空éãç»é²ããŸãã Bloggeråå空éãç»é²ãããŠããªããããSymfony2ãªãŒãããŒããŒã¯srcãã£ã¬ã¯ããªã§å¿
èŠãªãã¡ã€ã«ãæ€çŽ¢ããŸãã
ãªãŒãããŒããŒãšåå空éã¯Symfony2ã®éåžžã«åŒ·åãªæŠå¿µã§ãã PHPãã¯ã©ã¹ãèŠã€ããããªããšãããšã©ãŒãçºçããå Žåãããããåå空éãŸãã¯ãã©ã«ããŒæ§é ã«ãšã©ãŒããããŸãã PHPã®requireãŸãã¯includeã䜿çšããŠãããä¿®æ£ããããšããªãã§ãã ããã
ãã©ãŒã
ãã©ãŒã ãäœæããŸãããã
Symfony2ã«ã¯éåžžã«åŒ·åãªãã©ãŒã ããŒã«ãä»å±ããŠããŸãã ãã¹ãŠã®Symfony2ã³ã³ããŒãã³ããšåæ§ã«ãä»ã®ãããžã§ã¯ãã§Symfony2ã®å€éšã§äœ¿çšã§ããŸãã Formsã³ã³ããŒãã³ãã¯
GitHubã§å
¥æã§ã
ãŸã ã ãŸãããªã¯ãšã¹ããã©ãŒã ãè¡šãAbstractTypeã¯ã©ã¹ãäœæããŸãã ãã®ã¯ã©ã¹ãå°ç¡ãã«ããããšãªããã³ã³ãããŒã©ã§ãã©ãŒã ãçŽæ¥äœæã§ããŸããããã©ãŒã ãå¥ã®ã¯ã©ã¹ã«åé¢ãããšãã¢ããªã±ãŒã·ã§ã³å
šäœã§ãã©ãŒã ãåå©çšã§ããŸãã ãŸããã³ã³ãããŒã©ãŒãæ£ããããªãããã«ããããšãã§ããŸãã ã³ã³ãããŒã©ãŒã¯ã·ã³ãã«ã§ãªããã°ãªããŸããã
ãåãåããã¿ã€ã
æ°ãã
src/Blogger/BlogBundle/Form/EnquiryType.php
ãäœæãã次ã®ã³ã³ãã³ããè¿œå ããŸãã
<?php namespace Blogger\BlogBundle\Form; use Symfony\Component\Form\AbstractType; use Symfony\Component\Form\Extension\Core\Type\EmailType; use Symfony\Component\Form\Extension\Core\Type\TextareaType; use Symfony\Component\Form\Extension\Core\Type\TextType; use Symfony\Component\Form\FormBuilderInterface; use Symfony\Component\OptionsResolver\OptionsResolver; class EnquiryType extends AbstractType { public function buildForm(FormBuilderInterface $builder, array $options) { $builder->add('name', TextType::class); $builder->add('email', EmailType::class); $builder->add('subject', TextType::class); $builder->add('body', TextareaType::class); } public function configureOptions(OptionsResolver $resolver) { } public function getBlockPrefix() { return 'contact'; } }
ãã³ãïŒIDE PHPStormã䜿çšããŠããå ŽåïŒSymfonyãã©ã°ã€ã³ã§IDPS PHPStormã䜿çšããå ŽåãInquiryTypeã¯ã©ã¹ã®äœæã¯ããã«ç°¡åã«ãªããŸãã
ãã³ãã«ãã©ã«ããŒãå³ã¯ãªãã¯ããŠã[æ°èŠ]-> [ãã©ãŒã ]ãéžæããŸãïŒãŸãã¯Alt + InsertãæŒããŠ[ãã©ãŒã ]ãéžæããŸãïŒã

次ã«ãååInquiryTypeãå
¥åããäžèšã®ããã«äžè¶³ããŠããè¡ãè¿œå ããŸãïŒæåŸã®ã¡ãœããã¯
getBlockPrefixã§ããããšã«æ³šæããŠãã ããïŒ
InquiryTypeã¯ã©ã¹ã¯ã
FormBuilderInterfaceã€ã³ã¿ãŒãã§ã€ã¹ãè¡šããŸãã ãã®ã€ã³ã¿ãŒãã§ã€ã¹ã¯ãFormBuilderã¯ã©ã¹ã«ãã£ãŠäœ¿çšãããŸãã FormBuilderã¯ã©ã¹ã¯ããã©ãŒã ã®äœæã«é¢ããŠã¯èŠªåã§ãã ã¡ã¿ããŒã¿ã«åºã¥ããŠãã£ãŒã«ããå®çŸ©ããããã»ã¹ãç°¡çŽ åã§ããŸãã ã¯ãšãªãšã³ãã£ãã£ã¯éåžžã«åçŽãªã®ã§ãããã§ã¯ã¡ã¿ããŒã¿ãå®çŸ©ããªããããFormBuilderã¯ããã©ã«ãå€ã衚瀺ããŸãã
ã泚æ
ããã§ã getBlockPrefixã¡ãœãããäžæã®èå¥åãè¿ãå¿
èŠãããããšã«èšåãã䟡å€ããããŸãã
ã³ã³ãããŒã©ãŒã§ãã©ãŒã ãäœæãã
ãšã³ãã£ãã£Inquiryããã³InquiryTypeãå®çŸ©ããŸããããããã䜿çšããããã«é£çµ¡å
é¢æ°ãæŽæ°ã§ããŸãã
src/Blogger/BlogBundle/Controller/PageController.php
ã«ããé¢æ°ã®å
容ã次ã®ããã«çœ®ãæããŸãã
ãšã³ãã£ãã£Inquiryã®ã€ã³ã¹ã¿ã³ã¹ãäœæããããšããå§ããŸãã ãã®ãšã³ãã£ãã£ã¯ãé£çµ¡å
ãªã¯ãšã¹ãããŒã¿ãè¡šããŸãã 次ã«ããã©ãŒã ãäœæããŸãã åã«äœæããInquiryTypeãå®çŸ©ãããããç
§äŒãšã³ãã£ãã£ãªããžã§ã¯ãã«æž¡ããŸãã
ãããã®ã³ã³ãããŒã©ãŒã¢ã¯ã·ã§ã³ã¯éä¿¡ããããã©ãŒã ã®è¡šç€ºãšåŠçãåŠçãããããHTTPã¡ãœããã確èªããå¿
èŠããããŸãã éåžžããã©ãŒã ã¯POSTã¡ãœãããä»ããŠæž¡ããããã©ãŒã ã¯äŸå€ã§ã¯ãããŸããã èŠæ±ã¡ãœãããPOSTã®å Žåã
submit($request)
ãåŒã³åºããšãéä¿¡ãããããŒã¿ã$ç
§äŒãªããžã§ã¯ãã®èŠçŽ ã«æ»ããŸãã çŸæç¹ã§ã¯ã$ç
§äŒãªããžã§ã¯ãã«ã¯ããŠãŒã¶ãŒãéä¿¡ãããã®ã®ã¢ã€ãã¢ãå«ãŸããŠããŸãã 次ã«ããã©ãŒã ã«æ£ããèšå
¥ãããŠããããšã確èªããããã®ãã§ãã¯ãè¡ããŸãã ãã®æç¹ã§ã¯ããªããŒã¿ãŒãæå®ããªãã£ãããããã©ãŒã ã¯åžžã«æå¹ã§ãã æåŸã«ãèŠèŠåã®ãã³ãã¬ãŒãã瀺ããŸãã
åå空éãã³ã³ãããŒã©ã«ã€ã³ããŒãããå¿
èŠããããŸã æ°ããã¯ã©ã¹ã䜿çšããŸãã
src/Blogger/BlogBundle/Controller/PageController.php
ããã³ã³ãããŒã©ãŒãã¡ã€ã«ãæŽæ°ããŸãã
ã¢ããªã±ãŒã·ã§ã³ã¯æ¢åã®ãã®ã®äžã«é
眮ããå¿
èŠããããŸãã
<?php
ãã©ãŒã 衚瀺
Twigãã³ãã¬ãŒããšã³ãžã³ã®ãããã§ããã©ãŒã ã®åºåã¯éåžžã«ç°¡åã§ãã Twigã¯ããã©ãŒã ãåºåããããã®ãã«ãã¬ãã«ã·ã¹ãã ãæäŸããŸããããã«ãããå¿
èŠãªã«ã¹ã¿ãã€ãºã®ã¬ãã«ã«å¿ããŠããã©ãŒã ãåäžã®ãšã³ãã£ãã£ãŸãã¯åå¥ã®ãšã©ãŒãšèŠçŽ ãšããŠè¡šç€ºã§ããŸãã Twigã¡ãœããã®åšåã瀺ãããã«ã次ã®ã³ãŒããã©ã°ã¡ã³ãã§ãã©ãŒã å
šäœã衚瀺ããŸãã
<form action="{{ path('BloggerBlogBundle_contact') }}" method="post" > {{ form_start(form) }} {{ form_widget(form) }} {{ form_end(form) }} <input type="submit" /> </form>
ãããã¿ã€ããšåçŽãªãã©ãŒã ãäœæããã®ã¯éåžžã«ç°¡åã§ãããé«åºŠãªèšå®ãå¿
èŠãªå Žåã«ã¯å¶éããããŸããããã¯å€ãã®å Žåãã©ãŒã ã«åœãŠã¯ãŸããŸãã
ãåãåãããã©ãŒã ã§ã¯ãäžéç¹ãéžæããŸãã
src/Blogger/BlogBundle/Resources/views/Page/contact.html.twig
ãããã³ãã¬ãŒãã³ãŒãã眮ãæã
src/Blogger/BlogBundle/Resources/views/Page/contact.html.twig
{
ã芧ã®ãšããã4ã€ã®æ°ããTwigã¡ãœããã䜿çšããŠãã©ãŒã ãåºåããŸãã
æåã®
form_startã¡ãœããïŒãã¥ãŒãå€æ°ïŒã¯ãã©ãŒã éå§ã¿ã°ã衚瀺ããŸãã ãã®ãã«ããŒã¯ããã©ãŒã äžã®æ§æã¡ãœãããšã¢ã¯ã·ã§ã³ã®åºåãåŠçããŸãã ãã©ãŒã ã«ã¢ããããŒããã£ãŒã«ããå«ãŸããŠããå Žåã¯ãæ£ããENCTYPEå€ãå«ãŸããŸãã
2çªç®ã®
form_errorsã¡ãœããã¯ãæ€èšŒã倱æããå Žåã«ãã©ãŒã ãšã©ãŒãåºåããŸãã
3çªç®ã®
form_rowã¡ãœããã¯ããã©ãŒã ã®åé åã«é¢é£ä»ããããæŽæ°èŠçŽ ãåºåããŸãã ããã«ã¯ããã£ãŒã«ããã©ãã«ãã£ãŒã«ããããã³çŸåšã®ãã£ãŒã«ãèŠçŽ ã®ãšã©ãŒãå«ãŸããŸãã
æåŸã«ã
form_restã¡ãœããã䜿çšããŸãã ãã©ãŒã ã®æåŸã§ã¡ãœããã䜿çšããŠãé ããã£ãŒã«ããSymfony2 Form CSRFããŒã¯ã³ãªã©ãå¿ããŠããŸã£ããã£ãŒã«ããäœæããããšã¯å®å
šãªãªãã·ã§ã³ã§ãã
ã泚æ
ã¯ãã¹ãµã€ããªã¯ãšã¹ããã©ãŒãžã§ãªïŒCSRFïŒã«ã€ããŠã¯ã Symfony2ã®ãã©ãŒã ã®ç« ã§è©³ãã説æãããŠããŸãã
圢ç¶ã¹ã¿ã€ãªã³ã°
ãã©ãŒã ã®å€èŠ³ãæ¹åããããã«ããã€ãã®ã¹ã¿ã€ã«ãè¿œå ããŸãããã ãããã®ã¹ã¿ã€ã«ã¯ãã³ãã«å
ã§åºæã®ãã®ã§ããããããã³ãã«èªäœå
ã®æ°ããã¹ã¿ã€ã«ã·ãŒãã«ã¹ã¿ã€ã«ãäœæããŸãã æ°ãã
src/Blogger/BlogBundle/Resources/public/css/blog.css
ãäœæããã¹ã¿ã€ã«ã貌ãä»ããŸãã
.blogger-notice { text-align: center; padding: 10px; background: #DFF2BF; border: 1px solid; color: #4F8A10; margin-bottom: 10px; } form.blogger { font-size: 16px; } form.blogger div { clear: left; margin-bottom: 10px; } form.blogger label { float: left; margin-right: 10px; text-align: right; width: 100px; font-weight: bold; vertical-align: top; padding-top: 10px; } form.blogger input[type="text"], form.blogger input[type="email"] { width: 500px; line-height: 26px; font-size: 20px; min-height: 26px; } form.blogger textarea { width: 500px; height: 150px; line-height: 26px; font-size: 20px; } form.blogger input[type="submit"] { margin-left: 110px; width: 508px; line-height: 26px; font-size: 20px; min-height: 26px; } form.blogger ul li { color: #ff0000; margin-bottom: 5px; }
ãã®ã¹ã¿ã€ã«ã·ãŒãã䜿çšããããšãã¢ããªã±ãŒã·ã§ã³ãèªèããå¿
èŠããããŸãã é£çµ¡å
ããŒãžã®ãã³ãã¬ãŒãã«ã¹ã¿ã€ã«ã·ãŒããå«ããããšãã§ããŸãããä»ã®ãã³ãã¬ãŒãããããã®ã¹ã¿ã€ã«ãåŸã§äœ¿çšãããããæåã®éšåã§äœæããBlogger BlogBuâândle
ã¬ã€ã¢ãŠãã«ã¹ã¿ã€ã«ãã€ã³ããŒãããããšã¯çã«ããªã£ãŠããŸãã BloggerBlogBuâândle
ã¬ã€ã¢ãŠã src/Blogger/BlogBundle/Resources/views/layout.html.twig
ãã³ã³ãã³ãã次ã®å
容ã«çœ®ãæããŸãã
{
芪ãã³ãã¬ãŒãã§å®çŸ©ãããŠããåå®çŸ©ã®ããã«ã¹ã¿ã€ã«ã®ãããã¯ãå°åºããããšãããããŸãã 芪ã¡ãœãããåŒã³åºãããŠããããšã«æ³šæããããšãéèŠã§ãã ããã«ã¯ã
app/Resources/base.html.twig
ã§å®çŸ©ãããŠããã¹ã¿ã€ã«ã·ãŒããå«ãŸããæ°ããã¹ã¿ã€ã«ã·ãŒããè¿œå ã§ããŸãã æ¢åã®ã¹ã¿ã€ã«ã·ãŒããäžæžãããããããŸããã
ã¢ã»ããæ©èœã«ãã¡ã€ã«ãæ£ããå«ããã«ã¯ãã¢ããªã±ãŒã·ã§ã³ã®
Webãã©ã«ããŒå
ã®ãã³ãã«ãªãœãŒã¹ãã³ããŒãŸãã¯ãªã³ã¯ããå¿
èŠããããŸãã ããã¯ãã³ã³ãœãŒã«ã§æ¬¡ã®ã³ãã³ãã䜿çšããŠå®è¡ã§ããŸãã
php app/console assets:install web --symlink
ããã§ãããŒãžãæŽæ°ãããšããã©ãŒã ã¯ããã«é
åçã«ãªããŸãã

src/Blogger/BlogBundle/Resources/config/routing.yml
ã«ããã«ãŒããå€æŽããŠãPOSTãªã¯ãšã¹ããåŠçããŸãããã
ã泚æ
ãã©ãŒã ãéä¿¡ãããšãæåŸ
ã©ããã«æ©èœããã¯ãã§ãããããŒãžã¯åã«é£çµ¡å
ãã©ãŒã ã«ãªãã€ã¬ã¯ãããŸãã
ããªããŒã¿ãŒ
Symfony2ããªããŒã¿ãŒã«ãããããŒã¿æ€èšŒãå®è¡ã§ããŸãã æ€èšŒã¯ããã©ãŒã ã®ããŒã¿ãæäœããéã®äžè¬çãªã¿ã¹ã¯ã§ãã ããŒã¿ã®æ€èšŒã¯ãããŒã¿ããŒã¹ã«éä¿¡ããåã«å®äºããå¿
èŠããããŸãã
Symfony2ããªããŒã¿ãŒã䜿çšãããšãæ€èšŒããžãã¯ãããã©ãŒã ã³ã³ããŒãã³ããããŒã¿ããŒã¹ã³ã³ããŒãã³ããªã©ãããã䜿çšã§ããã³ã³ããŒãã³ãããåé¢ã§ããŸãã ãã®ã¢ãããŒãã¯ããªããžã§ã¯ããæ€èšŒããããã®äžé£ã®ã«ãŒã«ãããããšãæå³ããŸãã
src/Blogger/BlogBundle/Entity/Enquiry.php
ãããšã³ãã£ãã£
InquiryãæŽæ°ããããšããå§ããŸããããããã€ãã®ããªããŒã¿ãæå®ããŸãã ãã¡ã€ã«ã®äžéšã«4ã€ã®æ°ããã¹ããŒãã¡ã³ããè¿œå ããŠãã ããã
<?php
ããªããŒã¿ãå®çŸ©ããã«ã¯ãéçã¡ãœããloadValidatorMetadataãå®è£
ããå¿
èŠããããŸãã ClassMetadataãªããžã§ã¯ããæäŸãããŸãã ãã®ãªããžã§ã¯ãã䜿çšããŠããšã³ãã£ãã£ã®èŠçŽ ã«å¶éãèšå®ã§ããŸãã
æåã®NotBlankã¹ããŒãã¡ã³ãã¯ãnameèŠçŽ ã«é©çšãããŸãã NotBlankããªããŒã¿ãŒã¯ããã£ãŒã«ãã空ãã©ããã確èªããŸãã
次ã«ããŠãŒã¶ãŒãé»åã¡ãŒã«ãæ£ããå
¥åãããã©ããã確èªããŸãã Symfony2ãµãŒãã¹ã¯ããã¡ã€ã³æ€èšŒãªã©ãé»åã¡ãŒã«ãã£ãŒã«ããæ£ããå
¥åãããŠããããšãæ€èšŒããæ€èšŒããŒã«ãæäŸããŸãã
ãããã¯ãã£ãŒã«ãã空ã«ããã50æå以äžã§ã50æå以äžã®ã¡ãã»ãŒãžãå«ããå¿
èŠããããŸãã
1ã€ã®ãã£ãŒã«ãã«å¿
èŠãªæ°ã®ããªããŒã¿ãé©çšã§ããŸãã
ããªããŒã¿ãŒã®å®å
šãªãªã¹ãã¯ãSymfony2ã®ãªãã¡ã¬ã³ã¹ããã¥ã¡ã³ãã§æäŸãããŠããŸãã
ã«ã¹ã¿ã ããªããŒã¿ãŒãäœæããããšãã§ããŸãã
ããã§ããã©ãŒã ãéä¿¡ãããšãããŒã¿ãæ€èšŒãããŸãã ééã£ãã¡ãŒã«ã¢ãã¬ã¹ãå
¥åããŠã¿ãŠãã ããã é»åã¡ãŒã«ã¢ãã¬ã¹ãç¡å¹ã§ããããšãéç¥ãããšã©ãŒã¡ãã»ãŒãžã衚瀺ãããŸãã åããªããŒã¿ãŒã¯ããã©ã«ãã®ã¡ãã»ãŒãžã衚瀺ããŸãããå¿
èŠã«å¿ããŠãªãŒããŒã©ã€ãã§ããŸãã ããšãã°ãæ€èšŒããŒã«ã®é»åã¡ãŒã«ã¡ãã»ãŒãžãå€æŽããã«ã¯ã次ã®æäœãå®è¡ã§ããŸãã
$metadata->addPropertyConstraint('email', new Email(array( 'message' => 'symblog does not like invalid emails. Give me a real one!' )));
ã泚æ
HTML5ããµããŒããããã©ãŠã¶ãŒã䜿çšããå Žåãç¹å®ã®å¶éä»ãã§HTML5ã¡ãã»ãŒãžãåãåããŸãã ããã¯ã¯ã©ã€ã¢ã³ãåŽã®ãã§ãã¯ã§ãããSymfony2ã¯ãšã³ãã£ãã£ã¡ã¿ããŒã¿ã«åºã¥ããŠé©åãªHTML5å¶éãèšå®ããŸãã ããã¯ã¡ãŒã«èŠçŽ ã§ç¢ºèªã§ããŸãã HTMLã¬ã³ããªã³ã°
<input type="email" id="contact_email" name="contact[email]" required="required">
圌ã¯ãæ°ããHTML5ãã£ãŒã«ãã¿ã€ãã®1ã€ã䜿çšããŠãé»åã¡ãŒã«ãéä¿¡ããå¿
èŠãªå±æ§ãèšå®ããŸããã ã¯ã©ã€ã¢ã³ãåŽã®æ€èšŒã¯ããã©ãŒã ãæ€èšŒããããã«ãµãŒããŒèŠæ±ãå¿
èŠãšããªãããã倧ããªãã©ã¹ã§ãã ãã ããã¯ã©ã€ã¢ã³ãåŽã®æ€èšŒã¯åç¬ã§äœ¿çšããªãã§ãã ããã ã¯ã©ã€ã¢ã³ãåŽã§ãã§ãã¯ããã€ãã¹ããã®ã¯éåžžã«ç°¡åãªã®ã§ããµãŒããŒåŽã§æ瀺ãããããŒã¿ãåžžã«ãã§ãã¯ããå¿
èŠããããŸãã
ã¡ãŒã«éä¿¡
ãåãåãããã©ãŒã ã§ã¯ãŠãŒã¶ãŒããªã¯ãšã¹ããéä¿¡ã§ããŸãããå®éã«ã¯ãŸã äœãèµ·ããŠããŸããã ã³ã³ãããŒã©ãæŽæ°ããŠãããã°ã®ãŠã§ããã¹ã¿ãŒã«ã¡ãŒã«ãéä¿¡ããŸãããã Symfony2ã«ã¯ãé»åã¡ãŒã«ãéä¿¡ããããã®
SwiftMailerã©ã€ãã©ãªãä»å±ããŠ
ããŸãã Swift Mailerã¯éåžžã«åŒ·åãªã©ã€ãã©ãªã§ããããã®ã©ã€ãã©ãªã§äœãã§ãããã«ã€ããŠè§ŠããŸãã
SwiftMailerèšå®ãæ§æãã
Swift Mailerã¯Symfony2ã§åäœããããã«èšå®ãããŠããŸãããéä¿¡æ¹æ³ãšããŒããã·ã§ã³ã«é¢ããããã€ãã®ãã©ã¡ãŒã¿ãŒãèšå®ããå¿
èŠããããŸãã
app/config/parameters.yml
ãããã©ã¡ãŒã¿ãŒãã¡ã€ã«ãéããmailer_ãã¬ãã£ãã¯ã¹ãä»ããèšå®ãèŠã€ããŸãã
mailer_transport: smtp
mailer_host: 127.0.0.1
mailer_user: null
mailer_password: null
Swift Mailerã«ã¯ãSMTPãµãŒããŒã®äœ¿çšãããŒã«ã«ã®Sendmailã€ã³ã¹ããŒã«ã®äœ¿çšãGmailã¢ã«ãŠã³ãã®äœ¿çšãªã©ãé»åã¡ãŒã«ãéä¿¡ããããã®å€ãã®æ¹æ³ãçšæãããŠããŸãã ç°¡åã«ããããã«ãGmailã¢ã«ãŠã³ãã䜿çšããŸãã ãŠãŒã¶ãŒåãšãã¹ã¯ãŒãã眮ãæããŠãã©ã¡ãŒã¿ãŒãæŽæ°ããŸãã
mailer_transport: gmail
mailer_encryption: ssl
mailer_auth_mode: login
mailer_host: smtp.gmail.com
mailer_user: _
mailer_password: _
éèŠïŒ
ãããžã§ã¯ãã«Gitãªã©ã®ããŒãžã§ã³ç®¡çã·ã¹ãã ïŒVCSïŒã䜿çšããå Žåãç¹ã«ãªããžããªãå
¬éãããŠããå Žåã¯æ³šæããŠãã ããã ã¢ããªã±ãŒã·ã§ã³ãã¡ã€ã«ã確èªããå¿
èŠããããŸã
app/config/parameters.yml
VCSã®ãªã¹ããç¡èŠããããã«è¿œå ãããŸãã ã
ã³ã³ãããŒã©ãŒ
次ã®ã³ãŒããã³ããŒããŠã
src/Blogger/BlogBundle/Controller/PageController.php
ããããŒãžã³ã³ãããŒã©ãŒãæŽæ°ããŸãã
if ($form->isValid()) { $message = \Swift_Message::newInstance() ->setSubject('Contact enquiry from symblog') ->setFrom('enquiries@symblog.co.uk') ->setTo('email@email.com') ->setBody($this->renderView('BloggerBlogBundle:Page:contactEmail.txt.twig', array('enquiry' => $enquiry))); $this->get('mailer')->send($message); $this->get('session')->getFlashBag()->add('blogger-notice', 'Your contact enquiry was successfully sent. Thank you!');
SwiftMailerã©ã€ãã©ãªã䜿çšããŠSwift_Messageãäœæãããšãé»åã¡ãŒã«ãšããŠéä¿¡ã§ããŸãã
ã泚æ
Swift Mailerã©ã€ãã©ãªã¯åå空éã䜿çšããªããããSwift Mailer \ã¯ã©ã¹ã®ãã¬ãã£ãã¯ã¹ãä»ããå¿
èŠããããŸãã ããã«ãããPHPã¯ã°ããŒãã«ã¹ããŒã¹ã«æ»ãããã«æ瀺ãããŸãã \ã®åå空éãæããªããã¹ãŠã®ã¯ã©ã¹ãšé¢æ°ã«ãã¬ãã£ãã¯ã¹ãè¿œå ããå¿
èŠããããŸãã ãã®ãã¬ãã£ãã¯ã¹ãSwift_Messageã¯ã©ã¹ã®åã«é
眮ããªãå ŽåãPHPã¯çŸåšã®ããŒã ã¹ããŒã¹ïŒãã®äŸã§ã¯Blogger \ BlogBuâândle \ ControllerïŒã®ã¯ã©ã¹ã«è¡šç€ºããããšã©ãŒãçºçããŸãã
ãŸããã»ãã·ã§ã³ã§ãã©ãã·ã¥ã¡ãã»ãŒãžãèšå®ããŸãã
ãã©ãã·ã¥ã¡ãã»ãŒãžã¯ã1åã®ãªã¯ãšã¹ãã§ä¿åãããã¡ãã»ãŒãžã§ãããã®åŸããããã¯Symfony2ããèªåçã«ã¯ãªã¢ãããŸããé£çµ¡å
ãã³ãã¬ãŒãã«ãã©ãã·ã¥ã¡ãã»ãŒãžã衚瀺ããããªã¯ãšã¹ããéä¿¡ãããããšããŠãŒã¶ãŒã«éç¥ããŸãããã©ãã·ã¥ã¡ãã»ãŒãžã¯1ã€ã®ãªã¯ãšã¹ãã«å¯ŸããŠã®ã¿ä¿åãããããã以åã®ã¢ã¯ã·ã§ã³ãæåããããšããŠãŒã¶ãŒã«éç¥ããã®ã«çæ³çã§ãããã©ãã·ã¥ã¡ãã»ãŒãžã衚瀺ããã«src/Blogger/BlogBundle/Resources/views/Page/contact.html.twig
ã¯ããã³ãã¬ãŒãã®å
容ãæŽæ°ããé£çµ¡å
ãã³ãã¬ãŒããæŽæ°ããå¿
èŠããããŸãã
ãã®ã³ãŒãã¯ãããã¬ãŒéç¥èå¥åãæã€ãã©ãã·ã¥ã¡ãã»ãŒãžãèšå®ããã³è¡šç€ºãããŠãããã©ããã確èªããŸãããŠã§ããã¹ã¿ãŒã®ã¡ãŒã«ç»é²
Symfony2ã¯ãç¬èªã®èšå®ãå®çŸ©ããããã«äœ¿çšã§ããæ§æã·ã¹ãã ãæäŸããŸããäžèšã®ã³ã³ãããŒã©ãŒã§ã¢ãã¬ã¹ãããŒãã³ãŒãã£ã³ã°ããã®ã§ã¯ãªãããã®ã·ã¹ãã ã䜿çšããŠãŠã§ããã¹ã¿ãŒã®ã¡ãŒã«ãèšå®ããŸãããããã£ãŠãã³ãŒããè€è£œããããšãªãããã®å€ãä»ã®å Žæã§ç°¡åã«åå©çšã§ããŸããããã«ãããªãã®ããã°ãããªãã«ãšã£ãŠããŸãã«ãå€ãã®ãã©ãã£ãã¯ãåŒãèµ·ãããŠããå Žåãã¢ã·ã¹ã¿ã³ãã«ã¡ãŒã«ãéä¿¡ããããã«ããªãã®ã¡ãŒã«ã¢ãã¬ã¹ãç°¡åã«æŽæ°ããããšãã§ããŸããæ°ãããã¡ã€ã«src/Blogger/BlogBundle/Resources/config/config.yml
ãäœæãã次ã貌ãä»ããŸãã parameters:
ãã©ã¡ãŒã¿ãå®çŸ©ãããšãã¯ãã³ã³ããŒãã³ãã®æ°ã§ãã©ã¡ãŒã¿åãåºåãããšããå§ãããŸããæåã®éšåã¯å°æåã§ãã¢ã³ããŒã¹ã³ã¢ã䜿çšããŠåèªãåºåãå¿
èŠããããŸãããã®äŸã§ã¯ãBloggerBlogBuâândleãã³ãã«ãblogger_blogã«å€æŽããŸãã...æ®ãã®ãã©ã¡ãŒã¿ãŒåã«ã¯ãä»»æã®æ°ã®ããŒããå«ããããšãã§ããŸããïŒãããïŒãããã«ããããã©ã¡ãŒã¿ãè«ççã«ã°ã«ãŒãåã§ããŸããSymfony2ã¢ããªã±ãŒã·ã§ã³ãæ°ãããã©ã¡ãŒã¿ãŒã䜿çšããã«ã¯ãã¡ã€ã³ã¢ããªã±ãŒã·ã§ã³æ§æãã¡ã€ã«ã«æ§æãã€ã³ããŒãããå¿
èŠããããŸãããã®app/config/config.yml
ããã«ã¯ã次ãè¿œå ããŸãã
ã€ã³ããŒããã¹ã¯ããã£ã¹ã¯äžã®ãã¡ã€ã«ã®ç©ççãªå Žæã§ããæåŸã«ãcontactActioné¢æ°ãæŽæ°ããŠããã©ã¡ãŒã¿ãŒã䜿çšããŸãã
ãã³ã
æ§æãã¡ã€ã«ã¯ã¢ããªã±ãŒã·ã§ã³æ§æãã¡ã€ã«ã®æäžéšã«ã€ã³ããŒãããããããã¢ããªã±ãŒã·ã§ã³ã«ã€ã³ããŒãããããã©ã¡ãŒã¿ãŒãç°¡åã«ãªãŒããŒã©ã€ãã§ããŸããããšãã°ã次ã®è¡ãäžéšã«è¿œå ããapp/config/config.yml
ãšããã©ã¡ãŒã¿ãŒå€ãäžæžããããŸãã
ã¡ãŒã«ãã³ãã¬ãŒãã®äœæ
é»åã¡ãŒã«ã®æ¬æã«ãã³ãã¬ãŒãã衚瀺ãããŸãããã®ãã³ãã¬ãŒããäœæãsrc/Blogger/BlogBundle/Resources/views/Page/contactEmail.txt.twig
ã次ãè¿œå ããŸãã {
ãŸãããã®ãã³ãã¬ãŒãã®æ¡åŒµåããäœæããä»ã®ãã³ãã¬ãŒããšã¯ç°ãªãããšã«ãæ°ã¥ããããããŸãããæ¡åŒµå.txt.twigã䜿çšããŸããæ¡åŒµåã®æåã®éšåã§ãã.txtã¯ãçæãããã¡ã€ã«åœ¢åŒãå®çŸ©ããŸããäžè¬çãªåœ¢åŒã«ã¯ã.txtã.htmlã.cssã.jsãXMLãããã³.jsonãå«ãŸããŸããæ¡åŒµæ©èœã®æåŸã®éšåã¯ã䜿çšãããã³ãã¬ãŒããšã³ãžã³ïŒãã®å Žåã¯TwigïŒã決å®ããŸãã.phpæ¡åŒµåã¯ãPHPã䜿çšããŠãã³ãã¬ãŒãã衚瀺ããŸããããã§ããªã¯ãšã¹ããéä¿¡ãããšãblogger_blog.emails.contact_emailãã©ã¡ãŒã¿ãŒã§æå®ãããã¢ãã¬ã¹ã«ã¡ãŒã«ãéä¿¡ãããŸãã
Symfony2 SwiftMailer Symfony2. . , Symfony 2 SwiftMailer , . app/config/config_test.yml
swiftmailer: disable_delivery: true
, Dev . , , . , Dev , app/config/config_dev.yml
é»åã¡ãŒã«ãéä¿¡ãããããšã確èªããæ¹æ³ã«é©ãã§ããããSymfony2ã«ã¯ãéçºè
ããŒã«ããŒã䜿çšãããã®ããã®ãœãªã¥ãŒã·ã§ã³ããããŸããã¬ã¿ãŒãéä¿¡ããããšãããŒã«ããŒã«ã¡ãŒã«éç¥ã¢ã€ã³ã³ã衚瀺ãããã¬ã¿ãŒã«é¢ãããã¹ãŠã®æ
å ±ã衚瀺ãããŸããé£çµ¡å
ãã©ãŒã ã®å Žåã®ããã«ãã¡ãŒã«ã®éä¿¡åŸã«ãªãã€ã¬ã¯ãããå ŽåãããŒã«ããŒã«ã¡ãŒã«éç¥ã衚瀺ããã«ã¯ãintercept_redirectsèšå®app/config/config_dev.yml
ãtrueã«èšå®ããå¿
èŠããããŸãã次ã®ãã©ã¡ãŒã¿ãŒãDevæ§æãã¡ã€ã«ã«é
眮
ããããšã«ãããSwiftMailerãæ§æããŠããã¹ãŠã®é»åã¡ãŒã«ãDevç°å¢ã®ç¹å®ã®é»åã¡ãŒã«ã¢ãã¬ã¹ã«éä¿¡ã§ããŸã äœçœ®ãã app/config/config_dev.yml
swiftmailer: delivery_address: development@symblog.dev
ãããã«
ãŠã§ããµã€ãã®æãåºæ¬çãªéšåã®1ã€ã§ãããã©ãŒã ãäœæããããã®æŠå¿µã瀺ããŸããã次ã«ããã®ãã¥ãŒããªã¢ã«ã®ã»ãšãã©ã§ããModelã«ã€ããŠèª¬æããŸããDoctrine 2ã«ã€ããŠè©±ããããã䜿çšããŠããã°ã¢ãã«ãå®çŸ©ããŸãããããŸããããŒã¿ãã£ã¯ã¹ãã£ã®æŠå¿µã調ã¹ãŸãããœãŒã¹ãšå¯è³æïŒhttps://symfony.com/http://tutorial.symblog.co.uk/http://twig.sensiolabs.org/http://www.doctrine-project.org/ãŸããhttpsïŒ/ /getcomposer.org/ããŒã1-Symfony2ãšãã³ãã¬ãŒãã®æ§æ
ããŒã3-Doctrine 2ãšããŒã¿ãã£ããã£ã³ã°
ããŒã4-ã³ã¡ã³ãã¢ãã«ããªããžããªã移è¡Doctrine 2
ããŒã5-Twigæ¡åŒµããµã€ãããŒãã¢ã»ãã
ããŒã6-ãŠããããšæ©èœã®ãã¹ã
ãŸããããã¥ã¢ã«ãæ°ã«å
¥ã£ããããããžã§ã¯ããªããžããªã«ã¹ã¿ãŒãä»ãããã賌èªããããšãã§ããŸããããããšã