ThinkChat🤖让你学习和工作更高效,注册即送10W Token,即刻开启你的AI之旅 广告
[TOC] # 题外话 工作以来,一直都有想过写个自己的博客或者后台管理系统,主要是想把接触的技术在这个上面进行实践。也有个可以展示自己的作品。之前因为各种原因,还有毅力问题,都没有启动起来,这两个月没有工作的时间,想明白了一些事情,稍微能静下心来,决心也更大了一些,那就从零开始建设吧! ***** # 选型 当前是已经搭好LNMP的环境 前端:bootstrap+jquery => 后面希望能用vue|angular|react重新实践一遍。先用熟悉的把项目架起来 后端:thinkphp5.1.* => 后面希望能用laravel相关框架重新实践一遍,tp5也在熟悉过程中,听说tp6已经要出了,只能感叹技术学习之路漫长。 为了前后端方便迁移和转换,先使用后端框架模板渲染方式快速建起项目,后面再使用前后端分离,然后前后段可以实践其他的框架,减少更换选型的重建的成本! ***** # 问题 ## 一、模板静态资源404 为了方便定义静态资源路径,使用了模板常量。 定义的方式就是在配置文件的模板配置template.php里加上 ``` return [ 'tpl_replace_string' => [ // 这里我没有改框架的入口文件 并且nginx的server配置项root参数是public目录。这个常量相当于是直接定义STATIC到根目录下的static目录 '__STATIC__' => '/static', ] ]; ``` ## 二、workman和swoole的第三方库无法composer提示要求thinkphp的版本大于6,那就降低库的版本来适应框架版本 ``` composer require topthink/think-worker ^2.0 composer require topthink/think-swoole ^2.0 ``` ## 三、登录界面验证码依赖验证码类库 ``` composer require topthink/think-captcha ^2.0 ``` ## 四、verdor库的调用 ``` 找到 应用目录同级的`vendor`目录 在地下找到`topthink`,该目录下就是thinkphp官方的功能库 找到核心类 看其命名空间是什么 比如验证码类库 namespace think\\captcha; 再看类名是什么 Captcha 那么使用的方式就是在调用的类使用 use think\captcha\Captcha; // 命名空间/类名; $config = []; // 配置数组,可以把库文件的默认设置复制一份,然后在此基础上修改 $captcha = new Captcha($config); ``` ## 五、致命错误: Call to undefined function think\captcha\imagecreate(); 该函数依赖php_gd库,没有没有安装扩展需要安装并开启 ``` // 先看是否安装 php -m // 会列出所有的扩展库.发现没有,基本确认 ``` ## 六、自定义类库 在application同级extend目录下创建lib目录,在该目录下创建ErrorCode.php 定义: ``` <?php namespace lib; class ErrorCode { const SUCCESS = 0; // 通用成功 const UNKNOWN_REQUEST = 1000; // 通用的未知请求 const ERROR_REQUEST = 1001; // 通用的错误请求 const PARAMS_ERROR = 1002; // 参数错误 } ``` 调用时在控制器引入 use lib\ErrorCode; 然后在代码块就可以直接使用 ``` // 部分代码 仅为展示使用 $param = $this->request->post(); $response = [ 'code'=> ErrorCode::SUCCESS, 'msg'=> '登录成功', 'data'=> [] ]; if(!$this->checkVerify($param['code'])){ $response['msg'] = '验证码不正确'; $response['code'] = ErrorCode::PARAMS_ERROR; $response['data'] = $param; return json($response); } ``` ## 七、数据模型的使用:驱动模式 ``` // 模型类的驱动核心代码,像usb一样插入对象就可以将其赋能到模型。 public function __call($method, $args) { if ('withattr' == strtolower($method)) { return call_user_func_array([$this, 'withAttribute'], $args); } return call_user_func_array([$this->db(), $method], $args); } public static function __callStatic($method, $args) { $model = new static(); return call_user_func_array([$model->db(), $method], $args); } ``` ## 八、调用模型的时候:The server requested authentication method unknown to the client ``` // 原因是我装的mysql8.0版本,安全策略应该是默认不让root用户远程验证登录 //使用root用户登录MySQL控制台: root@54skyer:/# mysql -u root -p //回车后输入自己的密码再按回车 //并使用密码更改身份验证插件: mysql> ALTER USER root IDENTIFIED WITH mysql_native_password BY '自己的root密码'; Query OK, 0 rows affected (0.08 sec) ``` # 进度 ## 登录页面完成