CodeIgniter and throwing exceptions

前端 未结 1 413
野的像风
野的像风 2020-12-25 12:43

I recently handed in a project for school which I built in CodeIgniter. I had to present it to my teacher and when asked how I handled certain errors, he told me to throw ex

相关标签:
1条回答
  • 2020-12-25 13:09

    Just FYI, I don't use exceptions in CodeIgniter tho I'm using them a lot in Kohana, just because the framework throws them and everything is designed to work with exceptions unlike CodeIgniter. Using exceptions is a good practice providing all your classes/framework are designed to work with them.

    I don't (really, DON'T) want to enter in framework comparison discussions, but I need to compare two pieces of code to clarify your question, one piece from CI2 and another from Kohana 3 (it born as a branch of CI with better object oriented implementation).

    You'll see this CI2 code...

    try
    {
        $result = $this->db->insert('entries', $this->input->post());
    
        // This is not useful.
        if ( ! $result)
        {
            throw new Exception();
        }
    }
    catch (Exception $e)
    {
        // Do something
    }
    

    It's not very useful. Compare with this Kohana 3 code:

    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));
    }
    

    You'll see this is useful, you don't throw the exception, it's thrown by the class that handles the record saving and $e->errors has all the validation errors. When everything is designed to work with exceptions, you can be sure it's a good practice and a very convenient one. But it's not the case of CI2, so maybe I should say go ahead without using exceptions.


    A possible approach to exceptions in 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());
    }
    

    I hope everything is understandable and maybe there's someone with another interesting opinion and a more efficient implementation. Bye.

    0 讨论(0)
提交回复
热议问题