问题标签 [phpstan]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
356 浏览

php - 带有 Doctrine 和 find() 的 PHPStan - 无法解析模板类型 T

我有这个特定的代码:

PHPStan 游乐场在分析后给我一个错误:

第 39 行 - 在调用方法 ObjectManager::find() 时无法解析模板类型 T

游乐场链接:LINK

会使用一些帮助,因为我不知道如何管理这个。预先感谢您的任何帮助!

0 投票
1 回答
308 浏览

cakephp - 带有 PHPStan 的 CakePHP:属性不接受 Cake\ORM\Table

使用一个新的应用程序通过 PHPStan 的级别,我达到了第 3 级,并开始从我的所有模型测试装置中获取错误消息。基本格式如下:

此错误所指的代码是:

此设置代码是使用 cake bake 构建的,所以我不确定它在寻找什么。有其他人知道什么会为我解决这个问题吗?

编辑:我做了一些进一步的搜索。我能找到与此堆栈相关联的唯一版本的 getTableLocator() 函数位于 TableRegistry 类中。该类又具有一个名为 get() 的函数,该函数确实返回了一个 \Cake\Orm\Table 类型的对象:

那么这是否意味着我的测试应该期待 \Cake\ORM\Table 类?TBH,我还没有在测试模型方面做很多事情(你可能已经猜到了),因此我不确定这样做的后果。

0 投票
1 回答
39 浏览

gitlab - 每个分支的 PHPStan 缓存策略

我正在使用 Gitlab 来部署我的代码库。每次,我部署一个分支(实际上一天多次),我的 CI 做以下事情(非常简化):

#1 使用我的分支名称创建一个特定的部署文件夹并在其中克隆整个项目

#2 运行 PHPStan(没有覆盖配置)

因此,默认情况下,我的缓存文件夹设置为/tmp/phpstan. 这个文件夹越来越大。现在,我有一个定期删除文件夹的 cron,但这似乎是一种解决方法......

我可以在 CI/CD 中使用更好的方法来保持合理的/tmp/phpstan文件夹大小并且不破坏缓存的性能吗?

0 投票
1 回答
53 浏览

php - FuelPHP 的 PHPStan 配置

我在让 PHPStan 看到 FuelPHP 核心类时遇到了很多麻烦。看起来这种事情会导致它悲伤:

其中 Controller 也在 Fuel\Core 命名空间中:

看起来 PHPStan 可以找到 Controller,因为它正在根命名空间中查找。FuelPHP 解决了这个问题(魔术?自动加载?别名?)。有没有办法让 PHPStan 加入同一个潮流,或者我是否需要删除我正在使用的所有核心类?

0 投票
1 回答
38 浏览

symfony - 如何使用 customLoginLinkNotification 传递 phpStan?

