Мы создаем приложение PHP на основе старой доброй платформы codeigniter и столкнулись с проблемой массивного связанного действия, состоящего из нескольких вызовов модели, которые вместе являются частью большой транзакции с базой данных.
Мы хотим иметь возможность выполнить список действий и получить отчет о состоянии каждого из них обратно из функции, независимо от результата.
Нашей первой первоначальной идеей было использование исключений PHP5, но, поскольку нам также нужны сообщения о состоянии, которые не нарушают выполнение скрипта, это было наше решение, которое мы придумали.
Это выглядит примерно так:
$sku = $this->addSku( $name );
if ($sku === false) {
$status[] = 'Something gone terrible wrong';
$this->db->trans_rollback();
return $status;
}
$image= $this->addImage( $filename);
if ($image=== false) {
$error[] = 'Image could not be uploaded, check filesize';
$this->db->trans_rollback();
return $status;
}
Наш контроллер выглядит так:
$var = $this->products->addProductGroup($array);
if (is_array($var)) {
foreach ($var as $error) {
echo $error . '<br />';
}
}
Похоже, это очень хрупкое решение, чтобы делать то, что нам нужно, но оно ни масштабируемое, ни эффективное по сравнению, например, с исключениями из чистого PHP.
Это действительно способ, которым подобные вещи обычно обрабатываются в приложениях на основе MVC?
Спасибо!
UPDATE:
Сделали немало поисков и нашли эту функцию PHP: register_shutdown_function.
Может ли это быть то, что мы ищем? У меня нет идеи, и я не могу заставить ее работать так, как мы хотим ...
Справка: http://php.net/manual/de/function.register-shutdown-function.php