cakedc/cakephp-phpstan

CakePHP插件扩展用于PHPStan。

安装数: 306,219

依赖关系: 17

建议者: 0

安全: 0

星标: 30

关注者: 15

分支: 5

开放问题: 2

类型:phpstan-extension

3.1.2 2024-02-27 16:33 UTC

This package is auto-updated.

Last update: 2024-08-28 19:27:11 UTC


README

Build Status Downloads Latest Version License

为CakePHP应用程序提供服务和规则以进行更好的PHPStan分析,包括用于解决类型(Table、Helpers、Behaviors等)和多个规则的服务的功能。

安装

要使用此扩展,通过Composer引入它

composer require --dev cakedc/cakephp-phpstan

如果您还安装了phpstan/extension-installer,那么您就准备好了!

手动安装

如果您不想使用phpstan/extension-installer,请将extension.neon包含在您的项目PHPStan配置中

includes:
    - vendor/cakedc/cakephp-phpstan/extension.neon

通用类加载|获取扩展

包含的功能

  1. Cake\ORM\Locator\LocatorInterface::get()提供正确的返回类型
  2. Cake\Controller\Controller::loadComponent()提供正确的返回类型
  3. Cake\Controller\Controller::fetchTable()提供正确的返回类型
  4. Cake\Controller\Component::fetchTable()提供正确的返回类型
  5. Cake\Command\Command::fetchTable()提供正确的返回类型
  6. Cake\Mailer\Mailer::fetchTable()提供正确的返回类型
  7. Cake\View\Cell::fetchTable()提供正确的返回类型
  8. Cake\Console\ConsoleIo::helper()提供正确的返回类型

表类返回类型扩展

TableEntityDynamicReturnTypeExtension

  1. 根据您的表类名称为Cake\ORM\Table::get提供正确的返回类型
  2. 根据您的表类名称为Cake\ORM\Table::newEntity提供正确的返回类型
  3. 根据您的表类名称为Cake\ORM\Table::newEntities提供正确的返回类型
  4. 根据您的表类名称为Cake\ORM\Table::newEmptyEntity提供正确的返回类型
  5. 根据您的表类名称为Cake\ORM\Table::findOrCreate提供正确的返回类型
示例
  //Now PHPStan know that \App\Models\Table\NotesTable::get returns \App\Model\Entity\Note
  $note = $this->Notes->get(1);
  $note->note = 'My new note';//No error

  //Now PHPStan know that \App\Models\Table\NotesTable::newEntity returns \App\Model\Entity\Note
  $note = $this->Notes->newEntity($data);
  $note->note = 'My new note new entity';//No error

  //Now PHPStan know that \App\Models\Table\NotesTable::newEmptyEntity returns \App\Model\Entity\Note
  $note = $this->Notes->newEmptyEntity($data);
  $note->note = 'My new note new empty entity';//No error

   //Now PHPStan know that \App\Models\Table\NotesTable::findOrCreate returns \App\Model\Entity\Note
  $note = $this->Notes->findOrCreate($data);
  $note->note = 'My entity found or created';//No error

  //Now PHPStan know that \App\Models\Table\NotesTable::newEntities returns \App\Model\Entity\Note[]
  $notes = $this->Notes->newEntities($data);
  foreach ($notes as $note) {
    $note->note = 'My new note';//No error
  }

TableFirstArgIsTheReturnTypeExtension

  1. 根据传递的第一个参数为Cake\ORM\Table::patchEntity提供正确的返回类型
  2. 根据传递的第一个参数为Cake\ORM\Table::patchEntities提供正确的返回类型
  3. 根据传递的第一个参数为Cake\ORM\Table::save提供正确的返回类型
  4. 根据传递的第一个参数为Cake\ORM\Table::saveOrFail提供正确的返回类型
  5. 根据传递的第一个参数为Cake\ORM\Table::saveMany提供正确的返回类型
  6. 根据传递的第一个参数为Cake\ORM\Table::saveManyOrFail提供正确的返回类型
  7. 根据传递的第一个参数为Cake\ORM\Table::deleteMany提供正确的返回类型
  8. 根据传递的第一个参数为Cake\ORM\Table::deleteManyOrFail提供正确的返回类型
示例
  //Now PHPStan know that \App\Models\Table\NotesTable::get returns \App\Model\Entity\Note
  $note = $this->Notes->get(1);
  $notes = $this->Notes->newEntities($data);

  //Since PHPStan knows the type of $note, these methods call use the same type as return type:
  $note = $this->Notes->patchEntity($note, $data);
  $text = $note->note;//No error.

  $note = $this->Notes->save($note);
  $text = $note->note;//No error.

  $note = $this->Notes->saveOrFail($note);
  $text = $note->note;//No error.
  //Since PHPStan knows the type of $notes, these methods call use the same type as return type:
  $notes = $this->Notes->patchEntities($notes);
  $notes = $this->Notes->saveMany($notes);
  $notes = $this->Notes->saveManyOrFail($notes);
  $notes = $this->Notes->deleteMany($notes);
  $notes = $this->Notes->deleteManyOrFail($notes);

规则

此库提供的所有规则都包含在rules.neon中,默认启用

AddAssociationExistsTableClassRule

此规则检查在调用Table::belongsTo、Table::hasMany、Table::belongsToMany、Table::hasOne和AssociationCollection::load时,目标关联是否具有有效的表类。

AddAssociationMatchOptionsTypesRule

此规则检查关联选项是否是有效的选项类型,基于每个类期望的类型。这涵盖了调用Table::belongsTo、Table::hasMany、Table::belongsToMany、Table::hasOne和AssociationCollection::load。

AddBehaviorExistsClassRule

该规则检查在调用 Table::addBehavior 和 BehaviorRegistry::load 时,目标行为是否有有效的表格类。

OrmSelectQueryFindMatchOptionsTypesRule

该规则检查传递给 Table::find 和 SelectQuery 的选项(参数)是否为有效的查找选项类型。

TableGetMatchOptionsTypesRule

该规则检查传递给 Table::get 的选项(参数)是否为有效的查找选项类型。

如何禁用规则

每个规则在 cakeDC 的 'namespace' 参数中都有一个用于启用或禁用的参数,其名称与规则名称相同,首字母小写。例如,要禁用 AddAssociationExistsTableClassRule 规则,您应该有

parameters:
	cakeDC:
	 	addAssociationExistsTableClassRule: false

PHPDoc 扩展

TableAssociationTypeNodeResolverExtension

修复交集关联的 phpDoc,以正确设置泛型对象类型,例如

\Cake\ORM\Association\BelongsTo&\App\Model\Table\UsersTable 更改为 \Cake\ORM\Association\BelongsTo<\App\Model\Table\UsersTable>

提示

为了使您的生活更轻松,请确保在您的表类中使用 @mixin@method 注解。`@mixin` 注解将帮助 phpstan 了解您正在使用行为中的方法,而 `@method` 注解将允许它知道像 Table::get()Table::newEntity() 这样的方法的正确返回类型。

您可以使用插件 IdeHelper 轻松更新注解。

支持

有关错误和功能请求,请使用此存储库的 问题 部分。

还提供商业支持,有关更多信息,请 联系我们

贡献

如果您想为此插件贡献新功能、改进或错误修复,请阅读我们的 贡献指南 以获取详细说明。