ホームページ > 記事 > PHPフレームワーク > 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 サイトの他の関連記事を参照してください。