Ответ 1
Просто FYI, я не использую исключения в 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.