0

みんな。私は数週間前に個人的なプロジェクトで atk4 を使い始めましたが、それ以来、いくつかの問題に直面しています。この特定の質問は、atk4 フレームワークに同梱されている CRUD コンポーネントを使用するときにフォームの検証を行う方法に関するものです。

私はすでにいくつかの異なる解決策を試しましたが、どれも私の問題を解決していません。

ここでの問題は、フォームの検証がメソッドの呼び出し内で行われることであると感じています$form->isSubmitted()(私は正しいですか?)。ページ内で CRUD コンポーネントを使用する場合、フォーム送信を処理する方法を使用しないため、それに代わるものを見つける必要があります。たとえば、次の init() 関数を持つ Page があるとします。

function init() {
    parent::init();

    // create a CRUD and set a model to it
    $crud = $this->add('CRUD');
    $m = $crud->setModel('Person');

    if ($crud->form) {
        $fn = $crud->form->getField('first_name');
        $fn->validateNotNull('The first name must not be empty.');
    }
}

名フィールドに検証を追加しましたが、検証されません。私はいくつかのことを試みましたが、うまくいきませんでした。CRUD クラスを拡張してformSubmit($form)関数を再実装し、そこに検証を追加しようとしました。やってもうまくいかない。

もともと (CRUD クラスで)、次の関数があります。

function formSubmit($form){
    $form->update();
    $this->api->addHook('pre-render',array($this,'formSubmitSuccess'));
}

フォームのフィールドを反復処理してそのvalidate()メソッドを呼び出そうとしましたが、うまくいきませんでした。また、以下のように関数を変更しようとすると (たとえば、MyCRUD クラスで)、

function formSubmit($form){
    if ($form->isSubmitted()) {
        $form->update();
        $this->api->addHook('pre-render',array($this,'formSubmitSuccess'));
    }
}

無限ループが発生します...誰か助けてくれませんか?


[編集]

これに密接に関連する最後の質問です。以下のromanishによって提案されたまったく同じ検証を実行しようとしましたが、CRUDをページに追加する代わりにフォームを追加しただけで、機能しませんでした.CRUDは機能します. 代わりに、"Error in AJAX response: SyntaxError: Unexpected token" が発生します。

4

1 に答える 1

1

CRUD コンポーネントは、モデル内で行っている検証を尊重します。フォームにデータが入力されてボタンがクリックされると、$model->update()が呼び出されます。

実行は、インターセプトする必要がある beforeUpdate() フックに続きます。

http://agiletoolkit.org/learn/understand/model/actions

class Model_Book extends Model_Table {
  function init(){
    parent::init();
    // .... more definitions ...

    $this->addHook('beforeSave',$this);
  }

  function beforeSave(){
    if(strlen($this['book_name']<10))
       throw $this->exception('Name of the book is too short')
            ->setField('book_name');
}

モデルがそれ自体を保存できず、例外が発生する場合、フォームは自動的にフィールド エラーとして表示します。

于 2012-08-23T08:06:34.113 に答える