我在用Croogo作为主系统。并为它建立了一个自定义插件。我们叫它MyPlugin吧。
Croogo和MyPlugin都有模型用户。
MyPlugin的控制器应该使用MyPlugin.User类(默认情况下)。它还手动包含在$uses数组中。
在本地电脑上一切正常。但在客户端服务器上,出于某些原因,它忽略了MyPlugin.User模型,并使用了Croogo的默认User.User模型。有什么好办法解决的吗?
发布于 2015-09-09 10:42:20
不能在同一个命名空间中有两个名称相同的类。
如果你有这个:
<?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 {请注意,这不仅影响模型类,还影响应用程序中的所有类,例如controllers
https://stackoverflow.com/questions/32477035
复制相似问题