Я использую Croogo в качестве основной системы. И создали собственный плагин для него. давайте назовем это MyPlugin.
У Croogo и MyPlugin есть модель User.
Контроллер MyPlugin должен использовать класс MyPlugin.User (по умолчанию). это также вручную включено в массив $ used.
Все отлично работает на локальном ПК. Но на клиентском сервере по некоторым причинам он игнорирует модель 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 {
Обратите внимание, что это влияет не только на классы модели, но и на все классы в приложении — например, контроллеры
Других решений пока нет …