Traits 用来解决代码复用问题。
通常把 Traits 放在 app/Models/Traits 目录下。
大概框架如下:
1 |
|
完整的 UUID trait 示例:
1 |
|
原文:
https://dcblog.dev/enhancing-laravel-applications-with-traits-a-step-by-step-guide
Traits 用来解决代码复用问题。
通常把 Traits 放在 app/Models/Traits 目录下。
大概框架如下:
1 |
|
完整的 UUID trait 示例:
1 |
|
原文:
https://dcblog.dev/enhancing-laravel-applications-with-traits-a-step-by-step-guide
下面的例子,tags 字段使用 json 格式保存标签,定义属性转换(cast):
1 | class Post extends Model |
保存数据:
1 | $data = [ |
无论查看数据库,还是以接口返回 json 格式的数据,会看到 tags 属性的值类似 \uXXXX ,很不直观。
解决办法,自定义 Cast ,例如:
1 | php artian make:cast ChineseArray |
1 | class ChineseArray implements CastsAttributes |
class Post extends Model
{
...
protected $casts = [
'tags' => ChineseArray::class,
];
}

检查是否为 null 使用 === null 或者 is_null;
检查不为 null 使用 !== null 和 is_set();
empty() 和 isset() 判断数组的键值是否存在
参考:
https://laraveldaily.com/post/php-check-for-empty-values-not-is-null-vs-isset
1 | object FileUtil { |
使用示例:
1 | val localDateTime = LocalDateTime.now() |
参考:
对于比较通用的规范而言,commit 信息为如下格式
1 | <type>[(<scope>)]: (<emoji>) <subject> |
一个完整的 commit 可能长如下的模样
1 | fix(api): 🐛 params type check for GetUser |
对于一个 commit,其至少应该包含 type 和 subject 两部分。
type 可能包含以下几种可能:chore: 构建过程或辅助工具更改ci: CI 相关更改docs: 文档更改feat: 新功能特性fix: 修复 Bugperf: 性能优化refactor: 功能重构(未修复 Bug 或添加功能)release: 发布新版本style: 修改代码样式(缩进、空格、换行、分号)test: 添加测试样例subject 是对于改动的简短描述,用一句话进行概述scope 是改动涉及的范围,如 xx 模块、xx 分层。如果不需要可以省略emoji 与 type 绑定,是固定的 emoji 表情body 是对于改动详细描述,可以使用多行描述breaking changes 用于描述与旧版本不兼容的改动,也可以用来生成更新日志footer 用于描述与 Github 等系统的联动,如关联 issue、PR大部分情况下,手打 commit 并不麻烦。但是对于不同的项目,scope 等信息可能是固定的,通过选择更方便填写(同时避免错误)
因此适当的第三方工具可以有效辅助 commit 填写
比较了相关的项目,推荐使用 commitizen/cz-cli 和 Zhengqbbb/cz-git 组合使用(其他工具在涉及换行等需要时,可能存在问题)

安装依赖于 npm
1 | npm install -g cz-git commitizen |
安装完成后还需要在用户目录添加配置文件 ~/.czrc
如果对于不同的项目,需要添加不同的配置,也可以在项目目录中进行配置(详见官方文档)
1 | { |
而后,使用 git cz 替代 git commit 即可
转自:https://www.ohyee.cc/post/note_git_commit
参考:
https://xie.infoq.cn/article/dffa8c4efd68796bc526639ee
想要 vscode 使用方便,就得安装插件 😄

如果你想在vscode中进行PHP开发,这是一个非常需要的扩展。为您提供适当的自动完成、错误提示、转到类型定义,提供基于文档注释的自动完成等。它还为您提供WordPress代码完成,但默认情况下未启用。

另一个所需的扩展。它将为您提供更好的视图、验证规则、ENV、配置等自动完成功能。


我发现定期为类和函数编写文档很好。要使PHPDoc生成器生成PHPDoc块,请将光标放置在具有类、方法或特性的行上,然后按Control+Enter 键。

保存后会自动格式化 blade 文件。

Laravel blade 文件的一些重要片段。例如,b:foreach 将设置 foreach 循环块,b:if-else 将设置 if-else 条件块。有关更多片段,您可以阅读扩展的详细信息。

.env 文件高亮显示

可帮助您从文件、测试范围和全局运行 pest 测试。
键盘快捷键设置示例:
1 | { |

provides some snippets for quickly writing pest related common block of codes.
:pte to access all test() snippets.
:pti to access all it() snippets.
:pex to access the available expect() methods.
参考:
https://script-jungle.com/setup-vscode-for-laravel-development
https://dhanar98.hashnode.dev/best-laravel-dev-tools-for-faster-development-2024
https://alemsbaja.hashnode.dev/recommended-visual-studio-code-extensions-for-laravel-developers
运行 npm run dev 出现如下错误:
1 | dev |
在网上一直搜 SyntaxError: Unexpected token 'export' 的解决办法,最终发现 Warning: To load an ES module, set "type": "module" in the package.json or use the .mjs extension. 这句才是重点,在 package.json 中添加:
1 | { |
1 |
|
1 |
|
这意味着您可以与枚举实例交互,而不仅仅是与数据库中的字符串值交互,还可以访问enums方法。我们稍后再谈。
对这句话这意味着您可以与枚举实例交互,而不仅仅是与数据库中的字符串值交互的示例:
1 | $profile = new SocialProfile() |
如果不这么做,那么代码则要这么写:
1 | $profile = new SocialProfile() |
1 | use App\Enums\SocialNetwork; |
除了定义选项外,枚举还允许使用其他方法。您甚至可以在方法中使用枚举。
我想要一种存储每个枚举选项的有效域名的方法,所以我创建了一个使用枚举值的匹配语句,并返回了一个有效域名数组。
1 |
|
另一个有用的地方是,如果我将来需要添加一个新的社交网络,我只有一个地方可以添加定义和域。我可以很容易地在枚举中添加 Instagram 作为选项,无论我在哪里使用枚举,代码都应该更新。
1 |
|
1 | use Illuminate\Support\Str; |
原文 Using PHP Enums in Laravel to store additional information
标题可能有点绕,比如微博首页的消息流,每条消息最多显示5条热门评论,Laravel 关联查询如何实现?
1 | $limit = 5; |
1 | select |
1 | $highestRatedCommentIds = $users->pluck('highest_rated_comment_ids') |
1 | foreach ($users as $user) { |
LIMITing Loaded Relationship Records While Avoiding N+1 in Laravel
1 | php artisan make:command CreateUserCommand |
1 |
|
按照 $signature 中的定义传入参数:
1 | php artisan create:user admin admin@example.com password123 --admin |
还可以不传参数,通过命令行提示完成:
1 | php artisan create:user |

参考:https://laracoding.com/adding-a-custom-artisan-command-with-optional-arguments/