<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>

                合規國際互聯網加速 OSASE為企業客戶提供高速穩定SD-WAN國際加速解決方案。 廣告
                ## 多應用模式 默認安裝好的目錄結構是下面這樣的。只列出了兩級,并去除了現在無需關注的細節,如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 應用,同時創建 Index 控制器 */ /* v6.0.10 會自動創建下面的目錄,故可以省略 */ $ php think make:controller admin@Index Controller:app\admin\controller\index created successfully. /* 創建 index應用,同時創建 Index 控制器 ,注意首字母的大小寫*/ $ php think make:controller index@Index Controller:app\index\controller\index created successfully. /* 同時創建 一個用于演示或者測試的demo應用*/ $ php think make:controller demo@Index $ php think make:controller test@Index Controller:app\demo\controller\Index 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 ~~~ 下面給出了多應用部署的文件結構,不同的是`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>

                              哎呀哎呀视频在线观看