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

                企業??AI智能體構建引擎,智能編排和調試,一鍵部署,支持知識庫和私有化部署方案 廣告
                <article><h1>Laravel 的 HTTP 請求 Request</h1><ul><li><a href="#accessing-the-request">獲取請求</a><ul><li><a href="#request-path-and-method">請求路徑 &amp; 方法</a></li><li><a href="#psr7-requests">PSR-7 請求</a></li></ul></li><li><a href="#input-trimming-and-normaliation">輸入數據的預處理和規范化</a></li><li><a href="#retrieving-input">獲取輸入數據</a><ul><li><a href="#old-input">舊輸入數據</a></li><li><a href="#cookies">Cookies</a></li></ul></li><li><a href="#files">文件資源</a><ul><li><a href="#retrieving-uploaded-files">獲取上傳文件</a></li><li><a href="#storing-uploaded-files">儲存上傳文件</a></li></ul></li></ul><p><a name="accessing-the-request"></a></p><h2><a href="#accessing-the-request">獲取請求</a></h2><p>要通過依賴注入的方式來獲取當前 HTTP 請求的實例,你應該在控制器方法中使用 <code class=" language-php">Illuminate\<span class="token package">Http<span class="token punctuation">\</span>Request</span></code> 類型提示。當前的請求實例將通過 <a href="/docs/5.4/container">服務容器</a> 自動注入:</p><pre class=" language-php"><code class=" language-php"><span class="token delimiter">&lt;?php</span> <span class="token keyword">namespace</span> <span class="token package">App<span class="token punctuation">\</span>Http<span class="token punctuation">\</span>Controllers</span><span class="token punctuation">;</span> <span class="token keyword">use</span> <span class="token package">Illuminate<span class="token punctuation">\</span>Http<span class="token punctuation">\</span>Request</span><span class="token punctuation">;</span> <span class="token keyword">class</span> <span class="token class-name">UserController</span> <span class="token keyword">extends</span> <span class="token class-name">Controller</span> <span class="token punctuation">{</span> <span class="token comment" spellcheck="true">/** * 儲存一個新用戶。 * * @param Request $request * @return Response */</span> <span class="token keyword">public</span> <span class="token keyword">function</span> <span class="token function">store<span class="token punctuation">(</span></span>Request <span class="token variable">$request</span><span class="token punctuation">)</span> <span class="token punctuation">{</span> <span class="token variable">$name</span> <span class="token operator">=</span> <span class="token variable">$request</span><span class="token operator">-</span><span class="token operator">&gt;</span><span class="token function">input<span class="token punctuation">(</span></span><span class="token string">'name'</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token comment" spellcheck="true"> // </span> <span class="token punctuation">}</span> <span class="token punctuation">}</span></code></pre><h4>依賴注入 &amp; 路由參數</h4><p>如果控制器方法也有輸入數據是從路由參數中傳入的,只需將路由參數置于其他依賴之后。 例如,你的路由是這樣定義的:</p><pre class=" language-php"><code class=" language-php"><span class="token scope">Route<span class="token punctuation">::</span></span><span class="token function">put<span class="token punctuation">(</span></span><span class="token string">'user/{id}'</span><span class="token punctuation">,</span> <span class="token string">'UserController@update'</span><span class="token punctuation">)</span><span class="token punctuation">;</span></code></pre><p>只要像下方一樣定義控制器方法,你就可以使用 <code class=" language-php">Illuminate\<span class="token package">Http<span class="token punctuation">\</span>Request</span></code> 類型提示了,同時獲取到路由參數 <code class=" language-php">id</code>:</p><pre class=" language-php"><code class=" language-php"><span class="token delimiter">&lt;?php</span> <span class="token keyword">namespace</span> <span class="token package">App<span class="token punctuation">\</span>Http<span class="token punctuation">\</span>Controllers</span><span class="token punctuation">;</span> <span class="token keyword">use</span> <span class="token package">Illuminate<span class="token punctuation">\</span>Http<span class="token punctuation">\</span>Request</span><span class="token punctuation">;</span> <span class="token keyword">class</span> <span class="token class-name">UserController</span> <span class="token keyword">extends</span> <span class="token class-name">Controller</span> <span class="token punctuation">{</span> <span class="token comment" spellcheck="true">/** * 更新指定的用戶。 * * @param Request $request * @param string $id * @return Response */</span> <span class="token keyword">public</span> <span class="token keyword">function</span> <span class="token function">update<span class="token punctuation">(</span></span>Request <span class="token variable">$request</span><span class="token punctuation">,</span> <span class="token variable">$id</span><span class="token punctuation">)</span> <span class="token punctuation">{</span> <span class="token comment" spellcheck="true"> // </span> <span class="token punctuation">}</span> <span class="token punctuation">}</span></code></pre><h4>通過路由閉包獲取請求</h4><p>你也可以在一個路由閉包中使用 <code class=" language-php">Illuminate\<span class="token package">Http<span class="token punctuation">\</span>Request</span></code> 類型提示。當它執行時,服務容器會自動注入當前請求到閉包中:</p><pre class=" language-php"><code class=" language-php"><span class="token keyword">use</span> <span class="token package">Illuminate<span class="token punctuation">\</span>Http<span class="token punctuation">\</span>Request</span><span class="token punctuation">;</span> <span class="token scope">Route<span class="token punctuation">::</span></span><span class="token function">get<span class="token punctuation">(</span></span><span class="token string">'/'</span><span class="token punctuation">,</span> <span class="token keyword">function</span> <span class="token punctuation">(</span>Request <span class="token variable">$request</span><span class="token punctuation">)</span> <span class="token punctuation">{</span> <span class="token comment" spellcheck="true"> // </span><span class="token punctuation">}</span><span class="token punctuation">)</span><span class="token punctuation">;</span></code></pre><p><a name="request-path-and-method"></a></p><h3>請求路徑 &amp; 方法</h3><p><code class=" language-php">Illuminate\<span class="token package">Http<span class="token punctuation">\</span>Request</span></code> 的實例提供了多種方法去檢查應用程序的 HTTP 請求,Laravel 的 <code class=" language-php">Illuminate\<span class="token package">Http<span class="token punctuation">\</span>Request</span></code> 繼承了 <code class=" language-php">Symfony\<span class="token package">Component<span class="token punctuation">\</span>HttpFoundation<span class="token punctuation">\</span>Request</span></code> 類。下面是該類幾個有用的方法:</p><h4>獲取請求路徑</h4><p><code class=" language-php">path</code> 方法返回請求路徑信息。所以,如果收到的請求目標地址是 <code class=" language-php">http<span class="token punctuation">:</span><span class="token operator">/</span><span class="token operator">/</span>domain<span class="token punctuation">.</span>com<span class="token operator">/</span>foo<span class="token operator">/</span>bar</code>,那么 <code class=" language-php">path</code> 將會返回 <code class=" language-php">foo<span class="token operator">/</span>bar</code>:</p><pre class=" language-php"><code class=" language-php"><span class="token variable">$uri</span> <span class="token operator">=</span> <span class="token variable">$request</span><span class="token operator">-</span><span class="token operator">&gt;</span><span class="token function">path<span class="token punctuation">(</span></span><span class="token punctuation">)</span><span class="token punctuation">;</span></code></pre><p><code class=" language-php">is</code> 方法可以驗證收到的請求路徑和指定規則是否匹配。使用這個方法的時候你也可以傳遞一個 <code class=" language-php"><span class="token operator">*</span></code> 字符作為通配符:</p><pre class=" language-php"><code class=" language-php"><span class="token keyword">if</span> <span class="token punctuation">(</span><span class="token variable">$request</span><span class="token operator">-</span><span class="token operator">&gt;</span><span class="token function">is<span class="token punctuation">(</span></span><span class="token string">'admin/*'</span><span class="token punctuation">)</span><span class="token punctuation">)</span> <span class="token punctuation">{</span> <span class="token comment" spellcheck="true"> // </span><span class="token punctuation">}</span></code></pre><h4>獲取請求的 URL</h4><p>你可以使用 <code class=" language-php">url</code> 或 <code class=" language-php">fullUrl</code> 方法去獲取傳入請求的完整 URL。<code class=" language-php">url</code> 方法返回不帶有查詢字符串的 URL,而 <code class=" language-php">fullUrl</code> 方法的返回值包含查詢字符串:</p><pre class=" language-php"><code class=" language-php"><span class="token comment" spellcheck="true">// Without Query String... </span><span class="token variable">$url</span> <span class="token operator">=</span> <span class="token variable">$request</span><span class="token operator">-</span><span class="token operator">&gt;</span><span class="token function">url<span class="token punctuation">(</span></span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token comment" spellcheck="true"> // With Query String... </span><span class="token variable">$url</span> <span class="token operator">=</span> <span class="token variable">$request</span><span class="token operator">-</span><span class="token operator">&gt;</span><span class="token function">fullUrl<span class="token punctuation">(</span></span><span class="token punctuation">)</span><span class="token punctuation">;</span></code></pre><h4>獲取請求方法</h4><p>對于傳入的請求 <code class=" language-php">method</code> 方法將返回 HTTP 的請求方式。你也可以使用 <code class=" language-php">isMethod</code> 方法去驗證 HTTP 的請求方式與指定規則是否相配:</p><pre class=" language-php"><code class=" language-php"><span class="token variable">$method</span> <span class="token operator">=</span> <span class="token variable">$request</span><span class="token operator">-</span><span class="token operator">&gt;</span><span class="token function">method<span class="token punctuation">(</span></span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token keyword">if</span> <span class="token punctuation">(</span><span class="token variable">$request</span><span class="token operator">-</span><span class="token operator">&gt;</span><span class="token function">isMethod<span class="token punctuation">(</span></span><span class="token string">'post'</span><span class="token punctuation">)</span><span class="token punctuation">)</span> <span class="token punctuation">{</span> <span class="token comment" spellcheck="true"> // </span><span class="token punctuation">}</span></code></pre><p><a name="psr7-requests"></a></p><h3>PSR-7 請求</h3><p><a href="http://www.php-fig.org/psr/psr-7/">PSR-7 標準</a>制定的 HTTP 消息接口包含了請求和響應。如果你想使用一個 PSR-7 請求來代替一個 Laravel 請求,那么你首先要安裝幾個函數庫。Laravel 使用了 Symfony 的 HTTP 消息橋接組件,將原來的 Laravel 請求和響應轉換到 PSR-7 所兼容的實現:</p><pre class=" language-php"><code class=" language-php">composer <span class="token keyword">require</span> symfony<span class="token operator">/</span>psr<span class="token operator">-</span>http<span class="token operator">-</span>message<span class="token operator">-</span>bridge composer <span class="token keyword">require</span> zendframework<span class="token operator">/</span>zend<span class="token operator">-</span>diactoros</code></pre><p>安裝完這些庫后, 就可以在路由閉包或控制器中,簡單的對請求類型使用類型提示來獲取 PSR-7 的請求:</p><pre class=" language-php"><code class=" language-php"><span class="token keyword">use</span> <span class="token package">Psr<span class="token punctuation">\</span>Http<span class="token punctuation">\</span>Message<span class="token punctuation">\</span>ServerRequestInterface</span><span class="token punctuation">;</span> <span class="token scope">Route<span class="token punctuation">::</span></span><span class="token function">get<span class="token punctuation">(</span></span><span class="token string">'/'</span><span class="token punctuation">,</span> <span class="token keyword">function</span> <span class="token punctuation">(</span>ServerRequestInterface <span class="token variable">$request</span><span class="token punctuation">)</span> <span class="token punctuation">{</span> <span class="token comment" spellcheck="true"> // </span><span class="token punctuation">}</span><span class="token punctuation">)</span><span class="token punctuation">;</span></code></pre><blockquote class="has-icon tip"><p><div class="flag"><span class="svg"><svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:a="http://ns.adobe.com/AdobeSVGViewerExtensions/3.0/" version="1.1" x="0px" y="0px" width="56.6px" height="87.5px" viewBox="0 0 56.6 87.5" enable-background="new 0 0 56.6 87.5" xml:space="preserve"><path fill="#FFFFFF" d="M28.7 64.5c-1.4 0-2.5-1.1-2.5-2.5v-5.7 -5V41c0-1.4 1.1-2.5 2.5-2.5s2.5 1.1 2.5 2.5v10.1 5 5.8C31.2 63.4 30.1 64.5 28.7 64.5zM26.4 0.1C11.9 1 0.3 13.1 0 27.7c-0.1 7.9 3 15.2 8.2 20.4 0.5 0.5 0.8 1 1 1.7l3.1 13.1c0.3 1.1 1.3 1.9 2.4 1.9 0.3 0 0.7-0.1 1.1-0.2 1.1-0.5 1.6-1.8 1.4-3l-2-8.4 -0.4-1.8c-0.7-2.9-2-5.7-4-8 -1-1.2-2-2.5-2.7-3.9C5.8 35.3 4.7 30.3 5.4 25 6.7 14.5 15.2 6.3 25.6 5.1c13.9-1.5 25.8 9.4 25.8 23 0 4.1-1.1 7.9-2.9 11.2 -0.8 1.4-1.7 2.7-2.7 3.9 -2 2.3-3.3 5-4 8L41.4 53l-2 8.4c-0.3 1.2 0.3 2.5 1.4 3 0.3 0.2 0.7 0.2 1.1 0.2 1.1 0 2.2-0.8 2.4-1.9l3.1-13.1c0.2-0.6 0.5-1.2 1-1.7 5-5.1 8.2-12.1 8.2-19.8C56.4 12 42.8-1 26.4 0.1zM43.7 69.6c0 0.5-0.1 0.9-0.3 1.3 -0.4 0.8-0.7 1.6-0.9 2.5 -0.7 3-2 8.6-2 8.6 -1.3 3.2-4.4 5.5-7.9 5.5h-4.1H28h-0.5 -3.6c-3.5 0-6.7-2.4-7.9-5.7l-0.1-0.4 -1.8-7.8c-0.4-1.1-0.8-2.1-1.2-3.1 -0.1-0.3-0.2-0.5-0.2-0.9 0.1-1.3 1.3-2.1 2.6-2.1H41C42.4 67.5 43.6 68.2 43.7 69.6zM37.7 72.5H26.9c-4.2 0-7.2 3.9-6.3 7.9 0.6 1.3 1.8 2.1 3.2 2.1h4.1 0.5 0.5 3.6c1.4 0 2.7-0.8 3.2-2.1L37.7 72.5z"></path></svg></span></div> 如果你從路由或者控制器返回了一個 PSR-7 響應實例,那么這個實例將被自動轉換回一個 Laravel 響應實例,同時由框架顯示。</p></blockquote><p><a name="input-trimming-and-normaliation"></a></p><h2><a href="#input-trimming-and-normaliation">輸入數據的預處理和規范化</a></h2><p>在 Laravel 的全局中間件中默認包含了 <code class=" language-php">TrimStrings</code> 和 <code class=" language-php">ConvertEmptyStringsToNull</code> 兩個中間件。這些中間件被列在 <code class=" language-php">App\<span class="token package">Http<span class="token punctuation">\</span>Kernel</span></code> 類中。它們會自動處理所有請求中傳入的字符串字段,比如將空的字符串字段轉變成 <code class=" language-php"><span class="token keyword">null</span></code> 值。你再也不用擔心路由和控制器中數據規范化的問題。</p><p>如果你想停用這些功能,你可以在 <code class=" language-php">App\<span class="token package">Http<span class="token punctuation">\</span>Kernel</span></code> 類的 <code class=" language-php"><span class="token variable">$middleware</span></code> 屬性中移除這些中間件。</p><p><a name="retrieving-input"></a></p><h2><a href="#retrieving-input">獲取輸入數據</a></h2><h4>獲取所有輸入數據</h4><p>你可以使用 <code class=" language-php">all</code> 方法以 <code class=" language-php">數組</code> 形式獲取到所有輸入數據:</p><pre class=" language-php"><code class=" language-php"><span class="token variable">$input</span> <span class="token operator">=</span> <span class="token variable">$request</span><span class="token operator">-</span><span class="token operator">&gt;</span><span class="token function">all<span class="token punctuation">(</span></span><span class="token punctuation">)</span><span class="token punctuation">;</span></code></pre><h4>獲取指定輸入值</h4><p>你可以通過 <code class=" language-php">Illuminate\<span class="token package">Http<span class="token punctuation">\</span>Request</span></code> 的實例,借助幾個簡單的方法,就可以獲取到用戶輸入的所有數據。而不需要擔心發起請求時使用了哪一種請求方式,<code class=" language-php">input</code> 方法通常被用來獲取用戶輸入數據:</p><pre class=" language-php"><code class=" language-php"><span class="token variable">$name</span> <span class="token operator">=</span> <span class="token variable">$request</span><span class="token operator">-</span><span class="token operator">&gt;</span><span class="token function">input<span class="token punctuation">(</span></span><span class="token string">'name'</span><span class="token punctuation">)</span><span class="token punctuation">;</span></code></pre><p>你可以給 <code class=" language-php">input</code> 方法的第二個參數傳入一個默認值。當請求的輸入數據不存在于此請求時,返回該默認值:</p><pre class=" language-php"><code class=" language-php"><span class="token variable">$name</span> <span class="token operator">=</span> <span class="token variable">$request</span><span class="token operator">-</span><span class="token operator">&gt;</span><span class="token function">input<span class="token punctuation">(</span></span><span class="token string">'name'</span><span class="token punctuation">,</span> <span class="token string">'Sally'</span><span class="token punctuation">)</span><span class="token punctuation">;</span></code></pre><p>如果傳輸表單數據中包含「數組」形式的數據,那么可以使用「點」語法來獲取數組:</p><pre class=" language-php"><code class=" language-php"><span class="token variable">$name</span> <span class="token operator">=</span> <span class="token variable">$request</span><span class="token operator">-</span><span class="token operator">&gt;</span><span class="token function">input<span class="token punctuation">(</span></span><span class="token string">'products.0.name'</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token variable">$names</span> <span class="token operator">=</span> <span class="token variable">$request</span><span class="token operator">-</span><span class="token operator">&gt;</span><span class="token function">input<span class="token punctuation">(</span></span><span class="token string">'products.*.name'</span><span class="token punctuation">)</span><span class="token punctuation">;</span></code></pre><h4>通過動態屬性獲取輸入數據</h4><p>你也可以通過 <code class=" language-php">Illuminate\<span class="token package">Http<span class="token punctuation">\</span>Request</span></code> 實例的動態屬性來獲取用戶輸入的數據。例如,如果你應用程序表單中包含 <code class=" language-php">name</code> 字段,那么可以像這樣訪問提交的值:</p><pre class=" language-php"><code class=" language-php"><span class="token variable">$name</span> <span class="token operator">=</span> <span class="token variable">$request</span><span class="token operator">-</span><span class="token operator">&gt;</span><span class="token property">name</span><span class="token punctuation">;</span></code></pre><p>Laravel 在處理動態屬性的優先級是,先從請求的數據中查找,沒有的話再到路由參數中找。</p><h4>獲取 JSON 輸入信息</h4><p>當你發送 JSON 請求到應用時,只要請求表頭中設置了 <code class=" language-php">Content<span class="token operator">-</span>Type</code> 為 <code class=" language-php">application<span class="token operator">/</span>json</code>,你就可以直接從 <code class=" language-php">Input</code> 方法中獲取 JSON 數據。你也可以通過 「點」語法來讀取 JSON 數組:</p><pre class=" language-php"><code class=" language-php"><span class="token variable">$name</span> <span class="token operator">=</span> <span class="token variable">$request</span><span class="token operator">-</span><span class="token operator">&gt;</span><span class="token function">input<span class="token punctuation">(</span></span><span class="token string">'user.name'</span><span class="token punctuation">)</span><span class="token punctuation">;</span></code></pre><h4>獲取部分輸入數據</h4><p>如果你需要獲取輸入數據的子集,則可以用 <code class=" language-php">only</code> 和 <code class=" language-php">except</code> 方法。這兩個方法都接收單個 <code class=" language-php">數組</code> 或動態列表作為參數:</p><pre class=" language-php"><code class=" language-php"><span class="token variable">$input</span> <span class="token operator">=</span> <span class="token variable">$request</span><span class="token operator">-</span><span class="token operator">&gt;</span><span class="token function">only<span class="token punctuation">(</span></span><span class="token punctuation">[</span><span class="token string">'username'</span><span class="token punctuation">,</span> <span class="token string">'password'</span><span class="token punctuation">]</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token variable">$input</span> <span class="token operator">=</span> <span class="token variable">$request</span><span class="token operator">-</span><span class="token operator">&gt;</span><span class="token function">only<span class="token punctuation">(</span></span><span class="token string">'username'</span><span class="token punctuation">,</span> <span class="token string">'password'</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token variable">$input</span> <span class="token operator">=</span> <span class="token variable">$request</span><span class="token operator">-</span><span class="token operator">&gt;</span><span class="token function">except<span class="token punctuation">(</span></span><span class="token punctuation">[</span><span class="token string">'credit_card'</span><span class="token punctuation">]</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token variable">$input</span> <span class="token operator">=</span> <span class="token variable">$request</span><span class="token operator">-</span><span class="token operator">&gt;</span><span class="token function">except<span class="token punctuation">(</span></span><span class="token string">'credit_card'</span><span class="token punctuation">)</span><span class="token punctuation">;</span></code></pre><p><code class=" language-php">only</code> 方法會返回所有你指定的鍵值對,即使這個鍵在輸入數據中并不存在。如果一個鍵在輸入數據中并不存在時,它對應的值是 <code class=" language-php"><span class="token keyword">null</span></code> 。當你想要獲取請求中實際存在的輸入數據時,你可以使用 <code class=" language-php">intersect</code> 方法。</p><pre class=" language-php"><code class=" language-php"><span class="token variable">$input</span> <span class="token operator">=</span> <span class="token variable">$request</span><span class="token operator">-</span><span class="token operator">&gt;</span><span class="token function">intersect<span class="token punctuation">(</span></span><span class="token punctuation">[</span><span class="token string">'username'</span><span class="token punctuation">,</span> <span class="token string">'password'</span><span class="token punctuation">]</span><span class="token punctuation">)</span><span class="token punctuation">;</span></code></pre><h4>確定是否有輸入值</h4><p>要判斷請求是否存在該數據,可以使用 <code class=" language-php">has</code> 方法。當數據存在 <strong>并且</strong> 字符串不為空時,<code class=" language-php">has</code> 方法就會返回 <code class=" language-php"><span class="token boolean">true</span></code>:</p><pre class=" language-php"><code class=" language-php"><span class="token keyword">if</span> <span class="token punctuation">(</span><span class="token variable">$request</span><span class="token operator">-</span><span class="token operator">&gt;</span><span class="token function">has<span class="token punctuation">(</span></span><span class="token string">'name'</span><span class="token punctuation">)</span><span class="token punctuation">)</span> <span class="token punctuation">{</span> <span class="token comment" spellcheck="true"> // </span><span class="token punctuation">}</span></code></pre><p><a name="old-input"></a></p><h3>舊輸入數據</h3><p>Laravel 允許你將本次的輸入數據保留到下一次請求發送前。這個特性在表單驗證錯誤后重新填寫表單相當有用。但是,如果你使用了 Laravel 的 <a href="/docs/5.4/validation">驗證特性</a>,你就不需要在手動實現這些方法,因為 Laravel 內置的驗證工具會自動調用他們。</p><h4>將輸入數據閃存至 Session</h4><p><code class=" language-php">Illuminate\<span class="token package">Http<span class="token punctuation">\</span>Request</span></code> 的 <code class=" language-php">flash</code> 方法會將當前輸入的數據存進 <a href="/docs/5.4/session">session</a> 中,因此下次用戶發送請求到應用程序時就可以使用它們:</p><pre class=" language-php"><code class=" language-php"><span class="token variable">$request</span><span class="token operator">-</span><span class="token operator">&gt;</span><span class="token function">flash<span class="token punctuation">(</span></span><span class="token punctuation">)</span><span class="token punctuation">;</span></code></pre><p>你也可以使用 <code class=" language-php">flashOnly</code> 和 <code class=" language-php">flashExcept</code> 方法將當前請求數據的子集保存到 session。這些方法對敏感信息的保護非常有用:</p><pre class=" language-php"><code class=" language-php"><span class="token variable">$request</span><span class="token operator">-</span><span class="token operator">&gt;</span><span class="token function">flashOnly<span class="token punctuation">(</span></span><span class="token punctuation">[</span><span class="token string">'username'</span><span class="token punctuation">,</span> <span class="token string">'email'</span><span class="token punctuation">]</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token variable">$request</span><span class="token operator">-</span><span class="token operator">&gt;</span><span class="token function">flashExcept<span class="token punctuation">(</span></span><span class="token string">'password'</span><span class="token punctuation">)</span><span class="token punctuation">;</span></code></pre><h4>閃存輸入數據到 Session 后重定向</h4><p>你可能需要把輸入數據閃存到 session 并重定向到前一個頁面,這時只需要在重定向方法后加上 <code class=" language-php">withInput</code> 即可:</p><pre class=" language-php"><code class=" language-php"><span class="token keyword">return</span> <span class="token function">redirect<span class="token punctuation">(</span></span><span class="token string">'form'</span><span class="token punctuation">)</span><span class="token operator">-</span><span class="token operator">&gt;</span><span class="token function">withInput<span class="token punctuation">(</span></span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token keyword">return</span> <span class="token function">redirect<span class="token punctuation">(</span></span><span class="token string">'form'</span><span class="token punctuation">)</span><span class="token operator">-</span><span class="token operator">&gt;</span><span class="token function">withInput<span class="token punctuation">(</span></span> <span class="token variable">$request</span><span class="token operator">-</span><span class="token operator">&gt;</span><span class="token function">except<span class="token punctuation">(</span></span><span class="token string">'password'</span><span class="token punctuation">)</span> <span class="token punctuation">)</span><span class="token punctuation">;</span></code></pre><h4>獲取舊輸入數據</h4><p>若要獲取上一次請求后所閃存的輸入數據,則可以使用 <code class=" language-php">Request</code> 實例中的 <code class=" language-php">old</code> 方法。<code class=" language-php">old</code> 方法提供一個簡便的方式從 <a href="/docs/5.4/session">Session</a> 取出被閃存的輸入數據:</p><pre class=" language-php"><code class=" language-php"><span class="token variable">$username</span> <span class="token operator">=</span> <span class="token variable">$request</span><span class="token operator">-</span><span class="token operator">&gt;</span><span class="token function">old<span class="token punctuation">(</span></span><span class="token string">'username'</span><span class="token punctuation">)</span><span class="token punctuation">;</span></code></pre><p>Laravel 也提供了全局輔助函數 <code class=" language-php">old</code>。如果你要在 <a href="/docs/5.4/blade">Blade 模板</a> 中顯示舊輸入數據,可以使用更加方便的 <code class=" language-php">old</code> 輔助函數。如果舊數據不存在,則返回 <code class=" language-php"><span class="token keyword">null</span></code>:</p><pre class=" language-php"><code class=" language-php"><span class="token markup"><span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>input</span> <span class="token attr-name">type</span><span class="token attr-value"><span class="token punctuation">=</span><span class="token punctuation">"</span>text<span class="token punctuation">"</span></span> <span class="token attr-name">name</span><span class="token attr-value"><span class="token punctuation">=</span><span class="token punctuation">"</span>username<span class="token punctuation">"</span></span> <span class="token attr-name">value</span><span class="token attr-value"><span class="token punctuation">=</span><span class="token punctuation">"</span>{{ old('username') }}<span class="token punctuation">"</span></span><span class="token punctuation">&gt;</span></span></span></code></pre><p><a name="cookies"></a></p><h3>Cookies</h3><h4>從請求中獲取 Cookie 值</h4><p>Laravel 框架創建的每個 cookie 都會被加密并且加上認證標識,這代表著用戶擅自更改的 cookie 都會失效。若要從此次請求獲取 cookie 值,你可以使用 <code class=" language-php">Illuminate\<span class="token package">Http<span class="token punctuation">\</span>Request</span></code> 實例中的 <code class=" language-php">cookie</code> 方法:</p><pre class=" language-php"><code class=" language-php"><span class="token variable">$value</span> <span class="token operator">=</span> <span class="token variable">$request</span><span class="token operator">-</span><span class="token operator">&gt;</span><span class="token function">cookie<span class="token punctuation">(</span></span><span class="token string">'name'</span><span class="token punctuation">)</span><span class="token punctuation">;</span></code></pre><h4>將 Cookies 附加到響應</h4><p>你可以使用 <code class=" language-php">cookie</code> 方法附加一個 cookie 到 <code class=" language-php">Illuminate\<span class="token package">Http<span class="token punctuation">\</span>Response</span></code> 實例。有效 cookie 應該傳遞字段名稱,字段值和過期時間給這個方法:</p><pre class=" language-php"><code class=" language-php"><span class="token keyword">return</span> <span class="token function">response<span class="token punctuation">(</span></span><span class="token string">'Hello World'</span><span class="token punctuation">)</span><span class="token operator">-</span><span class="token operator">&gt;</span><span class="token function">cookie<span class="token punctuation">(</span></span> <span class="token string">'name'</span><span class="token punctuation">,</span> <span class="token string">'value'</span><span class="token punctuation">,</span> <span class="token variable">$minutes</span> <span class="token punctuation">)</span><span class="token punctuation">;</span></code></pre><p><code class=" language-php">cookie</code> 方法還可以接受更多參數,只是使用頻率較低。通常作用是傳遞參數給 PHP 原生 <a href="http://php.net/manual/en/function.setcookie.php">設置 cookie</a> 方法:</p><pre class=" language-php"><code class=" language-php"><span class="token keyword">return</span> <span class="token function">response<span class="token punctuation">(</span></span><span class="token string">'Hello World'</span><span class="token punctuation">)</span><span class="token operator">-</span><span class="token operator">&gt;</span><span class="token function">cookie<span class="token punctuation">(</span></span> <span class="token string">'name'</span><span class="token punctuation">,</span> <span class="token string">'value'</span><span class="token punctuation">,</span> <span class="token variable">$minutes</span><span class="token punctuation">,</span> <span class="token variable">$path</span><span class="token punctuation">,</span> <span class="token variable">$domain</span><span class="token punctuation">,</span> <span class="token variable">$secure</span><span class="token punctuation">,</span> <span class="token variable">$httpOnly</span> <span class="token punctuation">)</span><span class="token punctuation">;</span></code></pre><h4>生成 Cookie 實例</h4><p>如果你想要在一段時間以后生成一個可以給定 <code class=" language-php">Symfony\<span class="token package">Component<span class="token punctuation">\</span>HttpFoundation<span class="token punctuation">\</span>Cookie</span></code> 的響應實例,你可以先生成 $cookie 實例,然后再指定給 response 實例,否則這個 cookie 不會被發送回客戶端:</p><pre class=" language-php"><code class=" language-php"><span class="token variable">$cookie</span> <span class="token operator">=</span> <span class="token function">cookie<span class="token punctuation">(</span></span><span class="token string">'name'</span><span class="token punctuation">,</span> <span class="token string">'value'</span><span class="token punctuation">,</span> <span class="token variable">$minutes</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token keyword">return</span> <span class="token function">response<span class="token punctuation">(</span></span><span class="token string">'Hello World'</span><span class="token punctuation">)</span><span class="token operator">-</span><span class="token operator">&gt;</span><span class="token function">cookie<span class="token punctuation">(</span></span><span class="token variable">$cookie</span><span class="token punctuation">)</span><span class="token punctuation">;</span></code></pre><blockquote><p>譯者注: 關于 Cookie,需要注意一點,默認 Laravel 創建的所有 Cookie 都是加密過的,創建未加密的 Cookie 的方法請見 <a href="https://laravel-china.org/topics/1758">【小技巧分享】在 Laravel 中設置沒有加密的 cookie</a></p></blockquote><p><a name="files"></a></p><h2><a href="#files">文件資源</a></h2><p><a name="retrieving-uploaded-files"></a></p><h3>獲取上傳文件</h3><p>你可以使用 <code class=" language-php">Illuminate\<span class="token package">Http<span class="token punctuation">\</span>Request</span></code> 實例中的 <code class=" language-php">file</code> 方法獲取上傳的文件。file 方法返回的對象是 <code class=" language-php">Symfony\<span class="token package">Component<span class="token punctuation">\</span>HttpFoundation<span class="token punctuation">\</span>File<span class="token punctuation">\</span>UploadedFile</span></code> 類的實例,該類繼承了 PHP 的 <code class=" language-php">SplFileInfo</code> 類,并提供了許多和文件交互的方法:</p><pre class=" language-php"><code class=" language-php"><span class="token variable">$file</span> <span class="token operator">=</span> <span class="token variable">$request</span><span class="token operator">-</span><span class="token operator">&gt;</span><span class="token function">file<span class="token punctuation">(</span></span><span class="token string">'photo'</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token variable">$file</span> <span class="token operator">=</span> <span class="token variable">$request</span><span class="token operator">-</span><span class="token operator">&gt;</span><span class="token property">photo</span><span class="token punctuation">;</span></code></pre><p>你可以使用請求的 <code class=" language-php">hasFile</code> 方法確認上傳的文件是否存在:</p><pre class=" language-php"><code class=" language-php"><span class="token keyword">if</span> <span class="token punctuation">(</span><span class="token variable">$request</span><span class="token operator">-</span><span class="token operator">&gt;</span><span class="token function">hasFile<span class="token punctuation">(</span></span><span class="token string">'photo'</span><span class="token punctuation">)</span><span class="token punctuation">)</span> <span class="token punctuation">{</span> <span class="token comment" spellcheck="true"> // </span><span class="token punctuation">}</span></code></pre><h4>確認上傳的文件是否有效</h4><p>除了檢查上傳的文件是否存在外,你也可以通過 <code class=" language-php">isValid</code> 方法驗證上傳的文件是否有效:</p><pre class=" language-php"><code class=" language-php"><span class="token keyword">if</span> <span class="token punctuation">(</span><span class="token variable">$request</span><span class="token operator">-</span><span class="token operator">&gt;</span><span class="token function">file<span class="token punctuation">(</span></span><span class="token string">'photo'</span><span class="token punctuation">)</span><span class="token operator">-</span><span class="token operator">&gt;</span><span class="token function">isValid<span class="token punctuation">(</span></span><span class="token punctuation">)</span><span class="token punctuation">)</span> <span class="token punctuation">{</span> <span class="token comment" spellcheck="true"> // </span><span class="token punctuation">}</span></code></pre><h4>文件路徑 &amp; 擴展</h4><p><code class=" language-php">UploadedFile</code> 這個類也包含了訪問文件完整路徑和擴展的方法。<code class=" language-php">extension</code> 方法會嘗試根據文件內容猜測文件的擴展名。猜測結果可能不同于客戶端原始的擴展名:</p><pre class=" language-php"><code class=" language-php"><span class="token variable">$path</span> <span class="token operator">=</span> <span class="token variable">$request</span><span class="token operator">-</span><span class="token operator">&gt;</span><span class="token property">photo</span><span class="token operator">-</span><span class="token operator">&gt;</span><span class="token function">path<span class="token punctuation">(</span></span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token variable">$extension</span> <span class="token operator">=</span> <span class="token variable">$request</span><span class="token operator">-</span><span class="token operator">&gt;</span><span class="token property">photo</span><span class="token operator">-</span><span class="token operator">&gt;</span><span class="token function">extension<span class="token punctuation">(</span></span><span class="token punctuation">)</span><span class="token punctuation">;</span></code></pre><h4>其它上傳文件的方法</h4><p><code class=" language-php">UploadedFile</code> 的實例還有許多可用的方法,可以到該對象的 <a href="http://api.symfony.com/3.0/Symfony/Component/HttpFoundation/File/UploadedFile.html">API 文檔</a> 了解這些方法的詳細信息。</p><p><a name="storing-uploaded-files"></a></p><h3>儲存上傳文件</h3><p>在設置好 <a href="/docs/5.4/filesystem">文件系統</a> 的配置信息后,你可以使用 <code class=" language-php">UploadedFile</code> 的 <code class=" language-php">store</code> 方法把上傳文件儲存到本地磁盤,或者是亞馬遜 S3 云存儲上。</p><p><code class=" language-php">store</code> 方法允許存儲文件到相對于文件系統根目錄配置的路徑。這個路徑不能包含文件名,名稱將使用 MD5 散列文件內容自動生成。</p><p><code class=" language-php">store</code> 方法還接受一個可選的第二個參數,用于文件存儲到磁盤的名稱。這個方法會返回文件相對于磁盤根目錄的路徑:</p><pre class=" language-php"><code class=" language-php"><span class="token variable">$path</span> <span class="token operator">=</span> <span class="token variable">$request</span><span class="token operator">-</span><span class="token operator">&gt;</span><span class="token property">photo</span><span class="token operator">-</span><span class="token operator">&gt;</span><span class="token function">store<span class="token punctuation">(</span></span><span class="token string">'images'</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token variable">$path</span> <span class="token operator">=</span> <span class="token variable">$request</span><span class="token operator">-</span><span class="token operator">&gt;</span><span class="token property">photo</span><span class="token operator">-</span><span class="token operator">&gt;</span><span class="token function">store<span class="token punctuation">(</span></span><span class="token string">'images'</span><span class="token punctuation">,</span> <span class="token string">'s3'</span><span class="token punctuation">)</span><span class="token punctuation">;</span></code></pre><p>如果你不想自動生成文件名,那么可以使用 <code class=" language-php">storeAs</code> 方法去設置路徑,文件名和磁盤名作為方法參數:</p><pre class=" language-php"><code class=" language-php"><span class="token variable">$path</span> <span class="token operator">=</span> <span class="token variable">$request</span><span class="token operator">-</span><span class="token operator">&gt;</span><span class="token property">photo</span><span class="token operator">-</span><span class="token operator">&gt;</span><span class="token function">storeAs<span class="token punctuation">(</span></span><span class="token string">'images'</span><span class="token punctuation">,</span> <span class="token string">'filename.jpg'</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token variable">$path</span> <span class="token operator">=</span> <span class="token variable">$request</span><span class="token operator">-</span><span class="token operator">&gt;</span><span class="token property">photo</span><span class="token operator">-</span><span class="token operator">&gt;</span><span class="token function">storeAs<span class="token punctuation">(</span></span><span class="token string">'images'</span><span class="token punctuation">,</span> <span class="token string">'filename.jpg'</span><span class="token punctuation">,</span> <span class="token string">'s3'</span><span class="token punctuation">)</span><span class="token punctuation">;</span></code></pre></article>
                  <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>

                              哎呀哎呀视频在线观看