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

                ??一站式輕松地調用各大LLM模型接口,支持GPT4、智譜、豆包、星火、月之暗面及文生圖、文生視頻 廣告
                ### 2018 年 11 月 5 日 發布 ## 介紹 `5.2`版本的第一個`Beta1`測試版本發布,僅供學習和測試用途,暫時請不要用于實際項目。 >[danger] `5.2`的目標致力于提供一個更簡潔、更標準的核心框架,對于一些非必須功能力求組件化或者通過擴展解決。 目前已經完成的主要特性包括: * 基于PHP`7.1+`重構; * 強類型嚴格約束; * 完全依賴`composer`; * 原生多應用支持; * 支持應用的`Composer`引入; * 引入事件系統; * 增加`PSR-6`和`PSR-16`支持; 目前核心功能基于PHP`7.1`實現,未來的升級版本不排除要求PHP`7.2+`的可能性。 ## 安裝 ~~~ composer create-project topthink/think tp5 5.2.*-dev ~~~ 啟動服務 ~~~ cd tp5 php think run ~~~ 然后就可以在瀏覽器中訪問 ~~~ http://localhost:8000 ~~~ 如果需要更新框架使用 ~~~ composer update topthink/framework ~~~ ## 目錄結構 >[info] 相對于`5.1`來說,`5.2`版本目錄結構的變化不大,主要是默認應用目錄改為`app`,`thinkphp`目錄不再放置根目錄而是直接安裝到`vendor`目錄下。 ~~~cmd www WEB部署目錄(或者子目錄) ├─app 應用目錄 │ ├─command.php 命令行定義文件 │ ├─common.php 公共函數文件 │ ├─event.php 事件定義文件 │ ├─controller 控制器目錄 │ ├─model 模型目錄 │ ├─view 視圖目錄 │ └─ ... 更多類庫目錄 ├─config 應用配置目錄 ├─route 路由定義目錄 ├─public WEB目錄(對外訪問目錄) │ ├─index.php 入口文件 │ ├─router.php 快速測試文件 │ └─.htaccess 用于apache的重寫 ├─extend 擴展類庫目錄 ├─runtime 應用的運行時目錄 ├─vendor 第三方類庫目錄(Composer依賴庫) ├─composer.json composer 定義文件 ├─LICENSE.txt 授權說明文件 ├─README.md README 文件 ├─think 命令行入口文件 ~~~ >[danger] 該目錄結構只是默認生成的(單應用模式),具體會因為你是否采用多應用模式而存在差異。 ## 入口文件 由于`5.2`版本完全依賴`Composer`,取消了原本的`think\Loader`類,因此入口文件的寫法有所調整。 系統安裝后提供了一個默認的入口文件(位于`public/index.php`),內容如下: ``` // [ 應用入口文件 ] namespace think; require __DIR__ . '/../vendor/autoload.php'; // 執行應用并響應 (new App())->run()->send(); ``` 如果`app`目錄下面直接是`controller`、`model`以及`view`等類庫目錄,則為單應用模式(默認模式),如果在`app`目錄下創建了應用子目錄,則自動變成多應用模式。 單應用和多應用的目錄結構區別如下(主要在`app`目錄): 單應用 ``` ├─app 應用目錄 │ ├─controller 控制器目錄 │ ├─model 模型目錄 │ ├─view 視圖目錄 │ └─ ... 更多類庫目錄 ├─public WEB目錄(對外訪問目錄) │ ├─index.php 入口文件 ├─config 應用配置目錄 ├─route 路由定義目錄 ├─runtime 應用的運行時目錄 ``` 多應用 ``` ├─app 應用目錄 │ ├─index 主應用 │ │ ├─controller 控制器目錄 │ │ ├─model 模型目錄 │ │ ├─view 視圖目錄 │ │ ├─config 配置目錄(優先) │ │ └─ ... 更多類庫目錄 │ ├─app2 應用2 │ │ ├─controller 控制器目錄 │ │ ├─model 模型目錄 │ │ ├─view 視圖目錄 │ │ ├─config 配置目錄(優先) │ │ └─ ... 更多類庫目錄 ├─public WEB目錄(對外訪問目錄) │ ├─index.php 主入口文件 │ ├─app2.php 入口文件2 ├─config 應用配置目錄 │ ├─index index應用配置 │ └─app2 app2應用配置 ├─route 路由定義目錄 │ ├─index index應用路由定義目錄 │ └─app2 app2應用路由定義目錄 ├─runtime 應用的運行時目錄 │ ├─index index應用運行時目錄 │ └─app2 app2應用運行時目錄 ``` 從目錄結構可以看出來,每個應用相對保持獨立,并且每個應用都有一個對應的入口文件,應用下面還可以通過多級控制器來維護控制器分組。 通過URL重寫可以實現在一個統一的入口文件訪問不同的應用。 新版的`think\App`類的定制性更靈活,你可以在入口文件中對應用進行定制。 ``` // [ 應用入口文件 ] namespace think; require __DIR__ . '/../vendor/autoload.php'; // 實例化應用 $app = new App(); // 設置當前應用的路徑 $app->path('path/to/name'); // 開發調試模式 $app->debug(true); // 設置應用名稱 $app->name('name'); // 設置應用的命名空間 $app->setNamespace('app\name'); // 開啟應用類庫后綴 $app->suffix(true); // 綁定當前應用的請求對象 $app->bind('request', $request); // 執行應用并輸出響應 $app->run()->send(); ``` 如果你的某個應用來自于`composer`庫,只需要在入口文件中指定應用的命名空間。 ## 命令行 如果采用了多應用模式,命令行可以支持生成不同應用的類文件 ``` php think make:controller index@User php think make:model app2@Blog ``` ## Db類和模型 `Db`類也采用了`Facade`機制,所以你在使用`Db`類查詢的時候,應該使用: ``` use think\facade\Db; ... Db::name('user')->find(); ``` 模型的用法目前基本上變化不大。 ## 事件機制 事件機制用于替代5.1版本的`Hook`和行為,可以通過命令行生成事件類。 ``` php think make:event index@User ``` ``` namespace app\index\event; class UserLogin { } ``` 生成監聽器 ``` php think make:listener index@UserLogin ``` ``` namespace app\index\listener; class UserLogin { public function handle($event) { // 事件監聽處理 } } ``` 給事件綁定別名 ``` Event::bind('UserLogin', '\app\index\event\UserLogin'); ``` 使用監聽器 ``` Event::listen('UserLogin', '\app\index\listener\UserLogin'); ``` 或者手動注冊事件監聽 ``` use think\facade\Event; Event::listen('UserLogin', function(){ }); ``` 生成事件訂閱類 ``` php think make:subscribe index@User ``` ``` namespace app\index\subscribe; class User { public function onUserLogin($event) { // 事件響應處理 } } ``` 注冊事件訂閱者 ``` Event::subscribe('\app\index\subscribe\User'); ``` 上面的相關操作可以通過在應用目錄的`event.php`文件中直接配置,而無需手動操作。 ``` return [ 'bind' => [ 'UserLogin' => ['\app\index\event\UserLogin'], // 更多事件別名定義 ], 'listen' => [ 'UserLogin' => ['\app\index\listener\UserLogin'], // 更多事件監聽 ], 'subscribe' => [ '\app\index\subscribe\User', // 更多事件訂閱 ], ]; ``` 內置已經綁定別名的事件包括`AppInit`、`AppBegin`、`ActionBegin`、`AppEnd`等,也就是說原來的`Hook`鉤子已經全部改造為事件類。 ## 廢棄用法 * 模塊概念(應用下不再有模塊的概念,用多級控制器替代); * Hook和行為系統(使用事件系統替代); * 路由的數組返回定義(統一使用方法定義路由); * Session的前綴機制(已經被簡化); * Config的`range`機制(已經被簡化); * 核心`Facade`類的別名(避免混淆而廢棄);
                  <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>

                              哎呀哎呀视频在线观看