ホームページ  >  記事  >  PHPフレームワーク  >  thinkphp を構成して複数のアプリケーションと複数の構成を構成する方法

thinkphp を構成して複数のアプリケーションと複数の構成を構成する方法

尚
転載
2020-05-07 09:25:252711ブラウズ

thinkphp を構成して複数のアプリケーションと複数の構成を構成する方法

##複数のモジュール

ThinkPHP 3.2.3 では、デフォルトのアプリケーション ディレクトリは ./Application で、次のデフォルト モジュールは Home モジュールです。この時点でバックグラウンド アプリケーションの管理モジュールを追加する必要がある場合は、デフォルトのエントリ ファイル ./index.php に追加します。

// 绑定Admin模块到当前入口文件
define('BIND_MODULE','Admin');

この時点で http://serverNmae/index.php を実行すると、 Admin モジュールは /Application ディレクトリに生成されます。ただし、このとき http://serverName/index.php にアクセスすると、./Application/Common/Conf/config に

//设置默认模块
'DEFAULT_MODULE'    =>  'Home'

が追加されていても、実際にアクセスされるのは新しく追加された Admin モジュールです。 php、それは正しくありません。Home モジュールを見つけます。

実際、マニュアルに記載されているエントリ ファイルで BIND_MODULE を定義することの実際の意味は、デフォルト モジュールを定義することです。参照: ./ThinkPHP/Library/Think/Dispatcher.calss.php. このファイルは、URL 解析、ルーティング、およびスケジューリングを完了するために使用される ThinkPHP の組み込み Dispatcher クラスを定義します (マニュアルの「システム プロセス」セクションを参照)。ここで、 行:140

// 获取模块名称
define('MODULE_NAME', defined('BIND_MODULE')? BIND_MODULE : self::getModule($varModule));

静的メソッドのディスパッチでは、まずエントリファイルに BIND_MODULE が定義されているかどうかを問い合わせることでモジュール名を取得し、定義されている場合は MODULE_NAME の値が実際のモジュール名を取得するためのクラス内の静的プライベート メソッド getModule:

/**
     * 获得实际的模块名称
     */
    static private function getModule($var) {
        $module   = (!empty($_GET[$var])?$_GET[$var]:C('DEFAULT_MODULE'));
        unset($_GET[$var]);
        if($maps = C('URL_MODULE_MAP')) {
            if(isset($maps[strtolower($module)])) {
                // 记录当前别名
                define('MODULE_ALIAS',strtolower($module));
                // 获取实际的模块名
                return   ucfirst($maps[MODULE_ALIAS]);
            }elseif(array_search(strtolower($module),$maps)){
                // 禁止访问原始模块
                return   '';
            }
        }
        return strip_tags(ucfirst(strtolower($module)));
    }

このメソッドでは、URL に構成ファイルによって再定義された VAR_MODULE が含まれていない場合 (デフォルト)は m (./ThinkPHP/Conf/convention.php) で、構成ファイルに定義されている DEFAULT_MODULE の値を探します。

上記の分析により、BIND_MODULE が実際にデフォルト モジュールを定義していると結論付けることができます。プロジェクトに複数のモジュールがある場合は、このように構成しないでください。

この時点でデフォルトのエントリ ファイル ./index.php 内の BIND_MODULE をコメント アウトすると (つまり、デフォルトのエントリ ファイル構成を使用すると)、http:// に直接アクセスして Admin モジュールにアクセスできるようになります。このエントリ ファイルでは、アプリケーション ディレクトリ ./Application が定義されているため、http://serverName/admin にアクセスすると、実際には ./Application/Admin/Controller/IndexController.class.php のインデックス メソッドにアクセスします。

ThinkPHP 3.2.3 このように複数のモジュールを設定するだけで十分であり、エントリファイルや設定ファイルに定義する必要はなく、ThinkPHP が公式に推奨しているグループ化モードでもあります。

もう 1 つの構成はマルチエントリ設計です。つまり、デフォルトのエントリ ファイルindex.php と同じレベルに admin.php を作成し、index.php に追加します。 admin.php BIND_MODULE の定義を除いて、index.php と同じ構成を使用し、BIND_MODULE の定義を

// 绑定Home模块到当前入口文件
define('BIND_MODULE','Home');

に変更します。 次に、アプリケーション構成ファイル ./Application/Common/Conf に ## を追加します。 /config.php #
// 绑定Admin模块到当前入口文件
define('BIND_MODULE','Admin');

現時点では、http://serverName/index.php にアクセスするとホーム モジュールにアクセスでき、http://servername/admin.php にアクセスすると管理モジュールにアクセスできます。ただし、現時点では、index.php が Home モジュールにしかアクセスできないため、 http://serverName/admin. にはアクセスできません。

複数のアプリケーション

通常、ThinkPHP 3.2.3 ではマルチアプリケーション モードを使用する必要はありません。これは、ほとんどの場合、マルチモジュールとマルチアプリケーションによって実現できるためです。エントリーデザイン アプリケーション拡張ニーズを解決します。 アプリケーション Application_API を作成するなど、マルチアプリケーション モードを使用する必要がある場合は、./Application と同じレベルのディレクトリの下にディレクトリ Applicaiton_API を作成し、エントリ ファイル ./api.php をそこに追加できます。アプリケーション ディレクトリを ./Application_API に指定します。 :

//设置默认模块
'DEFAULT_MODULE'    =>  'Home',

新しく追加されたアプリケーションには、./Application_API/Common/Conf/config.php に設定されている場合でも、最初にホーム モジュールが必要であることに注意してください。

// 定义应用目录
define('APP_PATH','./Application_API/');

おそらく、最初にホーム モジュールが存在する必要があります。そうでない場合は、次のエラーが報告されます: インデックス コントローラをロードできません。

推奨チュートリアル:「

TP5

以上がthinkphp を構成して複数のアプリケーションと複数の構成を構成する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事はcnblogs.comで複製されています。侵害がある場合は、admin@php.cn までご連絡ください。