質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

ただいまの
回答率

88.92%

Symfonyのセレクトボックスを選択しても値が空のまま送信される

受付中

回答 1

投稿 編集

  • 評価
  • クリップ 0
  • VIEW 315

dauto

score 33

Symfony3(EC-CUBE4)でフォームを作成したのですが、フォームのセレクトボックスを選択しても以下のエラー通り、値がnullのまま送信されてしまいます。

SQLSTATE[23000]: Integrity constraint violation: 1048 Column 'channel_id' cannot be null


値を送信するにはどうしたらいいでしょうか。ご助言よろしくお願いします。

関連するtemplate、Entity、FormTypeは以下になります。

{#
This file is part of EC-CUBE

Copyright(c) EC-CUBE CO.,LTD. All Rights Reserved.

http://www.ec-cube.co.jp/

For the full copyright and license information, please view the LICENSE
file that was distributed with this source code.
#}
{% extends '@admin/default_frame.twig' %}

{% set menus = ['live', 'authority'] %}

{% block title %}
    配信権限登録
{% endblock %}
{% block sub_title %}
    {{ 'admin.setting.system'|trans }}
{% endblock %}

{% form_theme form '@admin/Form/bootstrap_4_horizontal_layout.html.twig' %}

{% block main %}
    <form name="member_form" role="form" id="member_form" method="post" action="" novalidate>
        {{ form_widget(form._token) }}
        <div class="c-contentsArea__cols">
            <div class="c-contentsArea__primaryCol">
                <div class="c-primaryCol">
                    <div class="card rounded border-0 mb-4">
                        <div class="card-header">
                            <div class="row">
                                <div class="col-8">
                                    <span class="card-title">{{ 'admin.setting.system.member.member_registration'|trans }}</span>
                                </div>
                                <div class="col-4 text-right">
                                    <a data-toggle="collapse" href="#memberInfo" aria-expanded="false" aria-controls="memberInfo">
                                        <i class="fa fa-angle-up fa-lg"></i>
                                    </a>
                                </div>
                            </div>
                        </div>
                        <div class="collapse show ec-cardCollapse" id="memberInfo">
                            <div class="card-body">
                                <div class="row mb-2">
                                    <div class="col-3">
                                        <span>チャンネル名</span>
                                        <span class="badge badge-primary ml-1">{{ 'admin.common.required'|trans }}</span>
                                    </div>
                                    <div class="col">
                                        <div class="row">
                                            <div class="col">
                                                {{ form_widget(form.Channel) }}
                                            </div>
                                            {{ form_errors(form.Channel) }}
                                        </div>
                                    </div>
                                </div>

                                <div class="row mb-2">
                                    <div class="col-3">
                                        <span>条件</span>
                                        <span class="badge badge-primary ml-1">{{ 'admin.common.required'|trans }}</span>
                                    </div>
                                    <div class="col">
                                        <div class="row">
                                            <div class="col">
                                                {{ form_widget(form.live_condition) }}
                                            </div>
                                            {{ form_errors(form.live_condition) }}                                        </div>
                                </div>
                                </div>

                                <div class="row mb-2">
                                    <div class="col-3">
                                        <span>条件の組み合わせ</span>
                                        <span class="badge badge-primary ml-1">{{ 'admin.common.required'|trans }}</span>
                                    </div>
                                    <div class="col">
                                        <div class="row">
                                            <div class="col">
                                                {{ form_widget(form.Combination) }}
                                            </div>
                                            {{ form_errors(form.Combination) }}
                                        </div>
                                    </div>
                                </div>
                                {# エンティティ拡張の自動出力 #}
                                {% for f in form if f.vars.eccube_form_options.auto_render %}
                                    {% if f.vars.eccube_form_options.form_theme %}
                                        {% form_theme f f.vars.eccube_form_options.form_theme %}
                                        {{ form_row(f) }}
                                    {% else %}
                                        <div class="row mb-2">
                                            <div class="col-3">
                                                <span>{{ f.vars.label|trans }}</span>
                                            </div>
                                            <div class="col">
                                                {{ form_widget(f) }}
                                                {{ form_errors(f) }}
                                            </div>
                                        </div>
                                    {% endif %}
                                {% endfor %}
                            </div>
                        </div>
                    </div>
                </div>
            </div>
        </div>

        <div class="c-conversionArea">
            <div class="c-conversionArea__container">
                <div class="row justify-content-between align-items-center">
                    <div class="col-6">
                        <div class="c-conversionArea__leftBlockItem">
                            <a class="c-baseLink" href="{{ url('admin_setting_system_member') }}">
                                <i class="fa fa-backward" aria-hidden="true"></i>
                                <span>{{ 'admin.setting.system.member_management'|trans }}</span>
                            </a>
                        </div>
                    </div>
                    <div class="col-6">
                        <div id="ex-conversion-action" class="row align-items-center justify-content-end">
                            <div class="col-auto">
                                <button class="btn btn-ec-conversion px-5" type="submit">{{ 'admin.common.registration'|trans }}</button>
                            </div>
                        </div>
                    </div>
                </div>
            </div>
        </div>
    </form>
{% endblock %}
<?php

namespace Customize\Entity;

use Customize\Entity\Master\Combination;
use DateTime;
use Doctrine\ORM\Mapping as ORM;
use Eccube\Entity\Member;
use Grpc\Channel;

/**
 * AuthorityRole
 *
 * @ORM\Table(name="dtb_live_authority_role")
 * @ORM\InheritanceType("SINGLE_TABLE")
 * @ORM\DiscriminatorColumn(name="discriminator_type", type="string", length=255)
 * @ORM\HasLifecycleCallbacks()
 * @ORM\Entity(repositoryClass="Customize\Repository\LiveAuthorityRoleRepository")
 */
class LiveAuthorityRole extends \Eccube\Entity\AbstractEntity
{

    /**
     * @var Channel
     *
     * @ORM\ManyToOne(targetEntity="Customize\Entity\LiveChannel")
     * @ORM\JoinColumns({
     *   @ORM\JoinColumn(name="channel_id", referencedColumnName="id")
     * })
     */
    private $Channel;

    /**
     * Set channel.
     *
     * @param Channel|null $channel
     *
     * @return LiveAuthorityRole
     */
    public function setChannel(Channel $channel = null)
    {
        $this->Channel = $channel;

        return $this;
    }

    /**
     * Get channel.
     *
     * @return Channel
     */
    public function getChannel()
    {
        return $this->Channel;
    }
}
<?php

/*
 * This file is part of EC-CUBE
 *
 * Copyright(c) EC-CUBE CO.,LTD. All Rights Reserved.
 *
 * http://www.ec-cube.co.jp/
 *
 * For the full copyright and license information, please view the LICENSE
 * file that was distributed with this source code.
 */

namespace Customize\Form\Type\Admin;

use Symfony\Bridge\Doctrine\Form\Type\EntityType;
use Symfony\Component\Form\AbstractType;
use Symfony\Component\Form\CallbackTransformer;
use Symfony\Component\Form\Extension\Core\Type\TextType;
use Symfony\Component\Form\FormBuilderInterface;
use Symfony\Component\Form\FormError;
use Symfony\Component\Form\FormEvent;
use Symfony\Component\Form\FormEvents;
use Symfony\Component\OptionsResolver\OptionsResolver;
use Symfony\Component\Validator\Constraints\Regex;
use Symfony\Component\Validator\Constraints\Length;
use Eccube\Common\EccubeConfig;
use Customize\Form\Type\Master\CombinationType;

class LiveAuthorityRoleType extends AbstractType
{
    /**
     * @var EccubeConfig
     */
    protected $eccubeConfig;

    public function __construct(EccubeConfig $eccubeConfig)
    {
        $this->eccubeConfig = $eccubeConfig;
    }

    /**
     * {@inheritdoc}
     */
    public function buildForm(FormBuilderInterface $builder, array $options)
    {
        $builder
            ->add('Channel', EntityType::class, [
                'class' => 'Customize\Entity\LiveChannel',
                'expanded' => false,
                'multiple' => false,
                'required' => true,
                "mapped" => false,
                'choice_label' => 'name',
            ])
            ->add('Combination', CombinationType::class, [
                'required' => true,
            ])
            ->add('live_condition', TextType::class, [
                'required' => true,
                'constraints' => [
                    new Length(['max' => $this->eccubeConfig['eccube_stext_len']]),
                ],
            ])
            ->addEventListener(FormEvents::POST_SUBMIT, function (FormEvent $event) {
                $form = $event->getForm();

                $Channel = $form['Channel']->getData();
                $condition = $form['live_condition']->getData();

                if (!$Channel && !empty($condition)) {
                    $form['Channel']->addError(new FormError(trans('admin.setting.system.authority.authority_not_selected')));
                } elseif ($Channel && empty($condition)) {
                    $form['live_condition']->addError(new FormError(trans('admin.setting.system.authority.deny_url_is_empty')));
                }
            });
    }

    /**
     * {@inheritdoc}
     */
    public function configureOptions(OptionsResolver $resolver)
    {
        $resolver->setDefaults([
            'data_class' => 'Customize\Entity\LiveAuthorityRole',
        ]);
    }

    /**
     * {@inheritdoc}
     */
    public function getBlockPrefix()
    {
        return 'admin_live_authority_role';
    }
}
  • 気になる質問をクリップする

    クリップした質問は、後からいつでもマイページで確認できます。

    またクリップした質問に回答があった際、通知やメールを受け取ることができます。

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 過去に投稿した質問と同じ内容の質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

質問への追記・修正、ベストアンサー選択の依頼

  • m.ts10806

    2020/07/06 05:36

    htmlが提示されていませんがview側の問題は全くないという根拠をご提示ください。

    キャンセル

  • dauto

    2020/07/06 08:28

    view側に問題があるという考えに至らなかったので提示していませんでした。
    先程twigを追記しましたのでご確認よろしくお願いします。

    キャンセル

回答 1

0

"mapped" => false になっているため、 Entity に bind されていないのだと思われます

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

15分調べてもわからないことは、teratailで質問しよう!

  • ただいまの回答率 88.92%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

関連した質問

同じタグがついた質問を見る