Skip to content
全部文档

贡献指南

缺陷报告

为鼓励积极协作,Laravel 强烈建议通过 pull request 贡献,而不仅仅是缺陷报告。只有标记为「ready for review」(非「draft」状态),且新功能相关测试全部通过的 pull request 才会被审阅。长期停留在「draft」且无活动的 PR 会在数日后关闭。

不过,若提交缺陷报告,issue 应包含标题与清晰的问题描述。还应尽可能提供相关信息,以及能复现问题的代码示例。缺陷报告的目标是让你自己——以及其他人——容易复现缺陷并开发修复。

请记住,创建缺陷报告是希望遇到相同问题的人能与你一起协作解决。不要期望报告会自动产生任何进展,或他人会立刻动手修复。创建报告是为了帮助你自己和他人走上修复之路。若想参与,可以帮忙修复我们 issue 跟踪器中列出的缺陷。必须登录 GitHub 才能查看全部 Laravel issue。

若在使用 Laravel 时发现不当的 DocBlock、PHPStan 或 IDE 警告,请不要创建 GitHub issue,而是提交 pull request 修复。

Laravel 源代码托管在 GitHub 上,各 Laravel 项目均有对应仓库:

  • [Laravel Application](https://github.com/laravel/laravel)
  • [Laravel Art](https://github.com/laravel/art)
  • [Laravel Breeze](https://github.com/laravel/breeze)
  • [Laravel Documentation](https://github.com/laravel/docs)
  • Laravel Dusk
  • [Laravel Cashier Stripe](https://github.com/laravel/cashier)
  • [Laravel Cashier Paddle](https://github.com/laravel/cashier-paddle)
  • [Laravel Echo](https://github.com/laravel/echo)
  • Laravel Envoy
  • Laravel Folio
  • [Laravel Framework](https://github.com/laravel/framework)
  • [Laravel Homestead](https://github.com/laravel/homestead) ([Build Scripts](https://github.com/laravel/settler))
  • Laravel Horizon
  • [Laravel Jetstream](https://github.com/laravel/jetstream)
  • Laravel Passport
  • Laravel Pennant
  • Laravel Pint
  • [Laravel Prompts](https://github.com/laravel/prompts)
  • Laravel Reverb
  • Laravel Sail
  • Laravel Sanctum
  • Laravel Scout
  • Laravel Socialite
  • Laravel Telescope
  • [Laravel Website](https://github.com/laravel/laravel.com)

支持问题

Laravel 的 GitHub issue 跟踪器不用于提供帮助或支持。请改用下列渠道之一:

  • [GitHub Discussions](https://github.com/laravel/framework/discussions)
  • [Laracasts Forums](https://laracasts.com/discuss)
  • [Laravel.io Forums](https://laravel.io/forum)
  • [StackOverflow](https://stackoverflow.com/questions/tagged/laravel)
  • [Discord](https://discord.gg/laravel)
  • [Larachat](https://larachat.co)
  • [IRC](https://web.libera.chat/?nick=artisan&channels=#laravel)

核心开发讨论

你可以在 Laravel 框架仓库的 GitHub discussion 中提议新功能或改进现有行为。若提议新功能,请愿意至少实现完成该功能所需的部分代码。

关于缺陷、新功能以及现有功能实现的非正式讨论,在 Laravel Discord#internals 频道进行。Laravel 维护者 Taylor Otwell 通常在工作日上午 8 点至下午 5 点(UTC-06:00 或 America/Chicago)在线,其他时间也会偶尔出现。

应提交到哪个分支?

所有缺陷修复应提交到仍提供缺陷修复的最新版本(当前为 11.x)。缺陷修复绝不应提交到 master 分支,除非修复的是仅存在于即将发布版本中的功能。

与当前发行版完全向后兼容次要功能,可提交到最新稳定分支(当前为 12.x)。

重大新功能或包含破坏性变更的功能,应始终提交到包含即将发布版本的 master 分支。

编译后的资源

若提交的变更会影响编译文件(例如 laravel/laravel 仓库中 resources/cssresources/js 的大多数文件),请不要提交编译产物。因其体积过大,维护者实际上无法审阅。这可能被利用来向 Laravel 注入恶意代码。为防御此类风险,所有编译文件将由 Laravel 维护者生成并提交。

安全漏洞

若发现 Laravel 中的安全漏洞,请发送邮件给 Taylor Otwell:taylor@laravel.com。所有安全漏洞都会得到及时处理。

编码风格

Laravel 遵循 PSR-2 编码标准与 PSR-4 自动加载标准。

PHPDoc

下面是有效的 Laravel 文档块示例。注意 @param 属性后跟两个空格、参数类型、再两个空格,最后是变量名:

php
/**
 * Register a binding with the container.
 *
 * @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 变得多余时,可以移除它们:

php
/**
 * Execute the job.
 */
public function handle(AudioProcessor $processor): void
{
    //
}

不过,当原生类型是泛型时,请通过 @param@return 属性标明泛型类型:

php
/**
 * Get the attachments for the message.
 *
 * @return array<int, \Illuminate\Mail\Mailables\Attachment>
 */
public function attachments(): array
{
    return [
        Attachment::fromStorage('/path/to/file'),
    ];
}

StyleCI

不必担心代码风格不够完美!StyleCI 会在 pull request 合并后自动将风格修复合并进 Laravel 仓库。这样我们就能专注于贡献内容,而不是代码风格。

行为准则

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

  • 参与者应对相反观点保持宽容。
  • 参与者必须确保其言行不含人身攻击或贬低性个人评价。
  • 在解读他人言行时,参与者应始终假定对方出于善意。
  • 可合理认定为骚扰的行为将不被容忍。