1

私のコントローラーの 1 つで、codeigniter のフォーム検証ヘルパーを使用しています。私の検証ルールの 1 つは、私が作成したカスタム関数で、true または false を返します。問題は、この検証関数がコントローラーのクラス内で宣言されていることです。ユーザーがコントローラー アクション (mysite/mycontroller/my_callback_func) として検証関数を参照できないようにするにはどうすればよいですか?

PS - 関数をプライベートとして設定しようとしましたが、検証ヘルパーがアクセスできないというエラーが表示されます。

4

3 に答える 3

3

関数/メソッド名をアンダースコアで始めるだけです。

まっすぐに./system/core/CodeIgniter.php:

/*
 * ------------------------------------------------------
 *  Security check
 * ------------------------------------------------------
 *
 *  None of the functions in the app controller or the
 *  loader class can be called via the URI, nor can
 *  controller functions that begin with an underscore
 */
    $class  = $RTR->fetch_class();
    $method = $RTR->fetch_method();

    if ( ! class_exists($class)
        OR strncmp($method, '_', 1) == 0
        OR in_array(strtolower($method), array_map('strtolower', get_class_methods('CI_Controller')))
        )
    {
        show_404("{$class}/{$method}");
    }
于 2011-05-15T22:28:56.980 に答える
1

たとえば、関数をプライベートに定義し、関数名の前に uderscore配置するだけです。

class Some_class extends CI_Controller{

     private function _some_method(){}
}
于 2012-08-13T20:11:48.843 に答える
0

代わりに、ヘルパー関数にします。そのためには、ファイルを に置き、system/application/myval_helper.phpそこに関数を追加します。次に、次のように呼び出します。

$this->load->helper('myval');

そして、機能にアクセスできるようになります。もう 1 つの方法は、単に を使用.htaccessしてその正確な URL をブロックすることです。

于 2011-05-15T22:26:43.110 に答える