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

                ThinkChat2.0新版上線,更智能更精彩,支持會話、畫圖、視頻、閱讀、搜索等,送10W Token,即刻開啟你的AI之旅 廣告
                # 存儲數據 數據的校驗已經完成,現在我們進行數據的存儲. 打開控制器 `application\user\controller\Auth.php` 并修改: ~~~~ php use app\user\model\User; ... if (true !== $result) { return redirect('user/auth/create')->with('validate',$result); } else { return User::create($requestData); } ~~~~ 此時再重新提交數據,系統會拋出錯誤 `user` 表不存在,ThinkPHP 并未完全遵守前面章節所提到的約定俗稱標準,即 `UserModel` 對應 `users` 的約定,我們現在打開 `application\user\model\User.php` 并修改: ~~~~ php class User extends Model { // 定義數據表名 protected $table = 'users'; } ~~~~ `protected $table` 方法,指定表名稱. 設置完成之后,再次提交,則會返回類似數據: ~~~~ text {"__token__":"884e7770f55ac2d29964499b1ffabb0a35e8cf88","name":"1123","email":"agdholo@gmail.com","password":"protected $table = 'think_user';","password_confirm":"protected $table = 'think_user';","id":"1"} ~~~~ 這表明我們的數據已經添加進數據庫,現在我們打開數據庫來查看,會發現 `updated_at` 字段并未自動維護,我們則需要手動設置維護字段 `config\database.php`: ~~~~ config // 自動寫入時間戳字段 'auto_timestamp' => 'timestamp', ~~~~ `application\user\model\User.php`: ~~~~ php // 定義數據表名 protected $table = 'users'; // 定義時間戳字段名 protected $createTime = 'created_at'; protected $updateTime = 'updated_at'; ~~~~ 現在重新添加提交數據,我們的字段已經自動由框架進行維護了. 可是現在的密碼還是明文提交的,我們需要在控制器中對密碼進行加密 `application\user\model\User.php`: ~~~~ php // 設置修改器 public function setPasswordAttr($value) { return password_hash($value, PASSWORD_DEFAULT); } ~~~~ 這段代碼使用了 `ThinkPHP Model` 提供的修改器功能, `setPasswordAttr($value)` 可以拆分為 `set|Password|Attr`,中部的 `Password` 就是我們要設置的字段值,同樣的,如果我們要設置 `name` 字段就寫入 `setnameAttr` 就可以了. `password_hash` 是 PHP 語言內置的一個 `非對稱加密` 算法: http://php.net/manual/zh/function.password-hash.php, 此加密算法不可逆向,只能通過驗證取得,請注意,在任何時候都不要使用 `md5` 極其一類的 `摘要算法`,它們屬于 `摘要算法` 而不屬于 `加密算法`,不可用做加密功能,為了您的生命安全,請牢記此項. 同樣的,我們只對郵箱做出了 `是否符合郵箱地址規則` 的校驗,并沒有篩選大小寫, `application\user\model\User.php`: ~~~~ php // 設置修改器 public function setPasswordAttr($value) { return password_hash($value, PASSWORD_DEFAULT); } public function setEmailAttr($value) { return strtolower($value); } ~~~~ 現在傳入的 `email` 字段也會自動轉化為小寫,對提交的數據已經轉換完成了,這時候千萬不要已經收工,一個潛在的安全漏洞已經出現 在控制器 `application\user\controller\Auth.php` 中,我們通過 `User::create($requestData);` 來批量提交所有的字段,在數據表中我們有一項 `god` 字段,目的是判斷是否是超級管理員,如果這時候在前端偽造一個 `god` 字段進行提交,后果不堪設想,所以我們在入庫的時候需要進行字段過濾. `application\user\model\User.php`: ~~~~ php // 定義運行操作的字段 protected $field = ['name', 'email', 'password', 'avatar']; ~~~~ 允許用戶自主提交的字段就不存在 `god` 等能夠手動提權的操作了. ## 跳轉至成功頁面 前面的數據操作都進行完成之后,我們還剩最后一項跳轉的任務, `application\user\controller\Auth.php`: ~~~~ php public function save(Request $request) { $requestData = $request->post(); $result = $this->validate($requestData, 'app\user\validate\Auth'); if (true !== $result) { return redirect('user/auth/create')->with('validate',$result); } else { $user = User::create($requestData); return redirect('user/auth/read')->params(['id' => $user->id]); } } ~~~~ `redirect('user/auth/read')->params(['id' => $user->id])` 中 `params(['id' => $user->id])` 是傳遞的參數,當路由的 `read` 等操作綁定的是 `$id` 時,我們傳入 `$id` 將會自動跳轉到 `user/auth/read/$id`. 可是現在跳轉過去的頁面任然是空白,所以我們需要添加一些操作 `application\user\controller\Auth.php`: ~~~~ php public function read($id) { $user = User::find($id); $this->assign('user', $user); return $this->fetch(); } ~~~~ `User::find($id)` 是模型的一個查詢語法,默認查詢 `$id(主鍵值)`. 接著創建前端文件 `resources\views\user\auth\read.blade.php`: ~~~~ html @extends('_layout.default') @section('title', $user->name) @section('content') <div class="col-md-offset-2 col-md-8"> <div class="panel panel-default mt-5"> <div class="panel-heading mb-3"> <h4>歡迎您 {{ $user->name }}</h4> </div> </div> </div> @stop ~~~~ 現在重新注冊個用戶,即可自動跳轉至歡迎頁面了.
                  <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>

                              哎呀哎呀视频在线观看