<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                ## 多應用模式 默認安裝好的目錄結構是下面這樣的。只列出了兩級,并去除了現在無需關注的細節,如Readme、版權聲明文件等。 ``` ├── app │?? ├── AppService.php │?? ├── BaseController.php │?? ├── ExceptionHandle.php │?? ├── Request.php │?? ├── common.php │?? ├── controller │?? ├── event.php │?? ├── middleware.php │?? ├── provider.php │?? └── service.php ├── config │?? ├── app.php │?? ├── cache.php ...... │?? ├── trace.php │?? └── view.php ├── extend ├── public │?? ├── index.php │?? ├── router.php │?? └── static ├── route │?? └── app.php ├── runtime ├── think ├── vendor │?? ├── autoload.php ...... │?? └── topthink └── view ``` 默認安裝好后,是單應用模式的,常常無法滿足項目需要。下面,我們要將其改造成多應用模式。一個應用系統,至少要分為前后臺兩個應用吧?另外,我還想有一個測試`(test)`的地方,演示的地方`(demo)`。 > 如果要使用多應用模式,需要先安裝多應用模式擴展`think-multi-app`。方法如下: ``` /* 安裝多應用支持 */ composer require topthink/think-multi-app /* 安裝視圖模板,不安裝也可以, 但是需要修改`config/view.php`, 將其中的`type='Think' `改成 `type='php'` */ composer require topthink/think-view ``` 成功安裝后,我們來測試一下控制器生成命令。 ## 快速生成應用 如果使用了多應用模式,可以快速生成一個應用,例如生成`index`, `demo`、`admin`、`test`應用的指令如下: ~~~ $ php think build index $ php think build demo $ php think build admin $ php think build test /* 框架已經內置了 index 應用 */ ~~~ ``` /* 創建 admin 應用下的一個 User 控制器 */ $ php think make:controller admin@User Controller:app\admin\controller\User created successfully. ``` > 以上的命令一定要在框架的根目錄位置執行。 多應用模式下,記得要刪除`app`目錄下的`controller`目錄(系統據此判斷是否為多應用部署),以避免混亂。可以備份一下。`mv controller controller.org` ***** 修改 `app/admin/controller/index.php` 文件,如下。 ``` <?php declare (strict_types = 1); namespace app\admin\controller; use think\Request; class index { /** * 顯示資源列表 * * @return \think\Response */ public function index() { // 添加此行 return 'admin::index'; } ...... ``` 在實際的部署中,為了安全起見,要確保只有`public`目錄可以對外訪問。在`mac`或者`linux`環境下面,可能還需要設置`runtime`目錄權限為nobody可寫。操作命令如下: ``` // 必要時設置目錄權限(Linux / MacOS) chmod -R 777 <project_name>/runtime ``` 或者: ``` // 不同的Linux發行版本可能不一致,需要根據實際情況調整 chown -R nobody:nobody <project_name>/runtime chown -R www-data <project_name>/runtime ``` 下面給出了多應用部署的文件結構,不同的是 `app`目錄下面沒有`controller`目錄,而`admin`應用下面有一個新建的`controller`目錄。 ``` ├── app 應用根目錄 │?? ├── AppService.php │?? ├── BaseController.php 默認基礎控制器類 │?? ├── ExceptionHandle.php 應用異常定義文件 │?? ├── Request.php 應用請求對象 │?? ├── admin 應用目錄 │?? │?? └── controller 控制器目錄 │?? ├── common.php 公共函數文件 │?? ├── event.php 全局事件定義文件 │?? ├── middleware.php 全局中間件定義文件 │?? ├── provider.php 服務提供定義文件 │?? └── service.php ``` `BaseController.php`、`Request.php`和`ExceptionHandle.php`三個文件是系統默認提供的基礎文件,位置可以隨意移動,但要同步調整類的命名空間。如果不需要使用`Request.php`和`ExceptionHandle.php`文件,或者要調整類名,記得必須同步調整`provider.php`文件中的容器對象綁定。 `provider.php`服務提供定義文件只能全局定義,不支持在應用下單獨定義。 ******** ## 全局配置 與`app`目錄同級的`config`目錄下面的文件是項目的全局配置文件,對所有應用有效。通過源碼可以看到全局參數的加載過程如下。 ``` if (is_dir($configPath)) { $files = glob($configPath . '*' . $this->configExt); } foreach ($files as $file) { $this->config->load($file, pathinfo($file, PATHINFO_FILENAME)); } ``` ## 應用級配置 每個應用可以有獨立的配置文件,相同的配置參數會覆蓋全局配置。每個應用下面的配置文件會被默認加載。通過源碼可以看到加載過程如下。 ``` $files = array_merge($files, glob($appPath . 'config' . DIRECTORY_SEPARATOR . '*' . $this->app->getConfigExt())); foreach ($files as $file) { $this->app->config->load($file, pathinfo($file, PATHINFO_FILENAME)); } ``` 如果需要加載額外的配置文件(如:子文件夾下面的配置文件),需要手動加載,方法如下。 ``` // 加載config/extra/config.php 配置文件 讀取到extra \think\facade\Config::load('extra/config', 'extra'); ``` ## 配置獲取 要使用`Config`類,首先需要在你的類文件中引入 ``` use think\facade\Config; ``` 讀取一級配置的所有參數(每個配置文件都是獨立的一級配置) ``` Config::get('app'); //或者使用助手函數 config('app'); ``` 讀取單個配置參數 ``` Config::get('app.default_timezone'); //或者使用助手函數 config('app.default_timezone'); ``` 讀取數組配置(理論上支持無限級配置參數讀取) ``` Config::get('database.default.host'); ``` 讀取全部配置(含應用級的配置文件) ``` Config::get(); ``` 判斷是否存在某個設置參數: ``` echo (bool)Config::has('app.app_name'); echo (bool)Config::has('app.default_timezone'); ``` 動態修改配置參數: ``` // 支持批量設置參數 Config::set(['perpage' => 20], 'pagination'); echo Config::get('pagination.perpage'); ``` ## 獲取各種目錄位置 | 目錄位置 | 目錄說明 | 獲取方法 | | --- | --- | --- | | 根目錄 | 項目所在的目錄,默認自動獲取,可以在入口文件實例化`App`類的時候傳入。 | `App::getRootPath()` | | 基礎目錄 | 根目錄下的`app`目錄 | `App::getBasePath()` | | 應用目錄 | 當前應用所在的目錄,如果是單應用模式則同基礎目錄,如果是多應用模式,則是`app`/應用子目錄 | `App::getAppPath()` | | 配置目錄 | 根目錄下的`config`目錄 | `App::getConfigPath()` | | 運行時目錄 | 框架運行時的目錄,單應用模式就是根目錄的`runtime`目錄,多應用模式為`runtime`/應用子目錄 | `App::getRuntimePath()` | | 核心類庫目錄 | 框架核心類庫的`think`目錄 | `App::getThinkPath()` | 測試代碼: ``` use think\facade\App; $a[] = App::getRootPath(); // myproject/ $a[] = App::getBasePath(); // myproject/app/ $a[] = App::getAppPath(); // myproject/app/admin/ $a[] = App::getConfigPath(); // myproject/config/ /* 這個要注意一下,不是`runtime`的根目錄 */ $a[] = App::getRuntimePath(); // myproject/runtime/admin/ $a[] = App::getThinkPath(); // myproject/vendor/topthink/framework/src/ /* 獲取當前應用的名稱 */ $a[] =app('http')->getName(); print_r($a); ```
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看