<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、智譜、豆包、星火、月之暗面及文生圖、文生視頻 廣告
                # 路由 Slim 框架的路由基于 [nikic/fastroute](https://github.com/nikic/FastRoute) 組件進行構建,它格外地快速穩定。 ## 如何創建路由 你在可以使用 `\Slim\App` 實例的代理(proxy)方法來定義應用程序路由。Slim 框架提供了最流行的HTTP方法。 ### Get 路由 使用 Slim 應用程序的 `get()` 方法添加一個只處理 `GET` HTTP 請求的路由。它接收兩個參數: 1. 路由模式(帶有可選的命名占位符)/The route pattern (with optional named placeholders) 2. 路由回調 ``` $app = new \Slim\App(); $app->get('/books/{id}', function ($request, $response, $args) { // Show book identified by $args['id'] }); ``` ### POST 路由 使用 Slim 應用程序的 `post()` 方法添加一個只處理 `POST` HTTP 請求的路由。它接收兩個參數: 1. 路由模式(帶有可選的命名占位符)/The route pattern (with optional named placeholders) 2. 路由回調 ``` $app = new \Slim\App(); $app->post('/books', function ($request, $response, $args) { // Create new book }); ``` ### PUT 路由 使用 Slim 應用程序的 `put()` 方法添加一個只處理 `PUT` HTTP 請求的路由。它接收兩個參數: 1. 路由模式(帶有可選的命名占位符)/The route pattern (with optional named placeholders) 2. 路由回調 ``` $app = new \Slim\App(); $app->put('/books/{id}', function ($request, $response, $args) { // Update book identified by $args['id'] }); ``` ### DELETE 路由 使用 Slim 應用程序的 `delete()` 方法添加一個只處理 `DELETE` HTTP 請求的路由。它接收兩個參數: 1. 路由模式(帶有可選的命名占位符)/The route pattern (with optional named placeholders) 2. 路由回調 ``` $app = new \Slim\App(); $app->delete('/books/{id}', function ($request, $response, $args) { // Delete book identified by $args['id'] }); ``` ### OPTIONS 路由 使用 Slim 應用程序的 `options()` 方法添加一個只處理 `OPTIONS` HTTP 請求的路由。它接收兩個參數: 1. 路由模式(帶有可選的命名占位符)/The route pattern (with optional named placeholders) 2. 路由回調 ``` $app = new \Slim\App(); $app->options('/books/{id}', function ($request, $response, $args) { // Return response headers }); ``` ### PATCH 路由 使用 Slim 應用程序的 `patch()` 方法添加一個只處理 `PATCH` HTTP 請求的路由。它接收兩個參數: 1. 路由模式(帶有可選的命名占位符)/The route pattern (with optional named placeholders) 2. 路由回調 ``` $app = new \Slim\App(); $app->patch('/books/{id}', function ($request, $response, $args) { // Apply changes to book identified by $args['id'] }); ``` ### 任意路由 使用 Slim 應用程序的 `any()` 方法添加一個可以處理處理所有 HTTP 請求的路由。它接收兩個參數: 1. 路由模式(帶有可選的命名占位符)/The route pattern (with optional named placeholders) 2. 路由回調 ``` $app = new \Slim\App(); $app->any('/books/[{id}]', function ($request, $response, $args) { // Apply changes to books or book identified by $args['id'] if specified. // To check which method is used: $request->getMethod(); }); ``` 記住,第二個參數是一個回調。你需要指定一個類(Class,需要一個 `__invoke()` 實現方法。)來替換閉包(Closure)。接著,你可以映射到其他位置: ``` $app->any('/user', 'MyRestfulController'); ``` ### 自定義路由 使用 Slim 應用程序的 `map()` 方法來添加一個可以處理多個 HTTP 請求方法的路由。它接收三個參數: 1. HTTP 方法的數組 2. 路由模式(帶有可選的命名占位符)/The route pattern (with optional named placeholders) 3. 路由回調 ``` $app = new \Slim\App(); $app->map(['GET', 'POST'], '/books', function ($request, $response, $args) { // Create new book or list all books }); ``` ## 路由回調 上述的每個路由方法都接收一個回調例程作為其最后一個參數。這個參數可以是任意 PHP 調用(callable),并且它默認接受三個參數。 **請求/Request** 第一個參數是一個 `Psr\Http\Message\ServerRequestInterface` 對象,表示當前的 HTTP 請求。 **響應/Response** 第二個參數是一個 `Psr\Http\Message\ResponseInterface` 對象,表示當前的 HTTP 響應。 **參數數組/Arguments** 第三個參數是一個關聯數組,包含包含當前路由的命名占位符。 ### 將內容寫入響應 有兩種方式可以將內容寫入 HTTP 響應。第一鐘,可以使用 `echo()` 簡單地從路由回調中輸出內容。其內容將會唄追加到當前 HTTP 請求對象中。第二種,你可以返回一個 `Psr\Http\Message\ResponseInterface` 對象。 ### 閉包綁定/Closure binding 如果你使用一個`閉包(Closure)`實例作為路由回調,閉包的狀態受`Container`實例約束。這意味著你將通過 `$this` 關鍵字訪問閉包內部的 DI 容器實例: ``` $app = new \Slim\App(); $app->get('/hello/{name}', function ($request, $response, $args) { // Use app HTTP cookie service $this->get('cookies')->set('name', [ 'name' => $args['name'], 'expires' => '7 days' ]); }); ``` ## 路由策略 路由回調簽名由路由策略決定。默認地,Slim 寄望路由回調來接收請求、響應和由路由占位符參數組成的數組。這稱為請求響應策略(RequestResponse strategy)。然而,你可以通過使用另一個不同策略來改變這種寄望。例如,Slim 提供了一個另類的策略,叫做 RequestResponseArgs ,它接收請求和響應,加上由每一個路由占位符組成的單獨參數。這里的例子展示了如何使用這個另類的策列;輕松替代了默認`\Slim\Container`提供的 `foundHandler` 依賴: ``` $c = new \Slim\Container(); $c['foundHandler'] = function() { return new \Slim\Handlers\Strategies\RequestResponseArgs(); }; $app = new \Slim\App($c); $app->get('/hello/{name}', function ($request, $response, $name) { return $response->write($name); }); ``` 通過實現 `\Slim\Interfaces\InvocationStrategyInterface` 你可以提供一個你自己的路由策略。 ## 路由占位符 上訴的每個路由方法都會收到一個 URL 模式(URL pattern),它將與當前 HTTP 請求的 URI 相匹配。路由模式將使用命名占位符(named placeholder)來動態匹配 HTTP 請求的URI 片段。 ### 格式 路由模式占位符起始與一個 `{`, 然后是占位符名稱, 最后以 `}` 結束。這是一個名為 `name` 的占位符例子: ``` $app = new \Slim\App(); $app->get('/hello/{name}', function ($request, $response, $args) { echo "Hello, " . $args['name']; }); ``` ### 可選的分段 / Optional segments 使一個片段可選,只需用將其放在方括號中: ``` $app->get('/users[/{id}]', function ($request, $response, $args) { // reponds to both `/users` and `/users/123` // but not to `/users/` }); ``` 支持多個可選參數嵌套: ``` $app->get('/news[/{year}[/{month}]]', function ($request, $response, $args) { // reponds to `/news`, `/news/2016` and `/news/2016/03` }); ``` 對于數目不確定的可選參數,可以這樣做: ``` $app->get('/news[/{params:.*}]', function ($request, $response, $args) { $params = explode('/', $request->getAttribute('params')); // $params is an array of all the optional segments }); ``` 在這個例子中,`/news/2016/03/20` 的 URI 將使得 `$params` 數組包含三個元素:`['2016', '03', '20']`. ### 正則表達式匹配 默認地,占位符被寫在 `{}` 之中,并可以接收任意值。然而,占位符同樣可以要求 HTTP 請求 URI 匹配特定的正則表達式。如果當前的HTTP 請求URI 不能與占位符的正則表達式匹配,路由路由將不會啟動。下面這個示例占位符要求 `id` 必須是個數字: ``` $app = new \Slim\App(); $app->get('/users/{id:[0-9]+}', function ($request, $response, $args) { // Find user identified by $args['id'] }); ``` ## 路由名稱 應用程序的路由可以被指定一個名稱。這非常有用,如果你想要使用路由的 `pathFor()` 方法以編程的形式生成一個特定路由的 URL 。上述的每個路由方法都會返回一個 `\Slim\Route` 對象,這個對象帶來了 `setName()` 方法。 ``` $app = new \Slim\App(); $app->get('/hello/{name}', function ($request, $response, $args) { echo "Hello, " . $args['name']; })->setName('hello'); ``` 使用應用程序路由的 `pathFor()` 方法,為已命名的路由生成一個 URL 。 ``` echo $app->router->pathFor('hello', [ 'name' => 'Josh' ]); // Outputs "/hello/Josh" ``` 路由的 `pathFor()` 方法接收兩個參數: 1. 路由名稱 2. 由路由模式占位符及替換值組成的關聯數組。 ## 路由組 為了幫助將路由整理成條理分明的路由組, `\Slim\App` 還提供了一個 `group()` 方法。 每個路由組的路由模式預置于路由或路由組中的路由組,路由組模式的任何占位符參數最終使得嵌套的路由都是可用的: ``` $app = new \Slim\App(); $app->group('/users/{id:[0-9]+}', function () { $this->map(['GET', 'DELETE', 'PATCH', 'PUT'], '', function ($request, $response, $args) { // Find, delete, patch or replace user identified by $args['id'] })->setName('user'); $this->get('/reset-password', function ($request, $response, $args) { // Route for /users/{id:[0-9]+}/reset-password // Reset the password for user identified by $args['id'] })->setName('user-password-reset'); }); ``` 記住,在路由組閉包的內部,使用 `$this` 替代 `$app` 。Slim 將閉包綁定到應用程序實例,就像路由回調的情況那樣。 ## 路由中間件 你可以將中間件與任意路由或路由組相連接。 [了解更多](/docs/concepts/middleware.html). ## 容器識別 / Container Resolution 你不必限于為路由定義函數。在 Slim 中,有一些不同的方式來定義你的路由行為函數。 除了函數外,你還可以使用: - 可調用的類 - `Class:method` 這個函數由 Slim 的 Callable 解角器(Resolver) 類提供支持。它將字符串入口(entry)轉變為函數調用。例如: ``` $app->get('/home', '\HomeController:home'); ``` 在上面這段代碼中,我們定義了一個 `/home` 路由,并告訴 Slim 執行 `\HomeController` 類中的 `home()` 方法。 Slim 首先在容器中尋找 `\HomeController` 的入口,如果找到了,它將使用該實例。否則,它將它的構造函數,并將容器作為第一個參數。一旦這個類的實例創建了,它將使用你已定義的策略(Strategy)去調用指定的方法。 作為另一種辦法,你可以使用一個可調用的(invokable)類,比如: ``` class MyAction { protected $ci; //Constructor public function __construct(ContainerInterface $ci) { $this->ci = $ci; } public function __invoke($request, $response, $args) { //your code //to access items in the container... $this->ci->get(''); } } ``` 你可以這樣使用這個累: ``` $app->get('/home', '\MyAction'); ``` 在更為傳統的 MVC 方法中,你構建包含許多行為(actions)的控制器來替代只能處理一個行為的可調用類。 ``` class MyController { protected $ci; //Constructor public function __construct(ContainerInterface $ci) { $this->ci = $ci; } public function method1($request, $response, $args) { //your code //to access items in the container... $this->ci->get(''); } public function method2($request, $response, $args) { //your code //to access items in the container... $this->ci->get(''); } public function method3($request, $response, $args) { //your code //to access items in the container... $this->ci->get(''); } } ``` 你可以這樣使用控制器方法: ``` $app->get('/method1', '\MyController:method1'); $app->get('/method2', '\MyController:method2'); $app->get('/method3', '\MyController:method3'); ```
                  <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>

                              哎呀哎呀视频在线观看