我使用 Croogo 作为主系统。并为它构建了一个自定义插件。我们称之为 MyPlugin。
Croogo 和 MyPlugin 都有模型用户。
MyPlugin 的控制器应该使用 MyPlugin.User 类(默认情况下)。它也手动包含在 $uses 数组中。
在本地 PC 上一切正常。但在客户端的服务器上,由于某些原因,它忽略了 MyPlugin.User 模型并使用 Croogo 的默认 User.User 模型。任何想法为什么以及如何解决?
在同一个命名空间中不能有两个同名的类。
如果你有这个:
<?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 {
请注意,这不仅会影响模型类,还会影响应用程序中的所有类 - 例如控制器