简介
- 正好近期在家没事做一个全栈的项目,其中需要通过PHP写一组后台接口,框架选定为Laravel,正好顺手写一个标准搭建的流程和步骤,希望能帮助到大家。
- 为了减少环境因素干扰,我测试环境在docker 中搭建的,如果你使用其他服务器方法类似。
选择Laravel版本
- 为了兼容等各种因素我没有使用最新的v8版本,因为我没用过所以还是用v5.5.x版本吧比较稳妥。
初始化Laravel 项目
- 通过composer 进行项目脚手架初始化,phper 还是需要会用composer 的,不了解请百度。
# 命令如下:(examing-backend 是项目名称,会创建一个同名目录)
composer create-project --prefer-dist laravel/laravel examing-backend "5.5.*"
-
缓慢安装中,composer 是可以通过镜像加速的(具体方法请自行度娘),我没有加速但是也可以安装成功的,只是稍慢:
通过IDE连调PHPUnit
- 我的IDE是PHPStorm 2020,所以用这个IDE做举例,抛砖引玉,其他的IDE不做赘述。
-
首先用PHPStorm打开刚创建的 examing-backend ,可以看到默认上laravel 包含了一个 test测试目录,稍后我们用这里面提供的文件做测试。
-
另外里面包含了一个PHPUnit的配置xml,如果新增测试目录可以照这个这个配置
- 查看
composer.json
配置文件,包含对应的配置信息。
- 有了上面的简单了解后我们发现并没有看到
vendor
目录,这个目录是存放composer
相关组件类库的文件夹,也就是说需要初始化一下所有组件,也就是(composer.json)
中定义的组件。
# 输入如下命令,初始化vendor目录,会自动下载phpunit,也就是说你不需要全局安装phpunit
composer install
-
输入后可以看到系统提示正在安装,稍等片刻就OK了
如上了解并且准备好后,进入IDE的配置环节,这步骤可能让我们更方便的进行TDD模式开发,大致流程如下:
(也可以参考我之前写的文章:https://www.jianshu.com/p/f02be79be642,不过这篇文章写的不是很详细,推荐继续看这里)
# 1、首先我们先要分配给IDE一个CLI(解释器),说白了就是告诉你的IDE你用的PHP在什么位置,这样之后IDE才可以通过这个解释器去执行测试文件。
# 2、
配置PHP-CLI(php解释器)
- 点击
PhpStorm->Preferences
我将一步一个截图的进行引导
- 在搜索框里搜索
PHP
,然后点击后面的...
打开CLI Interpreters
配置界面
-
配置PHP-CLI时分两种情况,如果你是本机PHP,那么IDE会扫描并识别PHP-CLI。
- 但是我本机为了环境搭建省力,用的是docker 环境,所以还需要添加一个新的docker 解释器,如果你用的是本机PHP那么忽略这里即可,点击小加号,然后选择
From Docker, Vagrant ...
- 选择对应的Server 名称,系统会自动识别出
Image name
,其实自己重新选Image name 也是可以的,之后点击OK
- 这时候回到
CLI Interpreters
的配置页面就可以选择docker 镜像作为CLI解释器了,然后点击OK保存即可。
- 保存后回到PHP的配置信息页面,我有必要做个原理上的基本解释,以免后面一脸懵逼,非docker解释器的可以略过,作为docker 解释器的来说,当解释器执行的时候实际上会生成一个临时的docker 容器,会将项目根目录
examing-backend
挂载到容器的/opt/project
下面,也就是说后面引用的文件位置都会是/opt/project
,明白了么?
配置Test frameworks(测试框架)
- 首先在配置搜索框里搜索
test
,然后点击Test Frameworks
,点击右侧内容栏的加号
,然后点击PHPUnit by Remote Interpreter
-
在弹出的Interpreter选择器重,选择刚刚加入的docker镜像
-
PHPUnit library
大多情况下都应该可以被自动识别,但是我的并没有,不过别着急。
- 基于上面对于
docker - cli
,就可以推断出autoload.php
的位置在/opt/project/vendor/autoload.php
,所以在Path to script
后面直接填入/opt/project/vendor/autoload.php
然后点击后面的刷新,如下图表示设置成功,然后点击OK关闭窗口。
运行测试
- 在项目
test
目录上右击,选择菜单中的Run 'tests' (PHPUnit)
- 此时可以看到测试已经运行成功了,后面的
No application encryption key has been specified.
是因为没有配置.env
文件的原因。
- 创建.env文件,
cp .env.example .env
然后通过php artisan key:generate
可以生成一个APP_KEY
。 -
然后重新运行测试,发现一切正常了,这样的话就可以开始你的TDD的开发了。
配置XDebug
- 上面已经安装了Laravel框架,通过PHPUnit搭建了TDD开发的环境,还差最后一个断点调试的配置搭建,跟着我一步一步做一点也不难,let's go!
- 也可以参考我之前写的文章
https://www.jianshu.com/p/f511c61abf20
我觉得介绍的很清楚,我这里只是环境部署,所以假定您已经在服务端安装了XDebug的PHP模块,如果没有请参考我之前的文章。
配置HTTP服务器
- 我这里http服务器也是用
docker-nginx
镜像部署的,我不赘述docker
如何使用,总之可以访问接口,直接上配置,配置好后重启nginx
容器让配置生效。
# 进入nginx/config.d/ 配置目录
# vim 7015.examing.conf
# 不要惊讶为什么 `localtion / root` 和 `\.php$ / root `的配置目录为什么不一样,因为我的nginx和php分别来自两个不同的镜像容器,他们在同一个虚拟子网下面,`172.18.0.2` 是php容器的虚拟子网IP
# 里面的配置用作参考请根据实际情况进行修改调整。
server {
# 监听的端口
listen 7015;
listen [::]:7015;
server_name localhost;
location / {
# 这个目录是Nginx的目录
root /usr/share/nginx/html/exam-app/examing-backend/public;
index index.html index.htm index.php;
try_files $uri $uri/ /index.php?$query_string;
autoindex on;
#显示出文件的确切大小,单位是bytes
autoindex_exact_size on;
#改为on后,显示的文件时间为文件的服务器时间
autoindex_localtime on;
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root /usr/share/nginx/html;
}
location ~ \.php$ {
# 这个目录对应的是PHP-docker 容器的目录千万不要搞错了
root /var/www/html/exam-app/examing-backend/public;
# IP 172.18.0.2 是我容器内网的IP
fastcgi_pass 172.18.0.2:9000;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}
}
- 访问
http://localhost:7015
,页面打开正常说明配置成功。
配置php容器中的 xdebug.ini
- 进入PHP容器
vim /usr/local/etc/php/conf.d/docker-php-ext-xdebug.ini
(如果你没有用容器,那么直接在php.ini [xdebug]段落中配置即可)
;# 配置文件如下我做一些简要说明
;# 这行就是xdebug模块的位置,安装了就会有,没安装先安装
zend_extension=/usr/local/lib/php/extensions/no-debug-non-zts-20180731/xdebug.so
xdebug.profiler_enable=on
xdebug.trace_output_dir="/usr/local/php/xdebug_trace"
xdebug.profiler_output_dir="/usr/local/php/xdebug_profiler"
xdebug.default_enable=0
xdebug.remote_enable=1
xdebug.remote_handler=dbgp
;#这行比较重要,xdeubg并不是随便乱发消息的他会发到这个IP上
xdebug.remote_host=host.docker.internal
;#端口也可以在这里配置
xdebug.remote_port=19001
xdebug.remote_connect_back=0
xdebug.remote_autostart=1
;# 这个键值记住了,稍后配置时候要用。
xdebug.idekey=PHPSTORM
xdebug.remote_log=/usr/local/php/xdebug/remote.log
保存并重启PHP容器后,我们需要配置一下
PHPStorm IDE
,让其启动一个19001
的Xdebug
监听端口。然后点击IDE的
Preferences
设置,搜索Debug
,我们对本地监听端口进行一个简单的设置,Debug Port
设置填写19001
。-
这次直接在调试器选择矿中点击后面的倒三角,然后在下拉的列表中选择
Edit Configurations ...
-
在弹出的对话框中点击左侧小加号添加一个调试工具
-
随后选择
PHP Remote Debug
-
弹出的对话框中输入运行配置名称为
7015-XDebug
,选择Server时,发现并没有服务器列表,点击后面的...
添加一个新的
-
服务器名字输入:
7015-Server
,Host输入localhost
,Port输入7015
,Debuger选择XDebug
,请注意根据你实际情况调整即可,我的项目http访问地址是http://localhost:7015
所以我才这么写。
另外如果你是
docker开发测试环境
不要忘了配置User path mappings
的映射关系:(参考下图)
# 配置有点麻烦但是很好理解,比如你的程序文件目录是
/localfile/git-fiels/exam-app/examing-backend
# 对应nginx 上面的映射目录是这个,那么配置进去即可
/var/www/html/exam-app/examing-backend
保存后又回到之前的
Run/Debug Configurations
的窗口中,IDE key 窗口填写PHPSTORM
,也就是xdebug
配置文件中配置项对应的值,一切搞定后点击OK关闭对话框回到IDE主界面中。-
保存后回到IDE主界面中,点击IDE 上方的小电话图标,让其变成连线状态,这时候本地应该会启动一个19001的端口监听。
-
在命令行工具里输入
lsof -i:19001
,可以看大phpstorm 启动了一个19001的端口来监听XDebug发来的请求。
最后一步测试XDebug断点调试功能
- 好了是时候放弃echo 和print_r了,测试一下XDebug的功能如何
- 直接修改路由做个测试
vim routes/web.php
添加代码:
Route::get('/xdebug', function () {
$tip = 'Hello';
$name = 'xdebug';
return "{$tip}, {$name}";
});
- 启动XDebug 调试监听,然后网页刷新
http://localhost:7015/xdebug
结束
- 至此完毕,感觉XDebug那块有点乱,不明白的给我私信吧。