Просто к вашему сведению, я не использую исключения в CodeIgniter, хотя я часто их использую в Kohana, просто потому, что фреймворк их выбрасывает, и все разработано для работы с исключениями в отличие от CodeIgniter.Использование исключений - хорошая практика, при условии, что все ваши классы / фреймворки предназначены для работы с ними.
Я не (действительно, не хочу) участвовать в обсуждениях сравнения фреймворков, но мне нужно сравнить двафрагменты кода, чтобы прояснить ваш вопрос, один фрагмент из CI2 и другой из Kohana 3 (он рожден как ветвь CI с лучшей объектно-ориентированной реализацией).
Вы увидите этот код CI2 ...
try
{
$result = $this->db->insert('entries', $this->input->post());
// This is not useful.
if ( ! $result)
{
throw new Exception();
}
}
catch (Exception $e)
{
// Do something
}
Это не очень полезно.Сравните с этим кодом Kohana 3:
try
{
$entry = ORM::factory('blog');
$entry->values(Request::current()->post());
$entry->save();
}
catch (ORM_Validation_Exception $e)
{
Session::instance()->set('form_errors', $e->errors(TRUE));
}
Вы увидите, что это полезно, вы не выбрасываете исключение, оно генерируется классом, который обрабатывает сохранение записи, а $e->errors
имеет всю проверкуошибки.Когда все спроектировано для работы с исключениями, вы можете быть уверены, что это хорошая и очень удобная практика.Но это не относится к CI2, так что, может быть, я должен сказать, что можно продолжать без использования исключений.
Возможный подход к исключениям в CI ...
try
{
$this->load->model('blog');
$this->blog->save_entry($this->input->post()); // Handle validation inside the model with the Form_validation library
}
catch (Validation_Exception $e) // You throwed your custom exception with the failed validation information
{
// Do something with your custom exception like the kohana example
$this->session->set('form_errors', $e->errors());
}
Я надеюсь, что всеэто понятно, и, возможно, есть кто-то с другим интересным мнением и более эффективной реализацией.Bye.