問い合わせ条件付き必須項目

【環境情報】
・baserCMSのバージョン:5.2.1
・レンタルサーバー名:XAMPP on Windows
・使用テーマ:BcCosmo
・PHPスキル(自己評価):始めて二日目の全くの初心者

問い合わせで、例えば「不具合の報告、質問」をラジオボタンでの選択項目とし、「不具合の報告」の時は別フィールドの「アプリバージョン」を必須にしています。具体的には、
vendor/baserproject/bc-mail/src/Model/Table にある、MaleMessagesTable.php の239行目を、以下の様に書き換えました。‘appver’ は上記、別フィールドで、‘what’ はラジオボタンのフィールドです。

if ($mailField->field_name === 'appver') {
	$radio = $postData['what'];
	if ($radio == '不具合の報告') {
		$validator->requirePresence($mailField->field_name)
			->notEmptyString($mailField->field_name, __d('baser_core', '必須項目です。'));
	} else {
		$validator->allowEmptyString($mailField->field_name);
	}
} else {
	$validator->allowEmptyString($mailField->field_name);
}

試したみたところ、これで上手く動いているようです。ここからが質問なのですが、このような basercms 本体のファイルに手を加えるのが正しい方法なのでしょうか?basercms 4日を始めて4日目の全くのど素人のため、常識的な質問でしたら、お許しください。

こんにちは

basercms 本体のファイルに手を加えるのが正しい方法なのでしょうか?

コアに手を入れるのは避けるべきです
アップデート時に、対象ファイル(今回の場合MaleMessagesTable.php )に更新がある場合、先祖返りが発生するリスクがあります

質問主さまのやりたいことをどのように実現するか、という話ですが、

  • カスタマイズ用のプラグインを作成してイベント処理での実装
  • JavaScriptを利用して簡易的なチェックを実装する

などになるかと思います

例えば、ラジオボタン(「不具合の報告、質問」)の入力値を監視して、「[不具合の報告]が選択されている」かつ「[アプリバージョン]が未入力」の場合、アラートで警告文を出す
のような簡易的な処理を、themeのファイル内に直接記述するとかですかね…

少しでも参考になれば幸いです

ご教授感謝いたします。さらに一件だけお教え下さい。「カスタマイズ用のプラグインを作成」すると、サーバーサイドで処理ができるようになるのでしょうか?それとも現行の仕様ではできないとの理解でしょうか?
よろしくお願いいたします。

「カスタマイズ用のプラグインを作成」すると、サーバーサイドで処理ができるようになるのでしょうか?

ご認識の通りです
カスタマイズによってサーバーサイド(PHP)処理が可能になります
参考までに公式のドキュメントを置いておきます

お教えいただきまして感謝します。
pluginの作成にはcakePHPなどの作法の学習が必要なようですね。当初は「改造」で凌いで学習をして、いずれはユーザーが「不具合の報告」を選択したときは「必須」を、「質問」を選択したときは「任意」を表示するようJavaScriptで処理し、さらにサーバーサイドでも処理するようにしたいと思います。
有難うございました。

「いいね!」 1