将自定义Eloquent ORM模型添加到WHMCS版本6(Add custom Eloquent ORM models to WHMCS version 6)
WHMCS版本6使用Eloquent模型 。
他们使用的模型文件清楚地说明了如何访问WHMCS数据库。
我遇到的问题是我想访问自己的模型。 我有多个模型,一些直接访问WHMCS,另一些访问完全独立的数据库。
要使用他们的模型,你需要这样做:
... use WHMCS\User\Client; ...
... use WHMCS\User\Client; ...
我只是想这样做:
... use WHMCS\User\Client; use Radius\User\Logon; ...
我将模型添加到$ root_folder / includes / classes / Radius / User / Logon.php模仿WHMCS的文件夹结构。
但是,我收到一个错误
Fatal error: Class 'Radius\User\Logon' not found in /var/www/vhosts/snowball.co.za/wh6.snowball.co.za/modules/servers/radius/radius.php on line 543
我完全怀疑我必须更新Composer以识别我自己的模型,但我不确定。 我所做的事情需要与WHMCS完全整合,并且不能破坏任何东西。
有人有建议吗?
WHMCS version 6 uses the Eloquent model.
Their using models documentation clearly states how to access the WHMCS database.
The problem I am experiencing is that I want to access my own model. I have multiple models, some that access WHMCS directly, and other that access a completely separate database.
To use their model, you do this:
... use WHMCS\User\Client; ...
I tried simply to do this:
... use WHMCS\User\Client; use Radius\User\Logon; ...
I added my models to $root_folder/includes/classes/Radius/User/Logon.php mimicking the folder structure of WHMCS.
However, I get an error
Fatal error: Class 'Radius\User\Logon' not found in /var/www/vhosts/snowball.co.za/wh6.snowball.co.za/modules/servers/radius/radius.php on line 543
I fully suspect I have to update Composer to recognise my own models, but I am not sure. What I do needs to be fully integrated with WHMCS and it must not break anything.
Does anyone have advice?
原文:https://stackoverflow.com/questions/34020969
最满意答案
如果您使用Artifactory Pro运行,则可以使用用户插件开发自己的缓存失效机制。 以此插件为例。
这个想法是在Artifactory处理下载请求之前将资源标记为“过期”,从而使Artifactory将缓存版本替换为上游版本。 像这样的插件通常用于替换非官方支持的repo类型中的元数据文件(例如CRAN),但是您可以使用它来使任何通用文件到期。 此功能作为User Plugins Wiki上的beforeDownloadRequest注释块的一部分进行了记录。
If you are running with Artifactory Pro, you can develop your own cache invalidation mechanism using a User Plugin. Have a look at this plugin as an example.
The idea is to mark a resource as "expired" just before Artifactory processes the download request, making Artifactory replace the cached version with the upstream version. Plugins such as this one are usually used to replace metadata files in repo types that aren't officially supported (CRAN, for example), but you can use it to expire any generic file. This functionality is documented as part of the beforeDownloadRequest comment block on our User Plugins Wiki.
相关问答
更多-
Simple Injector的批量注册工具主要侧重于通用接口上的注册。 ILinkRepository是一个非泛型接口,具有与非泛型实现的一对一映射。 如果要批量注册这些非泛型抽象,则必须自己编写LINQ查询,以反映程序集并获取类型并循环查询以注册这些类型。 没什么好看的,也没什么复杂的。 文档甚至展示了一些这方面的例子 。 但是有一个原因,简单的注射器并没有帮助你。 具有这种与基类的非通用存储库接口的设计至少可以说是难以理解的,正如本文所描述的那样 ,这样的设计违反了五个SOLID原则中的三个,这表明它 ...
-
NSTimer失效(NSTimer invalidation)[2022-02-09]
请参阅该方法的文档 。 它说: 重复 如果是,则计时器将重复安排自己直到无效。 如果为NO,计时器将在其触发后失效 。 See the documentation for the method. It says: repeats If YES, the timer will repeatedly reschedule itself until invalidated. If NO, the timer will be invalidated after it fires. -
跨服务器缓存失效(Cache invalidation across servers)[2023-12-23]
对于您的用例,http端点是更好的解决方案。 您将消息推送到SNS,并且每个订阅的端点将在您托管的新api端点处被调用,从而清除缓存。 SQS在这里不是最好的用例 - 为了使用它,你需要有6个独立的队列(或每个服务器一个),你需要在每个队列上都有一个总是在后台运行的应用程序检查新消息并“拉”消息 - http端点是一个'推送'操作,这就是你想要的。 For your use case, the http endpoints is the better solution. You push a message ... -
从技术上讲,这是非常罕见的。 解决方案虽然非常简单: 如果你想使用在if中检查的值,那不是null,你可以在if中分配它,所以你不需要在else中再次从缓存中检索它: Connection conn; if ((conn = connectionCache.get(jdbc.getConnectionURL())) == null) { conn = DriverManager.getConnection(jdbc.getConnectionURL(), jdbc.getUs ...
-
问题不在多个存储库中,而是在多个DbContext实例中。 EF告诉您,您无法一次将同一实体实例添加到多个上下文中。 因此共享存储库无济于事。 此外,拥有多个UoW共享单例存储库是通往地狱的道路。 处理并发(EF不是线程安全的),状态等是非常困难的。 要解决此问题,您应该: 共享工作单元,以便在单个业务操作中使用相同的UoW(和DbContext )实例 在将实体实例添加到另一个UoW之前创建它们的副本。 选择取决于您的具体情况。 The problem is not in multiple reposit ...
-
如何聚合存储库?(How to aggregate repositories?)[2022-06-06]
一种方法是为每个数据库表创建一个存储库对象。 在DDD中,由于持久性无知的概念,数据库表通常不会与存储库进行一对一映射。 相反,存储库应该与集合一一对应。 当然,所有这些存储库类都可以从通用存储库接口派生。 储存库模式可能是一个滑坡。 虽然封装很好,但很容易被不必要的抽象带走。 在这里看看另一个角度。 聚合对象应该是这些存储库的容器,还是更多的是相关上下文的容器(意味着沿着Bounded DbContexts的行)? 看起来你所谓的“功能区”在DDD中被称为有界上下文 (BC)。 (在EF中不是DbCont ... -
这取决于您的约束,即您可以承受陈旧读取的时间长度(即缓存返回过时的数据)。 如果这根本不会造成伤害,JMS是一种通知所有成员的好方法,因为很容易确保每个成员最终获得“刷新”消息。 如果需要确保立即刷新过时的数据,可以使用JMS通过向游戏添加事务和请求/响应周期来协调刷新。 但这意味着如果你不小心,你可能会陷入死锁或饥饿的过程 - 这是你必须为同步付出的代价。 如果这让您感到困扰,那么问题就是您可以使用其他技术来实现相同的结果。 您可以使用RMI或套接字但是,您必须重新发明轮子(这意味着您将花费大量时间来获取 ...
-
缓存失效算法(Cache invalidation algorithm)[2023-04-28]
要解决竞争条件,请添加时间戳(或计数器)并在设置新的高速缓存条目时检查此时间戳。 这可确保不会缓存过时的响应。 这是一个伪代码: //set new cache entry if resourceId is not cached //or if existing entry is stale function setCache(resourceId, requestTimestamp, responseData) { if (cache[resourceId]) { if (cach ... -
如果您使用Artifactory Pro运行,则可以使用用户插件开发自己的缓存失效机制。 以此插件为例。 这个想法是在Artifactory处理下载请求之前将资源标记为“过期”,从而使Artifactory将缓存版本替换为上游版本。 像这样的插件通常用于替换非官方支持的repo类型中的元数据文件(例如CRAN),但是您可以使用它来使任何通用文件到期。 此功能作为User Plugins Wiki上的beforeDownloadRequest注释块的一部分进行了记录。 If you are running w ...
-
Android studio缓存了很多文件,包括符号引用和主要的android属性反射。 当你使用view.findViewByid()它内部使用反射来获取id匹配的视图。 有时这个符号链接会损坏并失去连接。 有时这就是为什么有时你会看到R keyword周围的红色。 无效重置并重新链接所有文件,清除已建立的缓存。 Android studio caches a lot of files, including symbolic references and mainly android property r ...