cakedc / cakephp-phpstan
CakePHP插件扩展用于PHPStan。
Requires
- php: >=8.1.0
- cakephp/cakephp: ^5.0
- phpstan/phpstan: ^1.10
Requires (Dev)
- cakephp/cakephp-codesniffer: ^5.0
- phpstan/phpstan-phpunit: ^1.0
- phpunit/phpunit: ^10.1
- symplify/phpstan-rules: ^12.4
This package is auto-updated.
Last update: 2024-08-28 19:27:11 UTC
README
为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
通用类加载|获取扩展
包含的功能
- 为
Cake\ORM\Locator\LocatorInterface::get()
提供正确的返回类型 - 为
Cake\Controller\Controller::loadComponent()
提供正确的返回类型 - 为
Cake\Controller\Controller::fetchTable()
提供正确的返回类型 - 为
Cake\Controller\Component::fetchTable()
提供正确的返回类型 - 为
Cake\Command\Command::fetchTable()
提供正确的返回类型 - 为
Cake\Mailer\Mailer::fetchTable()
提供正确的返回类型 - 为
Cake\View\Cell::fetchTable()
提供正确的返回类型 - 为
Cake\Console\ConsoleIo::helper()
提供正确的返回类型
表类返回类型扩展
TableEntityDynamicReturnTypeExtension
- 根据您的表类名称为
Cake\ORM\Table::get
提供正确的返回类型 - 根据您的表类名称为
Cake\ORM\Table::newEntity
提供正确的返回类型 - 根据您的表类名称为
Cake\ORM\Table::newEntities
提供正确的返回类型 - 根据您的表类名称为
Cake\ORM\Table::newEmptyEntity
提供正确的返回类型 - 根据您的表类名称为
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
- 根据传递的第一个参数为
Cake\ORM\Table::patchEntity
提供正确的返回类型 - 根据传递的第一个参数为
Cake\ORM\Table::patchEntities
提供正确的返回类型 - 根据传递的第一个参数为
Cake\ORM\Table::save
提供正确的返回类型 - 根据传递的第一个参数为
Cake\ORM\Table::saveOrFail
提供正确的返回类型 - 根据传递的第一个参数为
Cake\ORM\Table::saveMany
提供正确的返回类型 - 根据传递的第一个参数为
Cake\ORM\Table::saveManyOrFail
提供正确的返回类型 - 根据传递的第一个参数为
Cake\ORM\Table::deleteMany
提供正确的返回类型 - 根据传递的第一个参数为
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 轻松更新注解。
支持
有关错误和功能请求,请使用此存储库的 问题 部分。
还提供商业支持,有关更多信息,请 联系我们。
贡献
如果您想为此插件贡献新功能、改进或错误修复,请阅读我们的 贡献指南 以获取详细说明。