Я сделал небольшую настройку функции Адама, чтобы учесть и плагины:
public function modelExists($modelClass, $plugin=null){
$object = 'model';
if($plugin){
$object = $plugin.'.'.$object;
}
$model_list = array_flip(App::objects($object));
return isset($model_list[$modelClass]);
}
Осталась одна проблема.Похоже, он не подбирает модели в каталоге Lib / Model.
Пока не удалось решить эту проблему.Обновлю сообщение, если найду решение.
Я только что добавил поддержку каталогов lib
Я также объединил переменные плагина и modelClass. (Может вызываться как массив или строка дляради удобства)
Вот новая функция:
public function modelExists($modelClass, $checkLoaded=true){
$modelClass = !is_array($modelClass)?$modelClass:implode('.', $modelClass);//implode if is array
list($plugin, $modelClass) = pluginSplit($modelClass, true);
$plugin=rtrim($plugin,'.');
$object = 'model';
if($plugin){
if($checkLoaded){
if(!CakePlugin::loaded($plugin)){
return false;
}
}
$object = $plugin.'.'.$object;
$libPaths = App::path("Lib/Plugin/$plugin");
} else {
$libPaths = App::path('Lib');
}
$list = App::objects($object, null, false);
foreach($libPaths as $path){
$libModels = App::objects('lib.'.$object, $path.'Model'.DS, false );
if(is_array($libModels)){
$list = Hash::merge($list, $libModels);
}
}
if(in_array($modelClass, $list)){
return true;
}
return false;
}
Использование:
ее можно назвать так:
$ this-> modelExists('SomeModel');
$ this-> modelExists ('Plugin.SomeModel');
$ this-> modelExists (['SomeModel']);
$ this-> modelExists (['Plugin', 'SomeModel']);
// Обратите внимание, используйте array () вместо [], если вы планируете развертывать на php версии <5.4 </p>