5

バージョン 2.3 のクックブックでは、フォームの強制的な検証を無効にする可能性が導入されています。または、少なくとも私はそのように理解しました: 引用: http://book.cakephp.org/2.0/en/core-libraries/helpers/form.htmlから

" バージョン 2.3 で追加。

2.3 以降、検証ルールに基づいて、HTML5 の必須属性も入力に追加されます。options 配列に必要なキーを明示的に設定して、フィールドに対してオーバーライドすることができます。フォーム全体のブラウザ検証トリガーをスキップするには、FormHelper::submit() を使用して生成する入力ボタンにオプション 'formnovalidate' => true を設定するか、FormHelper::create() のオプションに 'novalidate' => true を設定します。 "

私の場合、このモデルを検索しています。もちろん、ユーザーはデータセットを追加する場合のように、すべての必須フィールドに入力する必要はありません。そのため、検索フォームの検証を無効にしたいと考えています。

3 つのバリエーションをすべて試しましたが、結果が表示されません。検索フォームでは、create の必須フィールドが必須です。

私が行ったそれらの試み:

初挑戦:

echo $this->Form->create('Partner', array('action' => 'search', 'novalidate' => true));

2回目の試行:

echo $this->Form->input('name', 
array('required' => false, 'value' => $this->Session->read('Searchparameter.name'))
);

3 回目の試行:

 $this->Form->submit('Submit', array('formnovalidate' => true));
    echo $this->Form->end();

変化:

echo $this->Form->end(__('Submit'), array('formnovalidate' => true));

私は何を間違って理解しましたか?ところで:私はキャッシュを無効にしたので、それは問題ではありません。

もちろん、この検証に古い回避策を使用することもできますが、2.3 でこのオプションが提供されている場合は、喜んで使用します。

カラミティ・ジェーン

4

4 に答える 4

7

だから私は問題を見つけて、少なくとも1つのバリエーションが機能していると思います:

私が今使っているのは:

echo $this->Form->create('Partner', array('action' => 'search', 'novalidate' => true));

私が予想していたのは、フィールドが太いラベルとアスタリスクでマークされないことだったと思います。それらはまだそこにありますが、それらを埋める必要はもうありません。そして、私が実際にフォームを提出してテストしたとき、私は99のバリエーションの1つを持っていたと思いますが、これは本当に間違っていました.

それが私を幸せにするかどうかは私が決めることですが、明らかに、それによって HTML5 検証をオフにすることができます。ラベルを太字やアスタリスクでなくしたい場合、オプションもありますか?

カラミティ・ジェーン

于 2013-03-20T13:15:39.537 に答える
1

解決策は実際にはもっと簡単です。特定のビューで検証を無効にしたい場合は、実際にはフォームを作成するときに存在しないモデルを参照するだけで済みます。たとえば、次のようなことができます

echo $this->Form->create('PartnerSearch');

コントローラーでは、次の方法でフォーム フィールドにアクセスできます。

$this->request->data["PartnerSearch"]["field"] 

通常の方法の代わりに:

$this->request->data["Partner"]["field"]
于 2013-09-14T02:20:50.643 に答える
1

私にとって、ブラウザの検証をスキップするには、はい、array('novalidate' => true)機能します。

<?php echo $this->Form->create('MyModelName', array('novalidate' => true)); ?>

ラベルを太字やアスタリスクにしないには、

<?php echo $this->Form->input('myinput', array('required' => false));
于 2013-10-12T05:33:55.033 に答える
0

私の場合、ボタンを使用してフォームを送信しました。これにより、より柔軟に対応できました。その場合、ボタンのオプションの配列でプロパティ 'formnovalidate' パスを使用しました。フォームは次のようになります。

<?php
echo $this->Form->create('yourCtrllerName',array('action'=>'actionInYourCtrller'));
echo $this->Form->input('your_field_pass',array('label'=>'pass','type'=>'password'));
....  other Form fields .....
echo $this->Form->button('Button Caption',
                          array('type'=>'submit',
                                'name'=>'keyInsideTheDataArrayForButtonData',
                                'formnovalidate' => true,
                                'value'=>'valueOfTheAboveKeyInTheDataArray',
                                'style'=>'<style you want to apply to button>',
                                ... other options if needed...
                                )
                         );
echo $this->Form->end();
于 2014-04-07T02:08:27.457 に答える