<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[大白菜]]></title><description><![CDATA[理论实践通吃，我要做全能的PHPer]]></description><link>https://blog.youkuaiyun.com/DBCai</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; DBCai]]></copyright><item><title><![CDATA[Dcat-admin 多级联动]]></title><link>https://blog.youkuaiyun.com/DBCai/article/details/129614829</link><guid>https://blog.youkuaiyun.com/DBCai/article/details/129614829</guid><author>DBCai</author><pubDate>Mon, 08 May 2023 11:11:45 +0800</pubDate><description><![CDATA[Dcat-admin 多级联动]]></description><category></category></item><item><title><![CDATA[导出宝塔MySQL数据库到Docker容器]]></title><link>https://blog.youkuaiyun.com/DBCai/article/details/130353339</link><guid>https://blog.youkuaiyun.com/DBCai/article/details/130353339</guid><author>DBCai</author><pubDate>Mon, 24 Apr 2023 22:22:22 +0800</pubDate><description><![CDATA[导出宝塔MySQL数据库到Docker容器]]></description><category></category></item><item><title><![CDATA[Dcat-admin 重写底部版权内容]]></title><link>https://blog.youkuaiyun.com/DBCai/article/details/130302670</link><guid>https://blog.youkuaiyun.com/DBCai/article/details/130302670</guid><author>DBCai</author><pubDate>Sat, 22 Apr 2023 12:02:09 +0800</pubDate><description><![CDATA[Dcat-admin 重写底部版权内容。]]></description><category></category></item><item><title><![CDATA[deployer 发布代码，提示文件权限问题]]></title><link>https://blog.youkuaiyun.com/DBCai/article/details/130059464</link><guid>https://blog.youkuaiyun.com/DBCai/article/details/130059464</guid><author>DBCai</author><pubDate>Mon, 10 Apr 2023 14:51:02 +0800</pubDate><description><![CDATA[使用 deployer 发布代码，发布的时候一直报权限错误]]></description><category></category></item><item><title><![CDATA[我与随机红包算法的故事]]></title><link>https://blog.youkuaiyun.com/DBCai/article/details/126385273</link><guid>https://blog.youkuaiyun.com/DBCai/article/details/126385273</guid><author>DBCai</author><pubDate>Wed, 17 Aug 2022 16:45:00 +0800</pubDate><description><![CDATA[我与随机红包算法的故事]]></description><category></category></item><item><title><![CDATA[业务表解析-余额系统]]></title><link>https://blog.youkuaiyun.com/DBCai/article/details/125971868</link><guid>https://blog.youkuaiyun.com/DBCai/article/details/125971868</guid><author>DBCai</author><pubDate>Mon, 25 Jul 2022 17:13:05 +0800</pubDate><description><![CDATA[业务表解析-余额系统]]></description><category></category></item><item><title><![CDATA[laradock 环境下，PHP 该如何实现本地域名通信啊？]]></title><link>https://blog.youkuaiyun.com/DBCai/article/details/124258635</link><guid>https://blog.youkuaiyun.com/DBCai/article/details/124258635</guid><author>DBCai</author><pubDate>Tue, 19 Apr 2022 00:58:26 +0800</pubDate><description><![CDATA[laradock 环境下，PHP 该如何实现本地域名通信啊？
知识背景：

windows 下使用 laradock 作为开发环境
使用 phpstrom IDE，并且通过 ssh 的方式连接 workspace 来实现了单元测试
有两个本地域名 a.test 、b.test，在宿主机均可访问（大前提）
但是但是但是，在项目中却无法使用 curl 来相互访问，着实令人抓狂
为了探索答案，梳理知识的过程，顿悟了以下知识，希望对你们也有所帮助

阅读收获：

梳理 laradock 环境下， php-fpm、c]]></description><category></category></item><item><title><![CDATA[查看 Windows 端口被占用情况]]></title><link>https://blog.youkuaiyun.com/DBCai/article/details/123443122</link><guid>https://blog.youkuaiyun.com/DBCai/article/details/123443122</guid><author>DBCai</author><pubDate>Sat, 12 Mar 2022 14:35:41 +0800</pubDate><description><![CDATA[查看 Windows 端口被占用情况]]></description><category></category></item><item><title><![CDATA[phpstrom、laradock、xdebug 进行断点调试]]></title><link>https://blog.youkuaiyun.com/DBCai/article/details/123325911</link><guid>https://blog.youkuaiyun.com/DBCai/article/details/123325911</guid><author>DBCai</author><pubDate>Tue, 08 Mar 2022 18:38:37 +0800</pubDate><description><![CDATA[phpstrom、laradock、xdebug 进行断点调试
背景：

laravel 框架封装太完善，经常搞不明白究竟用的是哪个类
复杂一点的算法，使用 dd方法调试时，需要疯狂dd，显得过于鸡肋

