laravel
1. 序言
贡献指南

错误报告

为鼓励积极合作,Laravel 强烈鼓励提交拉取请求,而不仅仅是错误报告。只有当拉取请求被标记为“准备好审核”(而不是处于“草稿”状态)且所有新功能的测试都通过时,才会进行审核。处于“草稿”状态且长时间未活跃的拉取请求将在几天后被关闭。

然而,如果您提交错误报告,您的问题应包含标题和对问题的清晰描述。您还应包含尽可能多的相关信息以及展示该问题的代码示例。错误报告的目标是使您自己和其他人能够轻松地重现该错误并开发修复方案。

请记住,创建错误报告是希望其他有相同问题的人能够与您合作解决问题。不要期望错误报告会自动引起任何活动或其他人会立即修复它。创建错误报告有助于您自己和其他人开始解决问题的道路。如果您想帮忙,可以通过修复我们的问题跟踪器中列出的任何错误 (opens in a new tab)来提供帮助。您必须使用 GitHub 进行身份验证才能查看 Laravel 的所有问题。

如果您在使用 Laravel 时注意到不正确的 DocBlock、PHPStan 或 IDE 警告,请不要创建 GitHub 问题。相反,请提交拉取请求来解决该问题。

Laravel 的源代码在 GitHub 上进行管理,并且每个 Laravel 项目都有相应的存储库:

## 支持问题

Laravel 的 GitHub 问题跟踪器并非用于提供 Laravel 的帮助或支持。相反,请使用以下渠道之一:

核心开发讨论

您可以在 Laravel 框架仓库的GitHub 讨论板 (opens in a new tab)中提议新功能或改进现有 Laravel 行为。如果您提议一个新功能,请愿意至少实现完成该功能所需的部分代码。

关于错误、新功能和现有功能实现的非正式讨论在Laravel Discord 服务器 (opens in a new tab)的“#internals”频道中进行。Laravel 的维护者 Taylor Otwell 通常在工作日的上午 8 点至下午 5 点(UTC - 06:00 或 America/Chicago)出现在该频道中,其他时间也会偶尔出现。

选择哪个分支?

所有错误修复应发送到支持错误修复的最新版本(当前为10.x)。除非错误修复是针对仅存在于即将发布版本中的功能,否则绝不应发送到master分支。

功能,如果与当前版本完全向后兼容,可以发送到最新的稳定分支(当前为11.x)。

主要新功能或具有破坏性更改的功能应始终发送到master分支,该分支包含即将发布的版本。

编译资产

如果您提交的更改将影响编译文件,例如laravel/laravel仓库的resources/cssresources/js中的大多数文件,请勿提交编译后的文件。由于其文件较大,维护人员实际上无法对其进行审查。这可能会被利用作为向 Laravel 注入恶意代码的一种方式。为了预防性地防止这种情况,所有编译文件将由 Laravel 维护人员生成并提交。

安全漏洞

如果您在 Laravel 中发现安全漏洞,请发送电子邮件至 Taylor Otwell 的 taylor@laravel.com。所有安全漏洞将得到及时处理。

编码风格

Laravel 遵循 [PSR - 2](https://github.com/php-fig/fig-standards/blob/master/accepted/PSR (opens in a new tab) - 2 - coding - style - guide.md) 编码标准和 [PSR - 4](https://github.com/php-fig/fig-standards/blob/master/accepted/PSR (opens in a new tab) - 4 - autoloader.md) 自动加载标准。

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 (opens in a new tab) 将在拉取请求合并后,自动将任何样式修复合并到 Laravel 存储库中。这使我们能够专注于贡献的内容,而不是代码风格。

行为准则

Laravel 的行为准则源自 Ruby 的行为准则。任何违反行为准则的行为都可以报告给 Taylor Otwell(taylor@laravel.com):

  • 参与者将对相反的观点持宽容态度。
  • 参与者必须确保他们的语言和行为没有人身攻击和贬低个人的言论。
  • 在解释他人的言行时,参与者应始终假定其出于善意。
  • 任何可以合理地被认为是骚扰的行为都不会被容忍。