40. <?php
// src/Blogger/BlogBundle/Form/EnquiryType.php
namespace BloggerBlogBundleForm;
use SymfonyComponentFormAbstractType;
use SymfonyComponentFormFormBuilder;
class EnquiryType extends AbstractType
{
フォームタイプも
public function buildForm(FormBuilder $builder, array $options)
コピペで
{
$builder->add('name');
$builder->add('email', 'email');
$builder->add('subject');
$builder->add('body', 'textarea');
}
public function getName()
{
return 'contact';
}
}
*buildForm のパラメータは、2.1でイ src/Blogger/BlogBundle/
ンタフェースが変わりました。
FormBuilder型ではなく、 Type/EnquiryType.php
FormBuilderInterface型に。 @ganchiku Shin Ohno
40
12年6月30日土曜日
41. コントローラの実装
use BloggerBlogBundleEntityEnquiry;
use BloggerBlogBundleFormEnquiryType;
// snip Enquiry と
// src/Blogger/BlogBundle/Controller/PageController.php
/**
* @Route("/contact”)
EnquiryType
* @Method("GET")
* @Template()
*/ を use
public function contactAction()
{
$enquiry = new Enquiry();
$form = $this->createForm(new EnquiryType(), $enquiry);
$request = $this->getRequest();
if ($request->getMethod() == 'POST') {
$form->bindRequest($request); POST リクエス
if ($form->isValid()) {
// Perform some action, such as sending an email
// Redirect - This is important to prevent users re-posting
トの際にはパラ
// the form if they refresh the page
}
return $this->redirect($this->generateUrl('blogger_blog_page_contact'));
メータをフォーム
}
return $this->render(array(
'form' => $form->createView() にバインド
);
}
@ganchiku Shin Ohno
41
12年6月30日土曜日
49. アノテーションがないとき
<?php
// src/Blogger/BlogBundle/Entity/Enquiry.php
namespace BloggerBlogBundleEntity;
use SymfonyComponentValidatorMappingClassMetadata;
use SymfonyComponentValidatorConstraintsNotBlank;
use SymfonyComponentValidatorConstraintsEmail;
use SymfonyComponentValidatorConstraintsMinLength;
use SymfonyComponentValidatorConstraintsMaxLength;
class Enquiry
{
// ..
public static function loadValidatorMetadata(ClassMetadata $metadata)
{
$metadata->addPropertyConstraint('name', new NotBlank());
$metadata->addPropertyConstraint('email', new Email());
$metadata->addPropertyConstraint('subject', new NotBlank());
$metadata->addPropertyConstraint('subject', new MaxLength(50));
$metadata->addPropertyConstraint('body', new MinLength(50));
}
// ..
}
@ganchiku Shin Ohno
49
12年6月30日土曜日
53. コントローラの修正
public function contactAction()
{
// ..
if ($form->isValid()) {
$message = Swift_Message::newInstance()
->setSubject('Contact enquiry from symblog')
->setFrom('symfony.japan.test@gmail.com')
->setTo('YOUR_MAIL_ADDRESS@example.com')
->setBody($this->renderView('BloggerBlogBundle:Page:contactEmail.txt.twig', array('enquiry' => $enquiry)));
$this->get('mailer')->send($message);
$this->get('session')->setFlash('blogger-notice', 'Your contact enquiry was successfully sent. Thank you!');
// Redirect - This is important to prevent users re-posting
// the form if they refresh the page
return $this->redirect($this->generateUrl('blogger_blog_page_contact'));
}
// ..
}
SwiftMailer を使用
@ganchiku Shin Ohno
53
12年6月30日土曜日