调试流程：
1、发请求、跑调试代码
2、安装 xdebug  扩展的 PHP 检查是否有预期参数，有就交给 xdebug 处理
3、xdebug 模块根据配置去链接指定主机的特定端口
4、然后就开始快乐的调试
我们要做的：
1、确定自己需要执行的  PHP  模式，如 cli，php-fpm，或者两者都要
]]></description><category></category></item><item><title><![CDATA[linux :invalid option错误]]></title><link>https://blog.youkuaiyun.com/DBCai/article/details/115364336</link><guid>https://blog.youkuaiyun.com/DBCai/article/details/115364336</guid><author>DBCai</author><pubDate>Wed, 31 Mar 2021 23:58:03 +0800</pubDate><description><![CDATA[linux :invalid option错误
可能原因：

格式不对，可能是在windows系统上编辑了 shell 脚本并保存了

检查办法：

使用 vim 文件并查看输出屏幕的最后一行， 如果存在 [dos] 字眼则说明格式不对

解决思路：

方法一：使用 vim 打开文件，并在命令函模式下 输入 set ff-unix  来实现格式转化 （dos-&gt;unix）
方法二：重新下来原来的文件代替就好了


...]]></description><category></category></item><item><title><![CDATA[Docker 实现容器相互联系]]></title><link>https://blog.youkuaiyun.com/DBCai/article/details/115273778</link><guid>https://blog.youkuaiyun.com/DBCai/article/details/115273778</guid><author>DBCai</author><pubDate>Sat, 27 Mar 2021 23:55:34 +0800</pubDate><description><![CDATA[Docker 实现容器相互联系
写作背景：

由于自己在玩耍 Docker 时，无法分清宿主机端口与容器端口之间的关系，以致于连接失败；最后也是花费大把时间来学习才能搞懂，于是就写下该篇内容记录一下自己的成长

连接关键：

相互连接的容器，需要在相同的网络下。如 docker-compose.yml设置相同的networks值
容器之间的访问，使用容器自己的端口

个人经历：

宿主机通过laradock安装gitlab与jenkins容器。宿主机通过http://localhost:8989正常访问gi]]></description><category></category></item><item><title><![CDATA[PHP 匿名函数]]></title><link>https://blog.youkuaiyun.com/DBCai/article/details/115257562</link><guid>https://blog.youkuaiyun.com/DBCai/article/details/115257562</guid><author>DBCai</author><pubDate>Fri, 26 Mar 2021 23:57:34 +0800</pubDate><description><![CDATA[PHP 匿名函数
它是什么：

匿名函数是一个没有名字的函数，也叫闭包函数

主要作用：

在程序中，经常用来做回调函数callback参数的值
在闭包中的程序在赋值等传递过程时被不会运行

使用示例：

闭包函数的基础代码 function () {}
创建一个带需要传参的闭包函数

$sum = function($a, $b) {
    return $a + $b;
};



创建一个带需要额外传参的闭包函数，使用关键字use 来携带值

$c = 1;
$sum = function($a, ]]></description><category></category></item><item><title><![CDATA[Laravel框架-迁移文件]]></title><link>https://blog.youkuaiyun.com/DBCai/article/details/115221668</link><guid>https://blog.youkuaiyun.com/DBCai/article/details/115221668</guid><author>DBCai</author><pubDate>Thu, 25 Mar 2021 23:55:09 +0800</pubDate><description><![CDATA[Laravel框架-迁移文件
它是什么：

保存在迁移文件目录database\migrations\中的类文件，并且都继承迁移类Illuminate\Database\Migrations\Migration的类。

主要作用：

可以让开发者在代码中实现对数据表结构的增删改能力
对数据库结构起到版本控制的作用

运作原理：



如何使用？

首先就是创建新建数据表的迁移，执行命令php artisan make:migration create_xx_table。如果要为users表创建迁移，那就执行]]></description><category></category></item><item><title><![CDATA[GIT-优雅地回滚错误提交]]></title><link>https://blog.youkuaiyun.com/DBCai/article/details/115190975</link><guid>https://blog.youkuaiyun.com/DBCai/article/details/115190975</guid><author>DBCai</author><pubDate>Wed, 24 Mar 2021 23:55:55 +0800</pubDate><description><![CDATA[GIT-优雅地回滚错误提交
背景：

日常开发中，偶尔会因为粗心而将代码提交到错误的分支上且推送到了远程。虽说这种情况可以通过写清单的方式来避免，但是如果真的遇到了，那该怎么办呢？下面写好了两种应对方式

必备知识：

GIT 有两种回退方式，分别是 git resert 与 gitrevert
git resert  方式，它是向后回退，会导致分支数据丢失
git revert 方式，它是向前回退，分支信息会保留下来

解决原理：

将错误的提交回退到工作区，接着将修改保存 贮藏 起来，最后切换分支并弹出]]></description><category></category></item><item><title><![CDATA[Laravel框架-服务提供者]]></title><link>https://blog.youkuaiyun.com/DBCai/article/details/115152173</link><guid>https://blog.youkuaiyun.com/DBCai/article/details/115152173</guid><author>DBCai</author><pubDate>Tue, 23 Mar 2021 23:56:08 +0800</pubDate><description><![CDATA[Laravel框架-服务提供者
它是什么：

