2

Cakephp の初心者で、フォームを検証する必要があります。

これはコードです: コントローラー:

<?php
class TasksController extends AppController {
    var $name = 'Tasks';
    var $helpers = array('Html','Form','Session');
     public function index(){
     }
    function add_task()
    {
        if(!empty($this->data)) {
            //print_r($this->data);
            $this->Task->set($this->data);
            if ($this->Task->validates()) {
                // it validated logic
                //echo "ttt";
            } else {
                // didn't validate logic
                echo $errors = $this->Task->validationErrors;
            }
        }
    }
}
?>

モデル:

<?php
    class Task extends AppModel
    {
        public var $name = 'Task';
        var $useDbConfig = 'travanco_erp';
        public var $useTable = 'tbl_tasks'; // This model uses a database table 'exmp'
        public var $validate = array(
                    'task_title_mm' => array(
                            'rule' => 'notEmpty',
                            'required' => true,
                            'message' => 'The title field is required'
                    ),
                    'task_description_mm' => array(
                            'rule' => 'notEmpty',
                            'required' => true,
                            'message' => 'The description field is required'
                    ),
                    'task_from_mm' => array(
                            'rule' => 'notEmpty',
                            'required' => true,
                            'message' => 'The from date field is required'
                    ),
                    'task_to_mm' => array(
                            'rule' => 'notEmpty',
                            'required' => true,
                            'message' => 'The to date field is required'
                    )
            );

    }
?>

これはビューです:

<div class="employeeForm" style="width:64%; padding:10px 30%;"> 

            <?php echo $this->Form->create('test', array('class'=>'form'));?>
            <fieldset style="width:36em; padding:0px 0px;">
                    <div style="width:475px; font-family:Arial, Helvetica, sans-serif; font-size:16px; color:#333333; font-weight:bold; margin-left:20px; margin-top:10px;">Add Task</div>
                    <br/>
                <?php
                    /*echo $this->Form->input('task_ids_mm',        array(  'div'=>'frm_filed_new',
                                                                    'error' => array(   'wrap' => 'div',
                                                                                        'class' => 'formerror'
                                                                                    ),
                                                                    'label' => 'Task ID',
                                                                ));*/


                    echo $this->Form->input('task_title_mm',        array(  'div'=>'frm_filed_new',
                                                                    'error' => array(   'wrap' => 'div',
                                                                                        'class' => 'formerror'
                                                                                    ),
                                                                    'label' => 'Title',
                                                                ));


                    echo $this->Form->input('task_description_mm',  array(  'type' => 'textarea',
                                                                        'cols'=>60,
                                                                        'rows' => 5,
                                                                        'div'=>'frm_filed_new',
                                                                        'error' => array(   'wrap' => 'div',
                                                                                            'class' => 'formerror'
                                                                                    ),
                                                                        'label' => 'Description',
                                                                ));

                    echo $this->Form->input('task_from_mm',     array(  'div'=>'frm_filed_new','id'=>'task_from_mm','value'=>'',
                                                                    'error' => array(   'wrap' => 'div',
                                                                                        'class' => 'formerror'
                                                                                    ),
                                                                    'label' => 'From',
                                                                ));
                    echo $this->Form->input('task_to_mm',   array(  'div'=>'frm_filed_new','id'=>'task_to_mm','value'=>'',
                                                                    'error' => array(   'wrap' => 'div',
                                                                                        'class' => 'formerror'
                                                                                    ),
                                                                    'label' => 'To',
                                                                ));

                ?>  
                <br/>
                <?php echo $this->Form->button('Submit', array('type'=>'submit','escape'=>true)); ?>
            </fieldset>  
            <?php echo $this->Form->end(); ?>

        </div>

検証が機能していません。

私のコードのエラーは何ですか? どうすればこれを解決できますか?

編集:

これは、databse.php ファイルの設定ミスです。現在は修正されてprint_r($errors)います。エラーが表示されます。しかし、ビュー ページには表示されません。つまり、テキスト ボックスの近くです。

これはそのエラー配列です: Array ( [task_title_mm] => Array ( [0] => The title field is required ) [task_description_mm] => Array ( [0] => The description field is required ) [task_from_mm] => Array ( [0] => The from date field is required ) [task_to_mm] => Array ( [0] => The to date field is required ) )

テキストボックスの近くに配置するにはどうすればよいですか?

4

3 に答える 3

2

CakePHP は、モデルを自動的に検証し、検証エラーを表示するように設計されています。モデルの保存時に自動検証が実行されます。あなたの場合:

$this->Task->save($this->request->data);

上記は検証をトリガーします。実行する必要はありません: $this->Task->validates() - その場合、検証エラーの表示も自分で処理する必要があります。だから私はあなたが単に試してみるべきだと思います:

<?php
class TasksController extends AppController {
  var $name = 'Tasks';
  var $helpers = array('Html','Form','Session');

  function add_task()
  {

    if ($this->request->is('post')) {
      // If the form data can be validated and saved...
      if ($this->Task->save($this->request->data)) {
         //saved and validated
      }
    }
  }
}
?>
于 2012-09-12T07:45:02.310 に答える
1

あなたがあなたのモデルに書いているコードで気づいたことの1つ

public var $validate=array();

代わりに試してください

public $validate= array() or var $validate=array();

検証は単語の後に機能する必要があります。ありがとう :)

于 2013-02-18T04:52:16.150 に答える
0

これを試して:

if ($this->Task->validates()) {
            // it validated logic
            //echo "ttt";
} else {

     $this->validateErrors($this->Task);
     $this->render();
}
于 2012-09-12T08:16:41.697 に答える