Крестовые модели Cakephp и Croogo

Я использую Croogo в качестве основной системы. И создали собственный плагин для него. давайте назовем это MyPlugin.

У Croogo и MyPlugin есть модель User.

Контроллер MyPlugin должен использовать класс MyPlugin.User (по умолчанию). это также вручную включено в массив $ used.

Все отлично работает на локальном ПК. Но на клиентском сервере по некоторым причинам он игнорирует модель MyPlugin.User и использует стандартную модель Croogo User.User.
есть идеи почему и как исправить?

1

Решение

Вы не можете иметь два класса с одним и тем же именем в одном и том же пространстве имен.

Если у вас есть это:

<?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 {

Обратите внимание, что это влияет не только на классы модели, но и на все классы в приложении — например, контроллеры

2

Другие решения

Других решений пока нет …