1

我使用 Croogo 作为主系统。并为它构建了一个自定义插件。我们称之为 MyPlugin。

Croogo 和 MyPlugin 都有模型用户。

MyPlugin 的控制器应该使用 MyPlugin.User 类(默认情况下)。它也手动​​包含在 $uses 数组中。

在本地 PC 上一切正常。但在客户端的服务器上,由于某些原因,它忽略了 MyPlugin.User 模型并使用 Croogo 的默认 User.User 模型。任何想法为什么以及如何解决?

4

1 回答 1

2

在同一个命名空间中不能有两个同名的类。

如果你有这个:

<?php

// App/Model/User.php
class User extends AppModel

还有这个

<?php

// Plugins/MyPlugin/Model/User.php
class User extends MyPluginAppModel {

它行不通。

您可能认为它有效,但会发生的是,无论您尝试加载哪种用户模型,首先加载的类(然后用“此类表示该文件”填充缓存)都是将使用的类/参考。这也内置在 App/ClassRegistry 类的工作方式中:

$x = ClassRegistry::init('User');
$y = ClassRegistry::init('My.User');
$z = ClassRegistry::init('Other.User');

$x === $y === $z

以上并不意味着它们都是类的实例app/Model/User.php- 根据应用程序其余代码的执行顺序,它将是其中任何一个的伪随机实例。

解决方案

唯一的解决方案是使用不同的类名,这样就不会发生名称冲突,例如:

<?php

// Plugins/MyPlugin/Model/MyPluginUser.php
class MyPluginUser extends MyPluginAppModel {

请注意,这不仅会影响模型类,还会影响应用程序中的所有类 - 例如控制器

于 2015-09-09T10:42:20.437 回答