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