2

カスタム検証コールバックを使用してcodeigniterでフォーム検証を実行しています。

$this->form_validation->set_rules('testPost', 'test', 'callback_myTest');

コールバックはモデルで実行され、戻り値がTRUEまたはFALSEの場合は期待どおりに機能します。ただし、ドキュメントには、選択した文字列を返すことができるとも記載されています。

たとえば、検証された日付があるが、同じ関数で日付の形式が変更された場合、この新しい形式の値をコントローラーに返して取得するにはどうすればよいですか?

読んでくれてありがとう、そして助けに感謝します。

4

5 に答える 5

1

あなたが求めていたものが得られたかどうかは完全にはわかりませんが、ここに試みがあります。

コールバックとして機能するコンストラクター内で関数を定義し、その関数内からモデルを使用できます。このようなもの:

    <?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');

class Controllername extends CI_Controller {

   private $processedValue;

   public function index()
   {
        $this->form_validation->set_rules('testpost','test','callback');

        if ($this->form_validation->run()) {
         //validation successful
         echo $this->processedValue; //outputs the value returned by the model
        } else {
         //validation failed
        }
   }

   private function callback($input)
   {
        $this->load->model('yourmodel');
        $return = $this->yourmodel->doStuff($input);

        //now you have the user's input in $input
        // and the returned value in $return

        //do some checks and return true/false

        $this->processedValue = $return;
   }

}
于 2012-05-16T22:59:30.677 に答える
1
public function myTest($data){ // as the callback made by "callback_myTest"
     // Do your stuff here
    if(condition failed)
    {
        $this->form_validation->set_message('myTest', "Your string message");
        return false;
    } 
    else 
    {
       return true;
    }
}

これをお試し下さい。

于 2014-08-14T11:40:32.623 に答える
0

codeigniterのファイルForm_validationにあるfunction_executeを見ました。var $ _field_dataをコールバックgetsの結果に設定します(結果がブール値でない場合)。別の関数「set_value」があります。フィールドの名前であるパラメーター(set_value('testPost')など)とともに使用して、結果を取得できるかどうかを確認します。

于 2012-05-16T22:49:14.483 に答える
0

Tank_Authがコントローラーでこれを行う方法は次のようになります

$this->form_validation->set_rules('login', 'Login', 'trim|required|xss_clean');

if ($this->form_validation->run()) {        
// validation ok

$this->form_validation->set_value('login')

}

form_validationのset_valueメソッドの使用は文書化されていませんが、これが、ログインの処理された値がトリミングおよびクリーンアップされた後に取得される方法であると私は信じています。

カスタム検証関数から直接この値を格納するために新しい変数を設定する必要があるという考えは本当に好きではありません。

于 2013-09-26T00:52:26.387 に答える
0

編集:申し訳ありませんが、質問を誤解しました。おそらく、カスタムコールバックを使用します。または、php $ _POSTコレクション(codeigniterをスキップ)を使用してください...謝罪はテストされていませんが、誰かがこれに基づいて構築できることを願っています...

例えば:

function _is_startdate_first($str)
{
           $str= do something to $str;

            or 

            $_POST['myinput'} = do something to $str;

    }

================

これが、カスタムコールバックの名前を変更する方法です。

$this->form_validation->set_message('_is_startdate_first', 'The start date must be first');

....。

これとは別に、コールバック関数は次のとおりです。

function _is_startdate_first($str)
{
    $startdate = new DateTime($this->input->post('startdate'), new DateTimeZone($this->tank_auth->timezone()));
    $enddate = new DateTime($this->input->post('enddate'), new DateTimeZone($this->tank_auth->timezone()));

    if ($startdate>$enddate) {
        return false;
        } else {
        return true;
        }
}
于 2013-10-28T12:25:29.723 に答える