我正在使用 login_link ( docs ) 来验证忘记密码的用户。
按照文档,我自定义了电子邮件并覆盖了 htmlTemplate 但在现实生活中 phpStan 阻止我说:
Call to an undefined method Symfony\Component\Mime\RawMessage::htmlTemplate().
我正在尝试修复它,但我被卡住了 :(
知道吗?

0 投票
2 回答
1172 浏览

php - PHPStan 忽略错误正则表达式

问题

我最近开始使用 PHPStan 来分析我的Laravel项目的代码,但我一直收到以下错误models

代码

这是触发错误的代码:

mixin是通过运行Laravel IDE-helperphp artisan ide-helper:models -M 所需的命令添加的,顾名思义,该命令将 IDE 的 docblocks 添加到 Laravel 的typehint魔术方法中。

因此,我尝试使用以下代码通过忽略错误来解决此问题:

但不知何故,在 Regexr 测试正则表达式时错误不匹配工作正常。

有什么建议我做错了吗?我注意到他们#在正则表达式的开头和结尾添加的忽略错误文档中,所以我已将其添加到我的 phpstan 配置中,但我不确定这是否是必需的,但如果没有它们,我会收到以下错误(所以我把它们留在里面):

附加信息

我正在使用默认的larastan版本0.7.12扩展。

0 投票
0 回答
45 浏览

php - 解决 Laravel Auth Authenticatable to User 模型解决静态分析问题

我们有一个 Laravel 8 应用程序。

我们使用标准的 LaravelAuth外观来检索经过身份验证的用户

我们的User模型有一些自定义函数,其中最重要的是速记函数,hasPermissionTo(). (原因是因为我们有一个非常自定义的 RBAC 设置。)

所以在我们的很多控制器中,我们都有这样的东西......

在我们开始运行静态分析之前,一切都很好。我们正在使用 Larastan,这给了我这些错误:

这也是有道理的,因为Auth门面代理Illuminate\Auth\AuthManager,并且Auth::user()通过__call()魔法,通常会解析为Illuminate\Auth\SessionGuard::user()并且类型提示这个......

所以最后,我的问题:

这里的失败在哪里?我是否需要 a) 更好地配置我的静态分析工具,b) 更好地配置 Laravel 以更准确地返回特定类型,或者 c) 我是否需要在if (Auth::user() instanceof User) { ... }整个代码中添加显式子句?

是否有一种正确的方法可以用我自己的更具体的一个来覆盖 Laravel 股票类之一以解决更具体的功能?有没有办法将实际经过身份验证的用户类型提示到函数声明中,以便我可以声明function index(User $authenticatedUser)并让 Laravel 使用更具体的类型提示自动填充它?

我知道我可以在 Larastan 中为这个特定问题添加一个排除项并继续我的生活,但该错误旨在防止特定类别的错误 - 即,如果我添加 Auth0 并替换App\Model\UserAuth0\Login\User,那么我会有一个Authenticatable无法运行的类,hasPermissionTo()我现在必须修复一堆代码。

0 投票
2 回答
157 浏览

php - PHP 7.4+ 类属性类型

我确信这个问题已经被问过很多次了,但我似乎找不到一个好的/令人满意的答案,所以请多多包涵。

使用 PHP 7.4+,我倾向于输入我能输入的所有内容。但是我对 Doctrine 实体属性有一些问题。

如果我输入正确,我通常会得到很多像这样的错误。

类型化属性 App\Entity\User::$createdAt 在初始化之前不能被访问

该类型错误的代码示例看起来像这样

所以,我曾经使属性可以为空,即使数据库字段不是。所以它看起来像这样。

但是,现在我有另一个问题。我决定在我的项目中实现一个静态代码分析器,现在我正在使用 PHPStan。所以现在,当我扫描我的代码时,我会遇到类似的错误。


行 src/Entity/Trait/TimestampableEntityPropertiesTrait.php(在 App\Entity\Article 类的上下文中)


16 属性 App\Entity\Article::$createdAt 类型映射不匹配:属性可以包含 DateTimeInterface|null 但数据库需要 DateTimeInterface。


那么,处理这种情况的正确方法是什么?

任何建议将不胜感激。

编辑

我应该提到有时,我不想/不能初始化构造函数中的属性,因为我还没有正确的值。

0 投票
1 回答
87 浏览

php - 使用 PHPStan 设置多个引导文件

我有这个结构:

我无法在“应用程序”的根目录下运行 PHPStan 来分析我的项目 1、2、3 等……我找不到类错误。

所以我在我的phpstan.neon上做了这个结构

它正在工作,但我无法为我的不同项目添加多个引导文件。

这不起作用:

我需要这样的东西:

可以为特定路径指定 bootstrapFiles 吗?

谢谢 :) !

0 投票
0 回答
72 浏览

php - 在每次 git 提交时运行 PHP_Codesniffer 和 PHPStan

我正在开发一个应用程序。我想在每次 GIT 提交时自动运行 PHP_Codesniffer 和 PHPStan。如何在我的 Git PreCommit Hook 中包含此操作?