Хочу сделать более универсальным компонент, чтобы его без изменений в коде можно было бы применять на нескольких сайтах. В компоненте встречаются обращения к функциям модели, которая может отсутствовать на сайте. Какие есть грамотные решения обойти эти вызовы, если модели не существует? Очень не хочется создавать модель-заглушку.
$model = new MyModel;
if($model) {
// твой код
}
не?
В этом случае имеем ошибку "include(MyModel.php) No such file or directory"
if (is_file(Yii::getPathOfAlias('application.models.ModelName').'.php')) {
// код
}
Можно пример "универсального компонента"? А то по описанию он какой-то не универсальный получается.
Werewolf, спасибо, то что нужно!
iGrog, компонент - форматтер, преобразующий вики-разметку в html. Писался под свой вики-движок для конкретного проекта, теперь буду его использовать на другом сайте в движке форума, для форматирования текста сообщений такой же разметкой. Но нужны будут только части преобразований, у некоторых функций нужно будет слегка изменить поведение. Форматтер собираюсь со временем дорабатывать, поэтому важно не разбивать его на "ветки", а иметь один универсальный (для всех моих проектов) код.
А почему форматтер вообще завязан на модели? о_О
Разметка ссылки на существующие и требующиеся статьи отличается, поэтому требуется запрос к БД. Ну и мелочи, вроде обработки команды вывода числа статей… Можете посоветовать для таких случаев более универсальный путь, чем прямое обращение к модели из форматтера? Буду благодарен.
Тоже появилась задача проверки существования модели.
Проверка
if(is_file(Yii::getPathOfAlias("application.models.".$modelName).".php"));
мне не понравилась, т.к. привязывается к пути к модели, он может измениться, нашел другой вариант, который меня устроил
if(@class_exists($modelName));
class_exists позволяет проверить существует ли класс с использованием __autoload, но YIIшный автолоад на несуществующие модели ругается, для этого используется @ которая отключает ворнинги и нотайсы для вызываемой функции (и всех в ее стеке вызовов).