从零开撕完整配置Laravel

简介

  • 正好近期在家没事做一个全栈的项目,其中需要通过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 是可以通过镜像加速的(具体方法请自行度娘),我没有加速但是也可以安装成功的,只是稍慢:


    image.png

通过IDE连调PHPUnit

  • 我的IDE是PHPStorm 2020,所以用这个IDE做举例,抛砖引玉,其他的IDE不做赘述。
  • 首先用PHPStorm打开刚创建的 examing-backend ,可以看到默认上laravel 包含了一个 test测试目录,稍后我们用这里面提供的文件做测试。


    默认的测试文件
  • 另外里面包含了一个PHPUnit的配置xml,如果新增测试目录可以照这个这个配置


    image.png
  • 查看composer.json 配置文件,包含对应的配置信息。
    包含PHPUnit的相关组件配置
  • 有了上面的简单了解后我们发现并没有看到vendor目录,这个目录是存放composer相关组件类库的文件夹,也就是说需要初始化一下所有组件,也就是(composer.json)中定义的组件。
# 输入如下命令,初始化vendor目录,会自动下载phpunit,也就是说你不需要全局安装phpunit
composer install
  • 输入后可以看到系统提示正在安装,稍等片刻就OK了


    初始化composer-vendor
  • 如上了解并且准备好后,进入IDE的配置环节,这步骤可能让我们更方便的进行TDD模式开发,大致流程如下:(也可以参考我之前写的文章:https://www.jianshu.com/p/f02be79be642,不过这篇文章写的不是很详细,推荐继续看这里)

# 1、首先我们先要分配给IDE一个CLI(解释器),说白了就是告诉你的IDE你用的PHP在什么位置,这样之后IDE才可以通过这个解释器去执行测试文件。
# 2、

配置PHP-CLI(php解释器)

  • 点击PhpStorm->Preferences 我将一步一个截图的进行引导
    image.png
  • 在搜索框里搜索PHP,然后点击后面的 ... 打开CLI Interpreters 配置界面
    image.png
  • 配置PHP-CLI时分两种情况,如果你是本机PHP,那么IDE会扫描并识别PHP-CLI。


    image.png
  • 但是我本机为了环境搭建省力,用的是docker 环境,所以还需要添加一个新的docker 解释器,如果你用的是本机PHP那么忽略这里即可,点击小加号,然后选择From Docker, Vagrant ...
    image.png
  • 选择对应的Server 名称,系统会自动识别出Image name,其实自己重新选Image name 也是可以的,之后点击OK
    image.png
  • 这时候回到CLI Interpreters的配置页面就可以选择docker 镜像作为CLI解释器了,然后点击OK保存即可。
    image.png
  • 保存后回到PHP的配置信息页面,我有必要做个原理上的基本解释,以免后面一脸懵逼,非docker解释器的可以略过,作为docker 解释器的来说,当解释器执行的时候实际上会生成一个临时的docker 容器,会将项目根目录examing-backend挂载到容器的/opt/project下面,也就是说后面引用的文件位置都会是/opt/project,明白了么?
    image.png

配置Test frameworks(测试框架)

  • 首先在配置搜索框里搜索test,然后点击 Test Frameworks,点击右侧内容栏的加号,然后点击PHPUnit by Remote Interpreter
    image.png
  • 在弹出的Interpreter选择器重,选择刚刚加入的docker镜像


    image.png
  • PHPUnit library大多情况下都应该可以被自动识别,但是我的并没有,不过别着急。
    image.png
  • 基于上面对于docker - cli,就可以推断出 autoload.php 的位置在 /opt/project/vendor/autoload.php,所以在Path to script后面直接填入/opt/project/vendor/autoload.php 然后点击后面的刷新,如下图表示设置成功,然后点击OK关闭窗口。
    image.png

运行测试

  • 在项目test目录上右击,选择菜单中的Run 'tests' (PHPUnit)
    image.png
  • 此时可以看到测试已经运行成功了,后面的No application encryption key has been specified. 是因为没有配置 .env文件的原因。
    image.png
  • 创建.env文件, cp .env.example .env 然后通过 php artisan key:generate 可以生成一个APP_KEY
  • 然后重新运行测试,发现一切正常了,这样的话就可以开始你的TDD的开发了。


    image.png

配置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,页面打开正常说明配置成功。
    image.png

配置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,让其启动一个 19001Xdebug监听端口。

  • 然后点击IDE的Preferences设置,搜索Debug,我们对本地监听端口进行一个简单的设置,Debug Port 设置填写 19001

  • image.png
  • 这次直接在调试器选择矿中点击后面的倒三角,然后在下拉的列表中选择 Edit Configurations ...

    image.png

  • 在弹出的对话框中点击左侧小加号添加一个调试工具


    image.png
  • 随后选择PHP Remote Debug

    image.png

  • 弹出的对话框中输入运行配置名称为7015-XDebug,选择Server时,发现并没有服务器列表,点击后面的...添加一个新的

    image.png

  • 服务器名字输入: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
image.png
  • 保存后又回到之前的Run/Debug Configurations的窗口中,IDE key 窗口填写PHPSTORM,也就是xdebug配置文件中配置项对应的值,一切搞定后点击OK关闭对话框回到IDE主界面中。

  • 保存后回到IDE主界面中,点击IDE 上方的小电话图标,让其变成连线状态,这时候本地应该会启动一个19001的端口监听。


    image.png
  • 在命令行工具里输入 lsof -i:19001,可以看大phpstorm 启动了一个19001的端口来监听XDebug发来的请求。

    image.png

最后一步测试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
image.png

结束

  • 至此完毕,感觉XDebug那块有点乱,不明白的给我私信吧。
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 213,864评论 6 494
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,175评论 3 387
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 159,401评论 0 349
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,170评论 1 286
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,276评论 6 385
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,364评论 1 292
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,401评论 3 412
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,179评论 0 269
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,604评论 1 306
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,902评论 2 328
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,070评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,751评论 4 337
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,380评论 3 319
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,077评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,312评论 1 267
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,924评论 2 365
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,957评论 2 351

推荐阅读更多精彩内容