1

フォーム検証ライブラリを使用していますが、どうすればよいかわかりません。

いくつかの分野を持っていますが、

私は持っている:

  • page_title => 必須
  • menu_title => 不要
  • parent_id => null または必須

menu_title が設定されていない場合は、page_title の値を取る必要があります。
次に、特定のレベルで menu_title が一意であることを確認するためにチェックを行う必要があります。

そう、

if($menu_title == '')
    $menu_title = $page_title;

return $this->db->
select('menu_title')->
from('cart_categories')->
where(array('menu_title' => $menu_title,
            'parent_id' => $category_parent))->
get()->num_rows() == 0;

しかし、フォーム検証ライブラリで実際にそれを使用する方法がわかりませんか?

4

1 に答える 1

1

そのためには、コールバック関数を使用する必要があります。定義するだけです (フォーマットに合わせてコードを少し変更します)。これは私の頭のてっぺん(およびドキュメント)から外れていることに注意してください。

public function check_title($string) {
    $this->db->select('menu_title')->from('cart_categories');
    $this->db->where(array('menu_title' => $string,'parent_id' => $this->input->post('category_parent')));
    if ($this->db->get()->num_rows() != 0 {
        $this->form_validation->set_message('check_title', '%s must be unique');
        return FALSE;
    }
    return TRUE;
}

次に、コールバックを使用するようにその特定のフィールドの入力を設定します。

$this->form_validation->set_rules('menu_title', 'Menu Title', 'callback_check_title');

コールバック関数名の左側に追加のアンダースコアを追加して、CI がルーティングしないようにし (パブリックであるため)、コールバック名を入力した場所をルールに反映させることができると思います。しかし、私はそれについて肯定的ではありません。

コールバックが文字列のみを受け取るため、追加のフィールドを渡す限り、クラス変数を設定するだけで済みます。

また、検証を自分で処理することもできます。

于 2012-08-21T12:34:23.973 に答える