6

複数のコントローラーで関数を使用する必要があります。だから私はカスタムヘルパーを使用することについて考えましたが、うまくいかないようです。(ビューでは機能しますが、コントローラーで必要です)

次の致命的なエラーが表示されます。

致命的なエラー: 12 行目の /application/controllers/developers.php の未定義メソッド Developers::checkIfLoggedIn() の呼び出し

ヘルパーを使用して複数のコントローラーで関数を使用するのは賢い動きですか、そうでなければそうすべきですか。

前もってありがとう、
マーク

編集:
コントローラーファイル:

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

class Developers extends CI_Controller
{
    public function __construct()
    {
         parent::__construct()
         $this->load->helper('form');
         $this->load->helper('url');
         $this->load->helper('login');

         //helper function
         checkIfLoggedIn($this->session->userdata('loggedIn'));
    }
}

ヘルパー ファイル:

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

if (!function_exists('checkIfLoggedIn'))
{
    function checkIfLoggedIn($session_loggedIn)
    {
        $loggedIn = $session_loggedIn;
        if($loggedIn == false)
        {
            redirect('login/');
        }
    }
}

}

4

5 に答える 5

19

コントローラーで間違った方法で使用しています。コントローラーのメソッドではないため$this、呼び出すことはできません。

ヘルパーは、使用する前にロードする限り、コントローラー関数内のどこにでも (または View ファイル内でも、お勧めできませんが) ロードできます。コントローラー コンストラクターでヘルパーを読み込んで、任意の関数で自動的に使用できるようにするか、ヘルパーを必要とする特定の関数でヘルパーを読み込むことができます。

使用できるヘルパーをロードするには

$this->load->helper('name'); // name is the name of the file without extention

CodeIgniter の他のほとんどのシステムとは異なり、ヘルパーはオブジェクト指向形式で書かれていません。これらは単純な手続き型関数です。各ヘルパー関数は、他の関数に依存することなく、1 つの特定のタスクを実行します。

したがって、コントローラーでヘルパー関数を呼び出すには、使用しないでください

$this->function_name();

代わりに使用

function_name();

たとえば、myCustomHelper.php次のような名前のヘルパー ファイルにヘルパー関数があるとします。

function myHelper()
{
    // code
}

次に、コントローラーにロードして、次のように呼び出すことができます

$this->load->helper('myCustomHelper');
myHelper(); // call the function

ただし、ヘルパーをコンストラクターにロードして、スクリプト全体で使用できるようにすることをお勧めします。

更新:ヘルパー ファイルの名前が の場合login_helper.php、コントローラーで次のように使用できます。

$this->load->helper('login_helper');
checkIfLoggedIn($this->session->userdata('loggedIn'));

詳細はこちらをご覧ください

于 2012-08-15T09:26:05.360 に答える
4

わかりました、この質問が5か月前に尋ねられたことは知っていますが、これが役立つと思う人もいるかもしれません. 同じ問題が発生したばかりで、ヘルパー関数のファイル名が CodeIgniter で既に使用されているファイル名であることがわかりました。

したがって、「要求されたファイルを読み込めません」という警告が表示されず、代わりに「致命的なエラー: 未定義の関数 [関数名] の呼び出し」という警告が表示される場合は、ネイティブに既に存在するファイル名を使用している可能性があります。

于 2013-01-31T18:45:42.373 に答える
0

代わりに、ライブラリクラスを作成し、そこで関数を定義します。次に、ライブラリをコントローラにロードし、ライブラリの関数を呼び出します。ライブラリを任意のコントローラーにロードして、そのメソッドを使用できます。

于 2012-08-15T09:25:24.260 に答える