贡献指南
错误报告
为了鼓励积极协作,Laravel 强烈鼓励拉取请求,而不仅仅是错误报告。只有当拉取请求被标记为“准备好审查”(而不是“草稿”状态)并且所有新功能的测试都通过时,才会对其进行审查。在“草稿”状态下留下来的、非活动的、长期未处理的拉取请求将在几天后被关闭。
但是,如果您提交错误报告,您的问题应包含标题和对问题的清晰描述。您还应该包含尽可能多的相关信息以及一个演示该问题的代码示例。错误报告的目标是让您自己以及其他人能够轻松地重现错误并开发修复程序。
请记住,创建错误报告是希望遇到同样问题的其他人能够与您合作解决问题。不要期望错误报告会自动看到任何活动或其他人会立即着手修复它。创建错误报告有助于您和他人开始修复问题的道路。如果您想出一份力,可以通过修复我们问题跟踪器中列出的任何错误来提供帮助。您必须通过 GitHub 身份验证才能查看 Laravel 的所有问题。
如果您在使用 Laravel 时发现不正确的 DocBlock、PHPStan 或 IDE 警告,请不要创建 GitHub issue。相反,请提交拉取请求来修复该问题。
Laravel 源代码在 GitHub 上管理,并且每个 Laravel 项目都有相应的仓库:
- Laravel Application
- Laravel Art
- Laravel Documentation
- Laravel Dusk
- Laravel Cashier Stripe
- Laravel Cashier Paddle
- Laravel Echo
- Laravel Envoy
- Laravel Folio
- Laravel Framework
- Laravel Homestead(构建脚本)
- Laravel Horizon
- Laravel Livewire Starter Kit
- Laravel Passport
- Laravel Pennant
- Laravel Pint
- Laravel Prompts
- Laravel React Starter Kit
- Laravel Reverb
- Laravel Sail
- Laravel Sanctum
- Laravel Scout
- Laravel Socialite
- Laravel Telescope
- Laravel Vue Starter Kit
支持问题
Laravel 的 GitHub 问题跟踪器无意提供 Laravel 帮助或支持。相反,请使用以下渠道之一:
- GitHub Discussions
- Laracasts Forums
- Laravel.io Forums
- StackOverflow
- Discord
- Larachat
- IRC
核心开发讨论
您可以在 Laravel 框架仓库的 GitHub 讨论区 中提出新功能或改进现有 Laravel 行为的建议。如果您提出新功能,请愿意实现完成该功能所需的部分代码。
关于错误、新功能和现有功能实现的非正式讨论在 Laravel Discord 服务器 的 #internals 频道中进行。Laravel 的维护者 Taylor Otwell 通常在工作日的上午 8 点至下午 5 点(UTC-06:00 或 America/Chicago)出现在该频道,在其他时间偶尔出现。
哪个分支?
所有错误修复都应发送到支持错误修复的最新版本(目前是 12.x)。错误修复绝不应发送到 master 分支,除非它们修复了仅在即将发布的版本中存在的功能。
与当前版本完全向后兼容的次要功能可以发送到最新的稳定分支(目前是 12.x)。
主要新功能或包含破坏性更改的功能应始终发送到包含即将发布的版本的 master 分支。
已编译的资产
如果您正在提交会影响已编译文件的更改,例如 laravel/laravel 仓库中 resources/css 或 resources/js 的大部分文件,请不要提交已编译的文件。由于它们的体积庞大,维护者无法实际审查它们。这可能被利用作为向 Laravel 注入恶意代码的方式。为了防御性地防止这种情况,所有已编译的文件将由 Laravel 维护者生成和提交。
安全漏洞
如果您在 Laravel 中发现安全漏洞,请发送电子邮件至 Taylor Otwell 的邮箱 taylor@laravel.com。所有安全漏洞都将得到及时处理。
编码风格
Laravel 遵循 PSR-2 编码标准和 PSR-4 自动加载标准。
PHPDoc
以下是有效的 Laravel 文档块示例。请注意,@param 属性后面是两个空格,参数类型,再两个空格,最后是变量名:
/**
* 向容器注册绑定。
*
* @param string|array $abstract
* @param \Closure|string|null $concrete
* @param bool $shared
* @return void
*
* @throws \Exception
*/
public function bind($abstract, $concrete = null, $shared = false)
{
// ...
}
当由于使用原生类型而导致 @param 或 @return 属性冗余时,可以将其删除:
/**
* 执行该作业。
*/
public function handle(AudioProcessor $processor): void
{
//
}
但是,当原生类型是通用的时,请使用 @param 或 @return 属性指定泛型类型:
/**
* 获取消息的附件。
*
* @return array<int, \Illuminate\Mail\Mailables\Attachment>
*/
public function attachments(): array
{
return [
Attachment::fromStorage('/path/to/file'),
];
}
StyleCI
如果您的代码风格不完美,请不要担心!StyleCI 将在拉取请求合并后自动将任何风格修复合并到 Laravel 仓库中。这使我们能够专注于贡献的内容而不是代码风格。
行为准则
Laravel 行为准则源自 Ruby 行为准则。任何违反行为准则的行为都可报告给 Taylor Otwell (taylor@laravel.com):
- 参与者将容忍对立观点。
- 参与者必须确保其言语和行为不包含人身攻击和贬低性言论。
- 在解释他人的言语和行为时,参与者应始终假设善意。
- 任何可以合理地被视为骚扰的行为都将不被容忍。