在 CakePHP 2 中不会加载 Intelephense 存根

Posted

技术标签:

【中文标题】在 CakePHP 2 中不会加载 Intelephense 存根【英文标题】:Intelephense stub won't load in CakePHP 2 【发布时间】:2021-02-12 07:36:36 【问题描述】:

我有一些在 Cakephp 2 应用程序中随处使用的辅助函数。它们带有红色下划线,并在控制台中报告为“未定义的函数”。我知道我可以ignore the errors,但我希望它能够正常工作,特别是如果我可以设法让 alt-click 与模型一起工作。

在我的 VS Code settings.json 中,我有以下内容:

"intelephense.stubs": [
        "apache", "bcmath", "bz2", "calendar", "com_dotnet", "Core", "ctype", "curl", "date", "dba", "dom", "enchant", "exif", "FFI", "fileinfo", "filter", "fpm", "ftp", "gd", "gettext", "gmp", "hash", "iconv", "imap", "intl", "json", "ldap", "libxml", "mbstring", "meta", "mysqli", "oci8", "odbc", "openssl", "pcntl", "pcre", "PDO", "pdo_ibm", "pdo_mysql", "pdo_pgsql", "pdo_sqlite", "pgsql", "Phar", "posix", "pspell", "readline", "Reflection", "session", "shmop", "SimpleXML", "snmp", "soap", "sockets", "sodium", "SPL", "sqlite3", "standard", "superglobals", "sysvmsg", "sysvsem", "sysvshm", "tidy", "tokenizer", "xml", "xmlreader", "xmlrpc", "xmlwriter", "xsl", "Zend OPcache", "zip", "zlib", "wordpress",
        "./Config/core.php"
    ],

据我了解,允许将自定义 .php 文件作为存根导入,以便 Intelephense 识别它们。但是,我输入的任何路径都不起作用。我已经尝试了所有我能想到的:

    C:/wamp64/www/MY_APP/app/ ../App/Config 根本不加.php,根本不加文件 还有更多!

我怎样才能让 Intelephense 识别 core.php,它本质上只是包含一堆设置和一些定义为的帮助函数,例如:

// just an alias for json decode
function jdec($json) 
    return json_decode($json, 1, 512, JSON_INVALID_UTF8_IGNORE);

注意:我确信我在 Intelephense 方面遇到的困难与 CakePHP 2 框架严格相关。

【问题讨论】:

【参考方案1】:

我认为您需要将 CakePHP 2 位置路径添加到 intelephense.environment.includePaths 设置。

这是我在类似情况下的工作区配置示例。我有我在工作区之外包含的库,所以我指定了这样的路径:

"intelephense.environment.includePaths": [
  "/path/to/lib1",
  "/path/to/lib2"
]

在此之后,包含的库中的所有函数都被 Intelephense 正确索引,不再标记为 undefined

【讨论】:

嗯,我认为这更适用于 lib 连接。我的core.php 充满了我只需要导入的辅助函数,你可以把它想象成一个简单的包含在 olde 的香草 PHP 时代的“global_functions.php”解决方案。 那么您是否尝试像我建议的那样将您的core.php 位置添加到intelephense.environment.includePaths?您可能需要重新启动 VS Code 才能使更改生效。 是的 :( 为了确定这一点,我非常疯狂。"intelephense.environment.includePaths": [ "../lib/", "../app/Config/", "../app/Config/core.php", "Config/", "Config/core.php", "./Config/", "./Config/core.php", ] 我知道这是一条相对路径。 我确定你的答案是正确的:原来我在core.php 中有一个函数,它使 Intelephense 忽略了整个文件。该函数只需要使用<?php 而不是<? 重新打开PHP。

以上是关于在 CakePHP 2 中不会加载 Intelephense 存根的主要内容,如果未能解决你的问题,请参考以下文章

cakephp 2 上的自动完成 Ajax

CakePHP - 从插件加载路由文件

CakePHP 2.1 - 模型关联 - 保存和查找

CakePHP,将模型的递归设置为-1,这样它就不会“加入”?

无法使用 cakePHP requestAction 加载完整视图

无法将供应商类导入 CakePHP 2.5.1 中的组件