私はCakePHPで 'フォームエディタ'を作成しています。オンザフライ/ダイナミックCakePhp 3検証とFormHelper
インターフェイスでは、ユーザーがフィールドに適用する検証を選択できます。数値、電子メールなど
このように私は、ユーザー入力に基づいてモデルの検証を動的に作成する必要があります。このために私はValidationオブジェクトを使うことができます:https://book.cakephp.org/3.0/en/core-libraries/validation.html
フィールドのエラーメッセージを自動的に出力するなど、FormHelperの機能を利用したいと考えています。
私はフォーム - のコンテキストオプションでバリ>(作成)を設定することにより、これを行うにはモデルからハードコーディングされたバリデータを使用する方法を見ることができます - しかし、どのように私はされている顧客の$バリデータオブジェクトを使用します動的に作成されますか?
明確化:
//get the form configuration
$form = $this->Forms->get($id, ['contain'=>['FormFields'=>['Validations']]]);
//set up validation based on the configuration
$validator = new Validator();
foreach($form->form_fields as $field){
...
if($field->required) $validator->notBlank($field->field_name);
}
$table = TableRegistry::get($form->type);
$table->setValidator($validator);
残念ながらsetValidator()TableRegistryの方法ではありません。
私は私のコントローラ内のいくつかのコードを持っています。
モデルで検証を設定した場合は、正しいフォーム設定を検索するために$ idパラメータが必要になります。
あなたの質問はどういうわけか、実際の問題がないかのように読み込まれます。オブジェクトがどのように作成されたか、一度作成されると、原点に関係なく使用されます。 – ndm
ありがとうございました。私はそれから私の質問はどう思う? Validatorオブジェクトを作成できます。そのオブジェクトを使用して検証を実行できますが、これを使用してフォームヘルパーがエラーにアクセスできるようにテーブル(?)を設定するにはどうすればよいですか? –
バリデータを作成する場所と作成方法、バリデーションにどのように使用されているかを示すことができます。たとえば 'validationDefault()'(またはモデルの検証メソッド)や 'Model.buildValidator'イベントを使って作成すると、何もする必要はありません。通常、検証エラーはエンティティは、ほとんどの場合、最初に手動でバリデータオブジェクトに触れる必要はありません。エンティティをフォームヘルパに渡すだけで済みます。 – ndm