它是一个继承抽象类Illuminate\Support\ ServiceProvider的一个类，类中必须实现register()方法

主要作用：
1.优雅的绑定服务到服务容器上。基于服务提供者的register()方法来实现
使用示例：

...]]></description><category></category></item><item><title><![CDATA[Laravel框架-服务容器]]></title><link>https://blog.youkuaiyun.com/DBCai/article/details/115106009</link><guid>https://blog.youkuaiyun.com/DBCai/article/details/115106009</guid><author>DBCai</author><pubDate>Mon, 22 Mar 2021 23:57:32 +0800</pubDate><description><![CDATA[Laravel 框架-服务容器
背景：

Laravel 框架的服务容器文档，内容过于羞涩难懂，即使我我看了5遍，但是依旧搞不懂个所以然
搜索过相关资料，基本都是教学如何使用的，一直没能找到正确的资料
如今搞懂些许，希望记下来可以帮助更多的人

是什么：

从容器两字，我们能想到的就是装东西的器皿。
加上服务两字，那它就是一个存放各式各样服务的东西了
别想太多，就应该把它理解成那么简单

主要作用：




...]]></description><category></category></item><item><title><![CDATA[PHP设计模式-装饰者模式]]></title><link>https://blog.youkuaiyun.com/DBCai/article/details/115058712</link><guid>https://blog.youkuaiyun.com/DBCai/article/details/115058712</guid><author>DBCai</author><pubDate>Sun, 21 Mar 2021 23:53:50 +0800</pubDate><description><![CDATA[PHP设计模式-装饰者模式
学习背景：

学习 laravel 框架时，发现中间件功能可以即插即用，随意扩展。但又因为其过于灵活，加之没搞明白实现原理，以致于几次工作中碰壁。为搞懂其原理，在揭开其神奇的面纱时，就误打误撞学习了一个新的设计模式，即装饰者模式。

模式介绍：

装饰者模式是在开放—关闭原则下实现动态添加或减少功能的一种方式
装饰类和被装饰类可以独立发展，不会相互耦合，装饰模式是继承的一个替代模式，装饰模式可以动态扩展一个实现类的功能

代码示例：
&lt;?php

interface Mid]]></description><category></category></item><item><title><![CDATA[PHP 后期静态绑定]]></title><link>https://blog.youkuaiyun.com/DBCai/article/details/115037544</link><guid>https://blog.youkuaiyun.com/DBCai/article/details/115037544</guid><author>DBCai</author><pubDate>Sat, 20 Mar 2021 23:58:22 +0800</pubDate><description><![CDATA[PHP的后期静态绑定
理解：

用于在继承范围内引用静态调用的类
后期静态绑定使用关键字 static 来实现
通过这种机制，“static::”不再被解析为定义当前方法所在的类，而是在实际运行时计算得到的，即为运行时最初调用的类


...]]></description><category></category></item><item><title><![CDATA[phpstrom、laradock、phpunit 进行单元测试]]></title><link>https://blog.youkuaiyun.com/DBCai/article/details/115018707</link><guid>https://blog.youkuaiyun.com/DBCai/article/details/115018707</guid><author>DBCai</author><pubDate>Sat, 20 Mar 2021 05:04:51 +0800</pubDate><description><![CDATA[phpstrom、laradock、phpunit 进行单元测试
背景：

环境： windows 系统电脑，laradock 套集成环境，phpstrom开发
容器中的项目与的本地项目为同一路径，这是基于映射机制实现的，日常开发使用 phpstrom(IDE) 直接打开本地的项目进行开发
如今我想实现单元测试，本地修改代码，在IDE中点击运行，就能使用容器中的环境来运行。这想法是可以实现的！！

实现原理：

IDE 中进行单元测试，IDE 会使用 SSH 命令连接到容器（实现方式很多，这里介绍 SSH ]]></description><category></category></item><item><title><![CDATA[Laravel 框架生成模型 property 注释]]></title><link>https://blog.youkuaiyun.com/DBCai/article/details/114994439</link><guid>https://blog.youkuaiyun.com/DBCai/article/details/114994439</guid><author>DBCai</author><pubDate>Fri, 19 Mar 2021 01:28:25 +0800</pubDate><description><![CDATA[Laravel 框架生成模型 property 注释
背景：

在Hyperf框架中使用命令创建模型前，如果数据表存在，就会自动生成 property 注释。有 property 注释的模型，结合 IDE 扩展，就可以实现属性提示功能，开发起来很爽
使用 Laravel框架开发时，却发现没有找到相似功能，但是很想实现类似注释，于是上头大哥就给我推荐了这个

实现原理：

在 laravel框架中创建一个 Artisan命令行
在命令的实现中，通过数据表名来获取结构与字段类型，然后循环字段并根据类型匹配对应的]]></description><category></category></item></channel></rss>