0

ユーザーが経費請求を送信できるようにする、作業中のcakephp 2.2アプリがあります。経費請求は、経費コードを持つ多くの経費で構成されています。関係は次のとおりです。

ExpenseClaim hasMany Expense Expense belongsTo ExpenseClaim Expense hasAndBelongsToMany ExpenseCode

フォームが完成したときに各経費の経費コードが完全である必要があることを確認するための検証を追加したいのですが、何らかの理由で経費モデルに通常の検証ルールを追加しても機能しません。明らかに何かが欠けています。

経費モデルでの検証は次のとおりです。

class Expense extends AppModel {

/**
 * Display field
 *
 * @var string
 */
    public $displayField = 'id';

/**
 * Validation rules
 *
 * @var array
 */
    public $validate = array(
        'date' => array(
            'notempty' => array(
                'rule' => array('notempty'),
                'message' => 'Date cannot be blank',
            ),
        ),
        'sitename' => array(
            'notempty' => array(
                'rule' => array('notempty'),
                'message' => 'Sitename cannot be blank',
            ),
        ),
        'detail' => array(
            'notempty' => array(
                'rule' => array('notempty'),
                'message' => 'Details cannot be blank',
            ),
        ),
        'ExpenseCode' => array(
            'multiple' => array(
                'rule' => array('multiple', array('min' => 1)),
                'message' => 'You need to select at least one tag',
              ),
        ),

$this->request->data がexpectedClaim/add メソッドを介して送信されると、次のようになります。

 /app/Controller/ExpenseClaimsController.php (line 179)

array(
    'submit' => 'Save',
    'Expense' => array(
        (int) 0 => array(
            'date' => array(
                'day' => '25',
                'month' => '03',
                'year' => '2013'
            ),
            'sitename' => '123',
            'detail' => 'test',
            'ExpenseCode' => array(
                'ExpenseCode' => ''
            ),
            'billable' => '1',
            'amount' => '100',
            'miles' => '',
            'total' => '100',
            'billable_mileage' => '',
            'recorded_global_mileage_rate' => '0.4'
        )
    ),
    'CashFloat' => array(
        'amount' => ''
    ),
    'ExpenseClaim' => array(
        'user_id' => '16',
        'claim_status_id' => '1',
        'date_submitted' => '2013-03-25 18:20:53'
    )
)

ご覧のとおり、ExpenseCode は空です...そうでないことを確認するにはどうすればよいですか?

4

1 に答える 1

0

経費モデルに以下を追加することで、これを解決できました。

function beforeValidate() {

    if (!isset($this->data['ExpenseCode']['ExpenseCode']) || empty($this->data['ExpenseCode']['ExpenseCode'])) {
        $this->invalidate('ExpenseCode', 'Type cannot be blank');
    }
    return true;
}

それが誰かを助けることを願っています。

于 2013-03-26T12:26:54.263 に答える