Cakephp和Croogo交叉模型

时间:2015-09-09 10:25:00

标签: php cakephp croogo

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

Croogo和MyPlugin都有型号用户。

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

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

1 个答案:

答案 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