1

CakePHP プロジェクトで、エラー メッセージを表示したいのですが、うまくいきません。

送信時に「このフィールドは必須です」のようなエラーメッセージを表示したいのですが、デフォルトでは「このフィールドに入力してください」と表示されています。メッセージを変えましたが、本質から変わっていません。

私のビュー、モデル、およびコントローラーのコードは次のとおりです。

add_district.ctp:

        <div class="pg_title txtLeft">Add District</div>

               <?php echo $this->Form->create('Admins', array('action' => 'add_district'));?>
                <table>
                    <tbody>

                        <tr>
                            <td><label>District Name<span class="red required">*</span></label></td>
                            <td><?php echo $this->Form->input('District.district_name',array('label'=>false,'div'=>false,'size'=>50,'style'=>'width:330px;')); ?></td>
                        </tr>

                        <tr>
                            <td colspan="2" align="right" style="padding-right: 113px;"><input type="reset" value="Reset"> | <?php echo $this->Form->submit('ADD', array('div' => false));?></td>
                        </tr>
                    </tbody>
                </table>  
            <?php print $this->Form->end();?>   

<div class="clear"></div>

モデル :District.php

<?php
App::uses('AppModel', 'Model');
/**
 * Admin Login Model
 *
 */
 class District extends AppModel
 {
    public $name='District';
    public $usetables='districts';

     public $validate = array(
     'district_name' => array(
                     'rule' => 'notEmpty',
                     'allowEmpty' => false,
                     'message' => 'This field is required'));

 }
?>

そして私のコントローラーコードは(AdminController.php)です:

public function add_district()
        {

            $this->layout='common';
            $this->District->create();
            $this->District->set($this->data);
          if(empty($this->data) == false)
            {
                    if($this->District->save($this->data))
                    {
                        $this->Session->setFlash('District Added Successfully.');
                        $this->redirect('add_district');
                    }

            }
            else
            {
                $this->set('errors', $this->District->invalidFields());     
            }
        }
4

4 に答える 4

5

「このフィールドに記入してください」というメッセージは、CakePHP からではなく、ブラウザ自体からのものです。

そのため、Firefox と Chrome (およびおそらく他のブラウザー?) は、必須としてマークされたフィールドを自動的にチェックし、フォームを送信すると、そのフォーム データをサーバーに送信する前に、必須フィールドが入力されていない場合、ブラウザーはデフォルトのポップアップ メッセージ「このフィールドに入力してください」。

これはブラウザのデフォルトの動作であり、コードとは関係ありません。Cake のエラー メッセージが正常に機能していることを確認したい場合は、Safari で試してください (バージョン 6.0.2 の時点では、「必須フィールドの自動検出」機能がないようです)。Safari では、独自の CakePHP エラー メッセージが返されるはずです。

フォーム自体の autovalidate 属性を false として渡すことにより、ブラウザーでのエラー チェックを回避することもできます。「HTML5 フォーム要素の検証を無効にする」を参照してください。

于 2013-02-06T10:10:25.830 に答える
3

実際、CakePHP は FormHelper を介して HTML5required="required"属性を追加することでこれをトリガーしています。以前のバージョンの CakePHP はこれを行いませんでした。'required' => false必要に応じてフォーム入力属性配列に追加することで、これを防ぐことができます。

于 2013-03-24T20:22:53.337 に答える
1

問題はブラウザの検証です。少なくとも Chrome では、入力フィールドが「必須」に設定されているとイライラするでしょう。Safariでは問題なく動作しているようです。

モデルから 'required'=>false を追加しても、動作しない場合があります。

それを機能させるために私がしたことはビューで、「required」=>「false」を追加しました

たとえば、Users View と add.ctp があります。

echo $this->Form->input('fname', array('label' => 'First Name','required'=>'false'));

その後、すべてうまくいきました。しかし、ケーキの検証が機能するには、すべての入力フィールドでそれを行う必要がありました。

于 2013-05-13T04:45:03.497 に答える
0

add_district.ctp に書き込みます

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

これで問題が解決すると思います。

于 2014-05-21T17:39:20.533 に答える