20

フラッシュ データdisplay_messages()を検索して画面に表示する簡単な関数を作成しました。Session::get('errors')

この機能はどこに置くのですか?Codeigniter には、小さなグローバル ヘルパー メソッドをすべて貼り付けることができるヘルパー フォルダーがありました。

4

8 に答える 8

20

ウスマンが提案したように、

  • ファイル/application/libraries/demo.phpを作成します
  • class Demo() {その中に定義する
  • 次のように関数を呼び出します。{{ Demo::display() }}

ライブラリとモデルが start.php 行 76 で自動ロードされるため、機能します。ファイル名はクラス名と一致する必要があると思います (大文字に注意してください)。

<?php

class Demo {

    public static function display() {

        if( !$message = Session::get('errors'))
            $message = 'No Errors';

        echo "<pre>print_r($message)</pre>";

    }

}

クラス名Commonの使用に問題があった理由がよくわかりません。競合がある可能性があります(これが重要な場合は、名前空間を定義できます)...

于 2013-02-16T21:25:47.937 に答える
13

helpersアプリフォルダー内にフォルダーを作成し、ファイルを作成しますapplication_helper.php。そのようなコードで:

// app/helpers/application_helper.php

function display_messages()
{
  exit('Yes');
}

次に、rootでcomposer.jsonファイルを開きます。Composerapp/helpers/application_helper.phpで自動ロードしfilesます。

"autoload": {
....

    "files": [
        "app/helpers/application_helper.php"
    ]

完了しました。これで、に電話をかけることができますdisplay_messages()

composer dump一部のオートローダーでは、初めてコマンドを実行する必要がある場合があります。

于 2013-02-16T13:09:15.470 に答える
11

memeLab が非常に役立つ回答を提供してくれてありがとう。libraries「 」フォルダは自動ロードディレクトリではなく、少なくとも私が使用しているL4のリリース/現在のバージョンではなかったので、彼の答えを拡張したかっただけです。また、start.php は、local.php、artisan.php のあるstartフォルダーに展開されているようglobal.phpです。

そのため、L4 レイジー オート ローダーで別のライブラリまたはヘルパーに独自のクラスを使用するには、これらを格納するフォルダーをglobal.php. たとえばlibraries、ディレクトリ リストにフォルダーを追加しました。

ClassLoader::addDirectories(array(

    app_path().'/commands',
    app_path().'/controllers',
    app_path().'/models',
    app_path().'/database/seeds',
    // this a custom path
    app_path().'/libraries',

));

次に、そのフォルダーで定義したクラスは、コントローラーclassname.phpで呼び出すことができCLASSNAME::methodName($someVar);ます。

class CLASSNAME {

    public static function methodName($someVar=NULL) {

        // whatever you want to do...

        return $message;
    }

}

したがって、この方法でヘルパー クラスを作成し、コントローラー全体で使用するさまざまなメソッドを定義できます。また、この方法でクラスの外部で通常の関数を定義すると、それらが機能しないため、悲しみが生じることに注意してください (クラスが常にロードされるとは限らないため)。(たとえばsomeFunctionName($someVar);の代わりにCLASSNAME::methodName($someVar);) この方法で関数を作成したい場合は、 がロードされていることを確認する必要がありますが、これについては詳しく説明しません。本当に必要なクラス。

memeLab と Usman に再び感謝します。彼らの回答がなければ、ここまでたどり着くことはできなかったでしょう。:)

于 2013-06-19T14:37:40.197 に答える
0

L3 では、通常はapplication/libraries/helpers.phpファイルを作成require_once()し、application/start.php. L3 がファイルを保持する方法に似ていlaravel/helpers.phpます。

L4でも同様のことができると思います。

編集:ソースを見るだけで、app/start/local.phpその場所のようです。

于 2013-02-15T20:23:10.830 に答える