Вернуться назад и сообщить о результате
Некоторые задачи не совсем укладываются в парадигму Model-View-Controller, потому что у них нет как такового View. Они просто тихо делают свою задачу (backup, импорт/экспорт, оптимизация, удаление,...) и выдают либо, что всё ОК, либо ошибку. Раньше я для большинства таких задач использовал exit/die. Но это как-то не красиво.
Другой вариант - это делать так как в Cake-шаблонах по умолчанию
-
$this->Session->setFlash('Record was successfully deleted');
Но раз уж есть возможность делать красивые flash-сообщения, то можно дальше оптимизировать код.
Тут надо учесть 2 вещи. Во-первых, я очень люблю, когда кода с которым работаешь, очень мало. У Джоела я прочитал интересное правило - функция должна помещаться в один экран без прокруток (тут, правда, я немного хитрю - меряю по основному 21" монитору, а не по второму 17"). Во-вторых, хоть все и советуют использовать фигурные кавычки для любого if, я иногда их не ставлю для return/die, то есть, когда конструкция завершает работу функции, либо для $i++, то есть когда кода очень мало. Поэтому было бы приятно вместо
-
if (!$id) {
-
$this->Session->setFlash('Invalid Customer.');
-
}
писать
-
if (!$id) $this->redirectBack('error: Invalid Customer.');
А компьютер пусть сам догадывается, что это ошибка и нужно вывести "Invalid Customer." и что нужно переадресовать на предыдущую страницу.
Для этого в app_controller.php надо добавить
-
/**
-
* Set flash message and redirect
-
*
-
* @param string $message Optional flash message. Accepted 'error: something', and 'ok: something'
-
* @param string/array $url Redirect url. If not mentioned will redirect to previous page
-
*/
-
function redirectBack($message=null, $url=null) {
-
} elseif (preg_match('/^ok:(.+)$/', $message, $m) || preg_match('/^success:(.+)$/', $message, $m)) {
-
} else {
-
$this->flash($message);
-
}
-
}
-
-
$url = $this->referer();
-
}
-
$this->redirect($url, null, true);
-
}
Отлично. Попробую. Только параллельно с редиректом подцеплю вывод в сгенерённое JS-окошко.
Если JS-окошко сделано специально для дебага, то лучше пользоваться Firebug. Я для CakePHP написал helper - http://php.southpark.com.ua/2007/vyvod-iz-php-v-firebug-helper-dlya-cakephp/
>У Джоела я прочитал интересное правило - функция должна помещаться в один экран
>без прокруток (тут, правда, я немного хитрю - меряю по основному 21" монитору, а не
> по второму 17").
Не согласен. Функция должна выполнять одно действие которое с точки зрения поставленной задачи является элементарным (не факто что атомарным!). При этом имя функции должно быть описательным, т.е. все что делается в функции должно содержаться в ее имени. В итоге функция как раз и занимает не более одного экрана!
У меня иногда функции контроллеров раздуваются после добавления десятка каких-то мелких улучшений, которые вроде относятся к этому действию. И иногда тяжело заметить как функция становится монстром, но как только не влезает в экран - сразу понятно, что пора её в рефакторинг. Либо разбить на несколько подфункций, либо что-то просится в модель. То есть, "не больше одного экрана" - это просто триггер, который говорит, что здесь надо думать.
А множество функций на одну строку, которые используются всего один раз, в контроллерах плодить тоже не очень хорошо - код тогда сложнее понять.
Хелпер я видел. Архив блога перелопатил весь.
Я имел ввиду не дебаг, а именно вывод сообщения пользователю.
Владимир, спасибо что напомнили =))) У меня есть замечательный универсальный класс для flash-сообщений, скоро выложу в блоге на обсуждение.
Я не Владимир
@Sam
Так я ж к автору блога обращался. Он то вроде Владимир )))
Ой, блин... чё-то меня сегодня плющит
День варенья влияет...
[оффтоп]
@Sam
У тебя сегодня День Варенья??? ПОЗДРАВЛЯЮ!
Буду краток: здоровья, любви, денег и удачи! =)))
[/оффтоп]
Спасибо.
@larin: О, интересно будет почитать.
@Sam: С Днём варенья!
Кстати, никто не знает, можно ли в WordPress сделать древовидные комментарии как на LiveJournal?
У меня в среднем к записи 6 комментариев, но всё же было бы приятно.
@Владимир Лучанинов
Конечно можно, например, Brians Threaded Comments
А вообще Google & Яндекс выдают кучу интересного по запросу: "WordPress древовидные комментарии" =)))
[...] и наткнулся на статьи Владимира Лучанинова “Вернуться назад и сообщить о результате” и “Разные flash для ошибок, сообщений и [...]