<?php
namespace Plugin\NZCustomPlugin\Form\Type\Admin;
use Plugin\NZCustomPlugin\Entity\CustomForm;
use Eccube\Entity\Layout;
use Eccube\Form\Type\Admin\LayoutType as EccubeLayoutType;
use Symfony\Bridge\Doctrine\Form\Type\EntityType;
use Symfony\Component\Form\AbstractType;
use Symfony\Component\Form\Extension\Core\Type\TextType;
use Symfony\Component\Form\Extension\Core\Type\TextareaType;
use Symfony\Component\Form\Extension\Core\Type\CheckboxType;
use Symfony\Component\Form\Extension\Core\Type\EmailType;
use Symfony\Component\Form\Extension\Core\Type\DateTimeType;
use Symfony\Component\Form\FormBuilderInterface;
use Symfony\Component\OptionsResolver\OptionsResolver;
use Symfony\Component\Validator\Constraints as Assert;
class FormType extends AbstractType
{
public function buildForm(FormBuilderInterface $builder, array $options)
{
$builder
->add('name', TextType::class, [
'label' => 'フォーム名',
'required' => true,
'constraints' => [
new Assert\NotBlank(),
],
])
->add('form_key', TextType::class, [
'label' => 'フォームキー',
'required' => true,
'constraints' => [
new Assert\NotBlank(),
new Assert\Regex([
'pattern' => '/^[a-zA-Z0-9_-]+$/',
'message' => '半角英数字、ハイフン、アンダースコアのみ使用できます',
]),
],
'help' => 'URL: /nzcustomplugin/{フォームキー}',
])
->add('description', TextareaType::class, [
'label' => '説明',
'required' => false,
'attr' => [
'rows' => 5,
],
'help' => 'フォーム上部に表示される説明文です。HTMLタグも使用できます(画像を表示する場合は <img src="/html/user_data/assets/img/your-image.jpg" style="width:100%;"> のように記述)',
])
->add('Layout', EntityType::class, [
'label' => 'PCレイアウト',
'class' => Layout::class,
'choice_label' => 'name',
'placeholder' => 'レイアウトを選択してください',
'required' => false,
'help' => 'フォームページに適用するレイアウトを選択します。未選択の場合はデフォルトレイアウトが適用されます。',
])
->add('LayoutMobile', EntityType::class, [
'label' => 'モバイルレイアウト',
'class' => Layout::class,
'choice_label' => 'name',
'placeholder' => 'レイアウトを選択してください',
'required' => false,
'help' => 'モバイル端末用のレイアウトを選択します(オプション)。未選択の場合はPCレイアウトが適用されます。',
])
->add('is_active', CheckboxType::class, [
'label' => '有効',
'required' => false,
])
->add('publish_start_date', DateTimeType::class, [
'label' => '公開開始日時',
'required' => false,
'widget' => 'single_text',
'html5' => true,
'attr' => [
'class' => 'form-control',
],
'help' => '未設定の場合は即時公開',
])
->add('publish_end_date', DateTimeType::class, [
'label' => '公開終了日時',
'required' => false,
'widget' => 'single_text',
'html5' => true,
'attr' => [
'class' => 'form-control',
],
'help' => '未設定の場合は無期限',
])
->add('require_login', CheckboxType::class, [
'label' => '会員登録必須',
'required' => false,
'help' => 'チェックを入れると、ログインしていないユーザーはログイン画面に遷移します',
])
->add('send_customer_mail', CheckboxType::class, [
'label' => '送信者へメール送信',
'required' => false,
'help' => 'フォーム送信者に確認メールを送信します',
])
->add('send_admin_mail', CheckboxType::class, [
'label' => '管理者へメール送信',
'required' => false,
'help' => '管理者に通知メールを送信します',
])
->add('admin_mail_address', EmailType::class, [
'label' => '管理者メールアドレス',
'required' => false,
'constraints' => [
new Assert\Email(['message' => '有効なメールアドレスを入力してください']),
],
'help' => '複数指定する場合はカンマ区切りで入力',
])
->add('mail_subject', TextType::class, [
'label' => 'メール件名',
'required' => false,
'help' => '変数: {form_name}, {submit_date}が使用できます',
])
->add('mail_template', TextareaType::class, [
'label' => 'メール本文テンプレート',
'required' => false,
'attr' => [
'rows' => 10,
],
'help' => '変数: {form_name}, {submit_date}, {field_name}が使用できます',
])
->add('complete_message', TextareaType::class, [
'label' => '送信完了メッセージ',
'required' => false,
'attr' => [
'rows' => 5,
],
'help' => '送信完了画面に表示されるメッセージです。未設定の場合はデフォルトメッセージが表示されます。',
]);
}
public function configureOptions(OptionsResolver $resolver)
{
$resolver->setDefaults([
'data_class' => CustomForm::class,
]);
}
}