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

                ??碼云GVP開源項目 12k star Uniapp+ElementUI 功能強大 支持多語言、二開方便! 廣告
                現在我們來進一步使用表單提交數據完成模型的對象操作,主要內容包含: - - [表單提交](http://www.hmoore.net/thinkphp/thinkphp5_quickstart/147289#u8868u5355u63D0u4EA4) - [表單驗證](http://www.hmoore.net/thinkphp/thinkphp5_quickstart/147289#u8868u5355u9A8Cu8BC1) - [錯誤提示](http://www.hmoore.net/thinkphp/thinkphp5_quickstart/147289#u9519u8BEFu63D0u793A) - [自定義驗證規則](http://www.hmoore.net/thinkphp/thinkphp5_quickstart/147289#u81EAu5B9Au4E49u9A8Cu8BC1u89C4u5219) - [控制器驗證](http://www.hmoore.net/thinkphp/thinkphp5_quickstart/147289#u63A7u5236u5668u9A8Cu8BC1) ## 表單提交 首先創建一個視圖模板文件 `application/index/view/user/create.html`,內容如下: ``` <pre class="calibre18"> ``` <span class="hljs-regexp"><!doctype html></span><span class="hljs-regexp"><<span class="hljs-operator">html</span>></span><span class="hljs-regexp"><<span class="hljs-operator">head</span>></span><span class="hljs-regexp"><<span class="hljs-operator">meta</span> <span class="hljs-operator">charset</span>=<span class="hljs-string">"UTF-8"</span>></span><span class="hljs-regexp"><<span class="hljs-operator">title</span>></span>創建用戶<span class="hljs-regexp"></<span class="hljs-operator">title</span>></span><span class="hljs-regexp"><<span class="hljs-operator">style</span>></span><span class="css"><span class="hljs-regexp">body</span> <span class="hljs-operator">{ <span class="hljs-operator"><span class="hljs-title1">font-family</span>:<span class="hljs-string"><span class="hljs-operator">"Microsoft Yahei"</span>,<span class="hljs-operator">"Helvetica Neue"</span>,Helvetica,Arial,sans-serif</span></span>; <span class="hljs-operator"><span class="hljs-title1">font-size</span>:<span class="hljs-string"><span class="hljs-number">16px</span></span></span>; <span class="hljs-operator"><span class="hljs-title1">padding</span>:<span class="hljs-string"><span class="hljs-number">5px</span></span></span>; }</span><span class="hljs-regexp">.form</span><span class="hljs-operator">{ <span class="hljs-operator"><span class="hljs-title1">padding</span>:<span class="hljs-string"> <span class="hljs-number">15px</span></span></span>; <span class="hljs-operator"><span class="hljs-title1">font-size</span>:<span class="hljs-string"> <span class="hljs-number">16px</span></span></span>; }</span><span class="hljs-regexp">.form</span> <span class="hljs-regexp">.text</span> <span class="hljs-operator">{ <span class="hljs-operator"><span class="hljs-title1">padding</span>:<span class="hljs-string"> <span class="hljs-number">3px</span></span></span>; <span class="hljs-operator"><span class="hljs-title1">margin</span>:<span class="hljs-string"><span class="hljs-number">2px</span> <span class="hljs-number">10px</span></span></span>; <span class="hljs-operator"><span class="hljs-title1">width</span>:<span class="hljs-string"> <span class="hljs-number">240px</span></span></span>; <span class="hljs-operator"><span class="hljs-title1">height</span>:<span class="hljs-string"> <span class="hljs-number">24px</span></span></span>; <span class="hljs-operator"><span class="hljs-title1">line-height</span>:<span class="hljs-string"> <span class="hljs-number">28px</span></span></span>; <span class="hljs-operator"><span class="hljs-title1">border</span>:<span class="hljs-string"> <span class="hljs-number">1px</span> solid <span class="hljs-title">#D4D4D4</span></span></span>; }</span><span class="hljs-regexp">.form</span> <span class="hljs-regexp">.btn</span><span class="hljs-operator">{ <span class="hljs-operator"><span class="hljs-title1">margin</span>:<span class="hljs-string"><span class="hljs-number">6px</span></span></span>; <span class="hljs-operator"><span class="hljs-title1">padding</span>:<span class="hljs-string"> <span class="hljs-number">6px</span></span></span>; <span class="hljs-operator"><span class="hljs-title1">width</span>:<span class="hljs-string"> <span class="hljs-number">120px</span></span></span>; <span class="hljs-operator"><span class="hljs-title1">font-size</span>:<span class="hljs-string"> <span class="hljs-number">16px</span></span></span>; <span class="hljs-operator"><span class="hljs-title1">border</span>:<span class="hljs-string"> <span class="hljs-number">1px</span> solid <span class="hljs-title">#D4D4D4</span></span></span>; <span class="hljs-operator"><span class="hljs-title1">cursor</span>:<span class="hljs-string"> pointer</span></span>; <span class="hljs-operator"><span class="hljs-title1">background</span>:<span class="hljs-string"><span class="hljs-title">#eee</span></span></span>; }</span><span class="hljs-regexp">a</span><span class="hljs-operator">{ <span class="hljs-operator"><span class="hljs-title1">color</span>:<span class="hljs-string"> <span class="hljs-title">#868686</span></span></span>; <span class="hljs-operator"><span class="hljs-title1">cursor</span>:<span class="hljs-string"> pointer</span></span>; }</span><span class="hljs-operator"><span class="hljs-title1">a</span>:<span class="hljs-string">hover{ text-decoration: underline</span></span>; } <span class="hljs-regexp">h2</span><span class="hljs-operator">{ <span class="hljs-operator"><span class="hljs-title1">color</span>:<span class="hljs-string"> <span class="hljs-title">#4288ce</span></span></span>; <span class="hljs-operator"><span class="hljs-title1">font-weight</span>:<span class="hljs-string"> <span class="hljs-number">400</span></span></span>; <span class="hljs-operator"><span class="hljs-title1">padding</span>:<span class="hljs-string"> <span class="hljs-number">6px</span> <span class="hljs-number">0</span></span></span>; <span class="hljs-operator"><span class="hljs-title1">margin</span>:<span class="hljs-string"> <span class="hljs-number">6px</span> <span class="hljs-number">0</span> <span class="hljs-number">0</span></span></span>; <span class="hljs-operator"><span class="hljs-title1">font-size</span>:<span class="hljs-string"> <span class="hljs-number">28px</span></span></span>; <span class="hljs-operator"><span class="hljs-title1">border-bottom</span>:<span class="hljs-string"> <span class="hljs-number">1px</span> solid <span class="hljs-title">#eee</span></span></span>; }</span><span class="hljs-regexp">div</span><span class="hljs-operator">{ <span class="hljs-operator"><span class="hljs-title1">margin</span>:<span class="hljs-string"><span class="hljs-number">8px</span></span></span>; }</span><span class="hljs-regexp">.info</span><span class="hljs-operator">{ <span class="hljs-operator"><span class="hljs-title1">padding</span>:<span class="hljs-string"> <span class="hljs-number">12px</span> <span class="hljs-number">0</span></span></span>; <span class="hljs-operator"><span class="hljs-title1">border-bottom</span>:<span class="hljs-string"> <span class="hljs-number">1px</span> solid <span class="hljs-title">#eee</span></span></span>; }</span><span class="hljs-regexp">.copyright</span><span class="hljs-operator">{ <span class="hljs-operator"><span class="hljs-title1">margin-top</span>:<span class="hljs-string"> <span class="hljs-number">24px</span></span></span>; <span class="hljs-operator"><span class="hljs-title1">padding</span>:<span class="hljs-string"> <span class="hljs-number">12px</span> <span class="hljs-number">0</span></span></span>; <span class="hljs-operator"><span class="hljs-title1">border-top</span>:<span class="hljs-string"> <span class="hljs-number">1px</span> solid <span class="hljs-title">#eee</span></span></span>; }</span></span><span class="hljs-regexp"></<span class="hljs-operator">style</span>></span><span class="hljs-regexp"></<span class="hljs-operator">head</span>></span><span class="hljs-regexp"><<span class="hljs-operator">body</span>></span><span class="hljs-regexp"><<span class="hljs-operator">h2</span>></span>創建用戶<span class="hljs-regexp"></<span class="hljs-operator">h2</span>></span><span class="hljs-regexp"><<span class="hljs-operator">FORM</span> <span class="hljs-operator">method</span>=<span class="hljs-string">"post"</span> <span class="hljs-operator">class</span>=<span class="hljs-string">"form"</span> <span class="hljs-operator">action</span>=<span class="hljs-string">"{:url('index/user/add')}"</span>></span> 昵 稱:<span class="hljs-regexp"><<span class="hljs-operator">INPUT</span> <span class="hljs-operator">type</span>=<span class="hljs-string">"text"</span> <span class="hljs-operator">class</span>=<span class="hljs-string">"text"</span> <span class="hljs-operator">name</span>=<span class="hljs-string">"nickname"</span>></span><span class="hljs-regexp"><<span class="hljs-operator">br</span>/></span> 郵 箱:<span class="hljs-regexp"><<span class="hljs-operator">INPUT</span> <span class="hljs-operator">type</span>=<span class="hljs-string">"text"</span> <span class="hljs-operator">class</span>=<span class="hljs-string">"text"</span> <span class="hljs-operator">name</span>=<span class="hljs-string">"email"</span>></span><span class="hljs-regexp"><<span class="hljs-operator">br</span>/></span> 生 日:<span class="hljs-regexp"><<span class="hljs-operator">INPUT</span> <span class="hljs-operator">type</span>=<span class="hljs-string">"text"</span> <span class="hljs-operator">class</span>=<span class="hljs-string">"text"</span> <span class="hljs-operator">name</span>=<span class="hljs-string">"birthday"</span>></span><span class="hljs-regexp"><<span class="hljs-operator">br</span>/></span><span class="hljs-regexp"><<span class="hljs-operator">input</span> <span class="hljs-operator">type</span>=<span class="hljs-string">"hidden"</span> <span class="hljs-operator">name</span>=<span class="hljs-string">"__token__"</span> <span class="hljs-operator">value</span>=<span class="hljs-string">"{$Request.token}"</span> /></span><span class="hljs-regexp"><<span class="hljs-operator">INPUT</span> <span class="hljs-operator">type</span>=<span class="hljs-string">"submit"</span> <span class="hljs-operator">class</span>=<span class="hljs-string">"btn"</span> <span class="hljs-operator">value</span>=<span class="hljs-string">" 提交 "</span>></span><span class="hljs-regexp"></<span class="hljs-operator">FORM</span>></span><span class="hljs-regexp"><<span class="hljs-operator">div</span> <span class="hljs-operator">class</span>=<span class="hljs-string">"copyright"</span>></span><span class="hljs-regexp"><<span class="hljs-operator">a</span> <span class="hljs-operator">title</span>=<span class="hljs-string">"官方網站"</span> <span class="hljs-operator">href</span>=<span class="hljs-string">"http://www.thinkphp.cn"</span>></span>ThinkPHP<span class="hljs-regexp"></<span class="hljs-operator">a</span>></span><span class="hljs-regexp"><<span class="hljs-operator">span</span>></span>V5<span class="hljs-regexp"></<span class="hljs-operator">span</span>></span><span class="hljs-regexp"><<span class="hljs-operator">span</span>></span>{ 十年磨一劍-為API開發設計的高性能框架 }<span class="hljs-regexp"></<span class="hljs-operator">span</span>></span><span class="hljs-regexp"></<span class="hljs-operator">div</span>></span><span class="hljs-regexp"></<span class="hljs-operator">body</span>></span><span class="hljs-regexp"></<span class="hljs-operator">html</span>></span> ``` ``` User控制器增加新的操作方法`create`如下: ``` <pre class="calibre18"> ``` <span class="hljs-comment">// 創建用戶數據頁面</span><span class="hljs-keyword">public</span> <span class="hljs-function"><span class="hljs-keyword">function</span> <span class="hljs-title">create</span><span class="hljs-number">()</span></span>{ <span class="hljs-keyword">return</span> view(); } ``` ``` `view`方法是系統封裝的助手函數用于快速渲染模板文件,這里沒有傳入模板文件,則按照系統默認的解析規則會自動渲染當前操作方法對應的模板文件,也就是默認視圖目錄(`application/index/view`)下面的`user/create.html`文件,所以如果改成下面的方式是相同的: ``` <pre class="calibre18"> ``` <span class="hljs-comment">// 創建用戶數據頁面</span><span class="hljs-keyword">public</span> <span class="hljs-function"><span class="hljs-keyword">function</span> <span class="hljs-title">create</span><span class="hljs-number">()</span></span>{ <span class="hljs-keyword">return</span> view(<span class="hljs-string">'user/create'</span>); } ``` ``` 并且修改之前的`add`方法如下: ``` <pre class="calibre18"> ``` <span class="hljs-comment">// 新增用戶數據</span><span class="hljs-keyword">public</span> <span class="hljs-function"><span class="hljs-keyword">function</span> <span class="hljs-title">add</span><span class="hljs-number">()</span></span>{ <span class="hljs-regexp">$user</span> = <span class="hljs-keyword">new</span> UserModel; <span class="hljs-keyword">if</span> (<span class="hljs-regexp">$user</span>->allowField(<span class="hljs-keyword">true</span>)->save(input(<span class="hljs-string">'post.'</span>))) { <span class="hljs-keyword">return</span> <span class="hljs-string">'用戶[ '</span> . <span class="hljs-regexp">$user</span>->nickname . <span class="hljs-string">':'</span> . <span class="hljs-regexp">$user</span>->id . <span class="hljs-string">' ]新增成功'</span>; } <span class="hljs-keyword">else</span> { <span class="hljs-keyword">return</span> <span class="hljs-regexp">$user</span>->getError(); } } ``` ``` > #### 注意 > > - - - - - - > > 這里使用`allowField(true)`是為了避免表單令牌驗證的字段被寫入數據表,如果你已經在模型里面定義了field屬性的話,可以不需要。 我們訪問URL地址: ``` <pre class="calibre18"> ``` <span class="hljs-string">http:</span> <span class="hljs-comment">//tp5.com/user/create</span> ``` ``` 頁面輸出如圖: ![](https://img.kancloud.cn/f8/e3/f8e34e6389cb4323a94410c2d84bd574_644x364.png) 輸入用戶信息后,點擊提交按鈕: ![](https://img.kancloud.cn/02/9a/029a16213a903f640c9e306aed5b3129_654x362.png) 頁面顯示結果為: ``` <pre class="calibre18"> ``` 用戶<span class="hljs-operator">[ 流年:30 ]</span>新增成功 ``` ``` ## 表單驗證 永遠不要相信用戶的數據,所以現在給表單提交添加數據驗證。 我們添加一個`User`驗證器,如下: ``` <pre class="calibre18"> ``` <?php namespace app\index\validate; use think\<span class="hljs-operator">Validate</span>; <span class="hljs-operator"><span class="hljs-keyword">class</span> <span class="hljs-title">User</span> <span class="hljs-keyword"><span class="hljs-operator">extends</span></span> <span class="hljs-title">Validate</span></span>{ <span class="hljs-comment">// 驗證規則</span><span class="hljs-keyword">protected</span> $rule = [ <span class="hljs-operator">'nicknam</span>e' => <span class="hljs-operator">'require</span>|min:<span class="hljs-number">5</span>|token', <span class="hljs-operator">'emai</span>l' => <span class="hljs-operator">'require</span>|email', <span class="hljs-operator">'birthda</span>y' => <span class="hljs-operator">'dateFormat</span>:<span class="hljs-operator">Y</span>-m-d', ]; } ``` ``` `User`驗證器添加了三個屬性的驗證規則,分別表示: - 昵稱必須,而且最小長度為5 - 郵箱必須,而且必須是合法的郵件地址 - 生日可選,如果填寫的話必須為 `Y-m-d`格式的日期格式 對屬性可以使用多個驗證規則,除非使用了`require`開頭的規則,否則所有的驗證都是可選的(也就是說有值才驗證),多個驗證之間用`|`分割,并且按照先后順序依次進行驗證,一旦某個規則驗證失敗,后續的規則就不會再進行驗證(除非設置批量驗證方式則統一返回所有的錯誤信息)。 更多的內置規則可以參考完全開發手冊的[內置規則](http://www.hmoore.net/manual/thinkphp5/129356)一節。 如果我們的驗證規則里面使用了`|`,為了避免混淆則必須用數組方式定義驗證規則,驗證規則定義修改如下: ``` <pre class="calibre18"> ``` <span class="hljs-operator"><span class="hljs-number"><?php</span><span class="hljs-keyword">namespace</span> <span class="hljs-title">app</span>\<span class="hljs-title">index</span>\<span class="hljs-title">validate</span>; <span class="hljs-keyword">use</span> <span class="hljs-title">think</span>\<span class="hljs-title">Validate</span>; <span class="hljs-operator"><span class="hljs-keyword">class</span> <span class="hljs-title">User</span> <span class="hljs-keyword">extends</span> <span class="hljs-title">Validate</span></span>{ <span class="hljs-comment">// 驗證規則</span><span class="hljs-keyword">protected</span> <span class="hljs-regexp">$rule</span> = [ <span class="hljs-string">'nickname'</span> => [<span class="hljs-string">'require'</span>, <span class="hljs-string">'min'</span>=><span class="hljs-number">5</span>, <span class="hljs-string">'token'</span>], <span class="hljs-string">'email'</span> => [<span class="hljs-string">'require'</span>, <span class="hljs-string">'email'</span>], <span class="hljs-string">'birthday'</span> => [<span class="hljs-string">'dateFormat'</span> => <span class="hljs-string">'Y|m|d'</span>], ]; }</span> ``` ``` 然后對控制器的`add`方法則稍加修改,在`save`方法之前添加一個`validate`方法即可: ``` <pre class="calibre18"> ``` <span class="hljs-comment">// 新增用戶數據</span><span class="hljs-keyword">public</span> <span class="hljs-function"><span class="hljs-keyword">function</span> <span class="hljs-title">add</span><span class="hljs-number">()</span></span>{ <span class="hljs-regexp">$user</span> = <span class="hljs-keyword">new</span> UserModel; <span class="hljs-keyword">if</span> (<span class="hljs-regexp">$user</span>->allowField(<span class="hljs-keyword">true</span>)->validate(<span class="hljs-keyword">true</span>)->save(input(<span class="hljs-string">'post.'</span>))) { <span class="hljs-keyword">return</span> <span class="hljs-string">'用戶[ '</span> . <span class="hljs-regexp">$user</span>->nickname . <span class="hljs-string">':'</span> . <span class="hljs-regexp">$user</span>->id . <span class="hljs-string">' ]新增成功'</span>; } <span class="hljs-keyword">else</span> { <span class="hljs-keyword">return</span> <span class="hljs-regexp">$user</span>->getError(); } } ``` ``` 當我們沒有輸入任何表單數據就直接提交的話,頁面會輸出結果: ``` <pre class="calibre18"> ``` nickname不能為空 ``` ``` 當我們輸入昵稱為`wo`的時候點擊提交 ![](https://img.kancloud.cn/31/fb/31fb0c11efa60349efb95cbcc5d713fe_640x366.png) 頁面輸出結果為: ``` <pre class="calibre18"> ``` nickname長度不能小于 <span class="hljs-number">5</span> ``` ``` 當輸入一個錯誤的郵箱格式后提交 ![](https://img.kancloud.cn/74/07/7407dbf4585df5326c778c2c63bc7f52_672x363.png) 頁面提示錯誤信息為: ``` <pre class="calibre18"> ``` email格式不符 ``` ``` 當輸入一個 1990/08/09 的生日時候 ![](https://img.kancloud.cn/57/25/5725d53d0fb53af1dfef73fe1a61b0cb_674x362.png) 頁面提示的錯誤信息是: ``` <pre class="calibre18"> ``` birthday必須使用日期格式:Y-m<span class="hljs-operator">-d</span> ``` ``` ## 錯誤提示 目前為止,提示的錯誤信息都是系統默認的,接下來我們來定義提示信息。 首先,如果只是希望修改屬性名稱的話,可以直接使用下面的驗證規則定義方式: ``` <pre class="calibre18"> ``` <?php namespace app\index\validate; use think\<span class="hljs-operator">Validate</span>; <span class="hljs-operator"><span class="hljs-keyword">class</span> <span class="hljs-title">User</span> <span class="hljs-keyword"><span class="hljs-operator">extends</span></span> <span class="hljs-title">Validate</span></span>{ <span class="hljs-comment">// 驗證規則</span><span class="hljs-keyword">protected</span> $rule = [ <span class="hljs-operator">'nickname</span>|昵稱' => <span class="hljs-operator">'require</span>|min:<span class="hljs-number">5</span>', <span class="hljs-operator">'email</span>|郵箱' => <span class="hljs-operator">'require</span>|email', <span class="hljs-operator">'birthday</span>|生日' => <span class="hljs-operator">'dateFormat</span>:<span class="hljs-operator">Y</span>-m-d', ]; } ``` ``` 現在我們提交一個錯誤的郵箱, ![](https://img.kancloud.cn/2d/67/2d67370c41637ecf2209ff0982e5df10_626x362.png) 提示的錯誤信息為: ``` <pre class="calibre18"> ``` 郵箱格式不符 ``` ``` 輸入錯誤的生日格式的時候,提示的錯誤信息為: ``` <pre class="calibre18"> ``` 生日必須使用日期格式:Y-m<span class="hljs-operator">-d</span> ``` ``` 如果希望完整定義錯誤提示信息的話,可以使用: ``` <pre class="calibre18"> ``` <?php namespace app\index\validate; use think\<span class="hljs-operator">Validate</span>; <span class="hljs-operator"><span class="hljs-keyword">class</span> <span class="hljs-title">User</span> <span class="hljs-keyword"><span class="hljs-operator">extends</span></span> <span class="hljs-title">Validate</span></span>{ <span class="hljs-comment">// 驗證規則</span><span class="hljs-keyword">protected</span> $rule = [ [<span class="hljs-operator">'nicknam</span>e', <span class="hljs-operator">'require</span>|min:<span class="hljs-number">5</span>', '昵稱必須|昵稱不能短于<span class="hljs-number">5</span>個字符'], [<span class="hljs-operator">'emai</span>l', <span class="hljs-operator">'emai</span>l', '郵箱格式錯誤'], [<span class="hljs-operator">'birthda</span>y', <span class="hljs-operator">'dateFormat</span>:<span class="hljs-operator">Y</span>-m-d', '生日格式錯誤'], ]; } ``` ``` 現在我們提交一個錯誤的郵箱,提示的錯誤信息為: ``` <pre class="calibre18"> ``` 郵箱格式錯誤 ``` ``` 提交一個錯誤的生日格式后,提示的錯誤信息變成: ``` <pre class="calibre18"> ``` 生日格式錯誤 ``` ``` 系統提供了豐富的內置驗證規則,具體可以參考完全開發手冊。 ## 自定義驗證規則 系統的驗證規則可以滿足大部分的驗證場景,但有時候我們也需要自定義特殊的驗證規則,例如我們需要驗證郵箱必須為`thinkphp.cn`域名的話,可以在`User`驗證器中添加驗證規則如下: ``` <pre class="calibre18"> ``` <span class="hljs-operator"><span class="hljs-number"><?php</span><span class="hljs-keyword">namespace</span> <span class="hljs-title">app</span>\<span class="hljs-title">index</span>\<span class="hljs-title">validate</span>; <span class="hljs-keyword">use</span> <span class="hljs-title">think</span>\<span class="hljs-title">Validate</span>; <span class="hljs-operator"><span class="hljs-keyword">class</span> <span class="hljs-title">User</span> <span class="hljs-keyword">extends</span> <span class="hljs-title">Validate</span></span>{ <span class="hljs-comment">// 驗證規則</span><span class="hljs-keyword">protected</span> <span class="hljs-regexp">$rule</span> = [ [<span class="hljs-string">'nickname'</span>, <span class="hljs-string">'require|min:5'</span>, <span class="hljs-string">'昵稱必須|昵稱不能短于5個字符'</span>], [<span class="hljs-string">'email'</span>, <span class="hljs-string">'checkMail:thinkphp.cn'</span>, <span class="hljs-string">'郵箱格式錯誤'</span>], [<span class="hljs-string">'birthday'</span>, <span class="hljs-string">'dateFormat:Y-m-d'</span>, <span class="hljs-string">'生日格式錯誤'</span>], ]; <span class="hljs-comment">// 驗證郵箱格式 是否符合指定的域名</span><span class="hljs-keyword">protected</span> <span class="hljs-function"><span class="hljs-keyword">function</span> <span class="hljs-title">checkMail</span><span class="hljs-number">(<span class="hljs-regexp">$value</span>, <span class="hljs-regexp">$rule</span>)</span></span>{ <span class="hljs-keyword">return</span> <span class="hljs-number">1</span> === preg_match(<span class="hljs-string">'/^\w+([-+.]\w+)*@'</span> . <span class="hljs-regexp">$rule</span> . <span class="hljs-string">'$/'</span>, <span class="hljs-regexp">$value</span>); } }</span> ``` ``` 自定義驗證規則也支持返回動態的錯誤信息,只需要在驗證方法里面返回錯誤信息字符串即可,例如: ``` <pre class="calibre18"> ``` <span class="hljs-operator"><span class="hljs-number"><?php</span><span class="hljs-keyword">namespace</span> <span class="hljs-title">app</span>\<span class="hljs-title">index</span>\<span class="hljs-title">validate</span>; <span class="hljs-keyword">use</span> <span class="hljs-title">think</span>\<span class="hljs-title">Validate</span>; <span class="hljs-operator"><span class="hljs-keyword">class</span> <span class="hljs-title">User</span> <span class="hljs-keyword">extends</span> <span class="hljs-title">Validate</span></span>{ <span class="hljs-comment">// 驗證規則</span><span class="hljs-keyword">protected</span> <span class="hljs-regexp">$rule</span> = [ [<span class="hljs-string">'nickname'</span>, <span class="hljs-string">'require|min:5'</span>, <span class="hljs-string">'昵稱必須|昵稱不能短于5個字符'</span>], [<span class="hljs-string">'email'</span>, <span class="hljs-string">'checkMail:thinkphp.cn'</span>, <span class="hljs-string">'郵箱格式錯誤'</span>], [<span class="hljs-string">'birthday'</span>, <span class="hljs-string">'dateFormat:Y-m-d'</span>, <span class="hljs-string">'生日格式錯誤'</span>], ]; <span class="hljs-comment">// 驗證郵箱格式 是否符合指定的域名</span><span class="hljs-keyword">protected</span> <span class="hljs-function"><span class="hljs-keyword">function</span> <span class="hljs-title">checkMail</span><span class="hljs-number">(<span class="hljs-regexp">$value</span>, <span class="hljs-regexp">$rule</span>)</span></span>{ <span class="hljs-regexp">$result</span> = preg_match(<span class="hljs-string">'/^\w+([-+.]\w+)*@'</span> . <span class="hljs-regexp">$rule</span> . <span class="hljs-string">'$/'</span>, <span class="hljs-regexp">$value</span>); <span class="hljs-keyword">if</span> (!<span class="hljs-regexp">$result</span>) { <span class="hljs-keyword">return</span> <span class="hljs-string">'郵箱只能是'</span> . <span class="hljs-regexp">$rule</span> . <span class="hljs-string">'域名'</span>; } <span class="hljs-keyword">else</span> { <span class="hljs-keyword">return</span> <span class="hljs-keyword">true</span>; } } }</span> ``` ``` 如果輸入了一個不是`thinkphp.cn`域名的郵箱地址,會提示如下錯誤信息: ``` <pre class="calibre18"> ``` 郵箱只能是<span class="hljs-regexp">thinkphp</span><span class="hljs-regexp">.cn</span>域名 ``` ``` ## 控制器驗證 前面我們講了在模型中使用驗證器進行數據驗證的方法,下面來講下如何在控制器中進行數據驗證。 驗證器類的定義不變,現在修改下控制器類: ``` <pre class="calibre18"> ``` <span class="hljs-keyword">namespace</span> <span class="hljs-title">app</span>\<span class="hljs-title">index</span>\<span class="hljs-title">controller</span>; <span class="hljs-keyword">use</span> <span class="hljs-title">app</span>\<span class="hljs-title">index</span>\<span class="hljs-title">model</span>\<span class="hljs-title">User</span> <span class="hljs-title">as</span> <span class="hljs-title">UserModel</span>; <span class="hljs-keyword">use</span> <span class="hljs-title">think</span>\<span class="hljs-title">Controller</span>; <span class="hljs-operator"><span class="hljs-keyword">class</span> <span class="hljs-title">User</span> <span class="hljs-keyword">extends</span> <span class="hljs-title">Controller</span></span>{ <span class="hljs-comment">// 創建用戶數據頁面</span><span class="hljs-keyword">public</span> <span class="hljs-function"><span class="hljs-keyword">function</span> <span class="hljs-title">create</span><span class="hljs-number">()</span></span>{ <span class="hljs-keyword">return</span> view(); } <span class="hljs-keyword">public</span> <span class="hljs-function"><span class="hljs-keyword">function</span> <span class="hljs-title">add</span><span class="hljs-number">()</span></span>{ <span class="hljs-regexp">$data</span> = input(<span class="hljs-string">'post.'</span>); <span class="hljs-comment">// 數據驗證</span><span class="hljs-regexp">$result</span> = <span class="hljs-regexp">$this</span>->validate(<span class="hljs-regexp">$data</span>,<span class="hljs-string">'User'</span>); <span class="hljs-keyword">if</span> (<span class="hljs-keyword">true</span> !== <span class="hljs-regexp">$result</span>) { <span class="hljs-keyword">return</span> <span class="hljs-regexp">$result</span>; } <span class="hljs-regexp">$user</span> = <span class="hljs-keyword">new</span> UserModel; <span class="hljs-comment">// 數據保存</span><span class="hljs-regexp">$user</span>->allowField(<span class="hljs-keyword">true</span>)->save(<span class="hljs-regexp">$data</span>); <span class="hljs-keyword">return</span> <span class="hljs-string">'用戶[ '</span> . <span class="hljs-regexp">$user</span>->nickname . <span class="hljs-string">':'</span> . <span class="hljs-regexp">$user</span>->id . <span class="hljs-string">' ]新增成功'</span>; } } ``` ``` 然后訪問 ``` <pre class="calibre18"> ``` <span class="hljs-string">http:</span> <span class="hljs-comment">//tp5.com/user/create</span> ``` ``` 當輸入一個錯誤的郵箱格式后提交 ![](https://img.kancloud.cn/74/07/7407dbf4585df5326c778c2c63bc7f52_672x363.png) 頁面提示錯誤信息為: ``` <pre class="calibre18"> ``` email格式不符 ``` ``` 如果有一些個別的驗證沒有在驗證器里面定義,也可以使用靜態方法單獨處理,例如下面對birthday字段單獨驗證是否是一個有效的日期格式: ``` <pre class="calibre42"> ``` <span class="hljs-keyword">namespace</span> <span class="hljs-title">app</span>\<span class="hljs-title">index</span>\<span class="hljs-title">controller</span>; <span class="hljs-keyword">use</span> <span class="hljs-title">app</span>\<span class="hljs-title">index</span>\<span class="hljs-title">model</span>\<span class="hljs-title">User</span> <span class="hljs-title">as</span> <span class="hljs-title">UserModel</span>; <span class="hljs-keyword">use</span> <span class="hljs-title">think</span>\<span class="hljs-title">Controller</span>; <span class="hljs-keyword">use</span> <span class="hljs-title">think</span>\<span class="hljs-title">Validate</span>; <span class="hljs-operator"><span class="hljs-keyword">class</span> <span class="hljs-title">User</span> <span class="hljs-keyword">extends</span> <span class="hljs-title">Controller</span></span>{ <span class="hljs-comment">// 創建用戶數據頁面</span><span class="hljs-keyword">public</span> <span class="hljs-function"><span class="hljs-keyword">function</span> <span class="hljs-title">create</span><span class="hljs-number">()</span></span>{ <span class="hljs-keyword">return</span> view(); } <span class="hljs-keyword">public</span> <span class="hljs-function"><span class="hljs-keyword">function</span> <span class="hljs-title">add</span><span class="hljs-number">()</span></span>{ <span class="hljs-regexp">$data</span> = input(<span class="hljs-string">'post.'</span>); <span class="hljs-comment">// 驗證birthday是否有效的日期</span><span class="hljs-regexp">$check</span> = Validate::is(<span class="hljs-regexp">$data</span>[<span class="hljs-string">'birthday'</span>],<span class="hljs-string">'date'</span>); <span class="hljs-keyword">if</span> (<span class="hljs-keyword">false</span> === <span class="hljs-regexp">$check</span>) { <span class="hljs-keyword">return</span> <span class="hljs-string">'birthday日期格式非法'</span>; } <span class="hljs-regexp">$user</span> = <span class="hljs-keyword">new</span> UserModel; <span class="hljs-comment">// 數據保存</span><span class="hljs-regexp">$user</span>->save(<span class="hljs-regexp">$data</span>); <span class="hljs-keyword">return</span> <span class="hljs-string">'用戶[ '</span> . <span class="hljs-regexp">$user</span>->nickname . <span class="hljs-string">':'</span> . <span class="hljs-regexp">$user</span>->id . <span class="hljs-string">' ]新增成功'</span>; } } ``` ```
                  <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>

                              哎呀哎呀视频在线观看