簡體   English   中英

嘗試將catch塊插入控制器或模型中嗎?

[英]Try Catch block should inserted in Controller or Model?

我有一個如下的結構項目:

/Controller
    test.php
/Models
    test_model.php

現在,當我執行請求時,模型test.php在相應的模型(在本例中為test_model.php了請求。 這里沒問題。 現在我的問題是:我應該在test.php類(控制器)還是在test_model.php類中處理test_model.php

為了執行所有數據庫對話,我使用pdo創建了一個db層。 我設置:

$this->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
$this->setAttribute(PDO::ATTR_EMULATE_PREPARES, false);

處理異常。 一切正常,但我對此表示懷疑。 一個實踐示例:

<?php

    include "test_model.php";

    public function selectInformation()
    {
        try
        {
            $test = new Test_Model(); //just as example..
            return $test->selectUserInfo(); // test_model
        }catch(Exception $ex)
        {
              echo json_encode(array("success" => false, "message" => $ex->getMessage()));
              exit();
        }
    }

    ...

這里是Test_Model類:

   <?php

      class Test_Model extends PDO
      {

         public function __construct()
         {
               parent::__construct();
               $this->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
               $this->setAttribute(PDO::ATTR_EMULATE_PREPARES, false);
         }

         public function selectUserInfo()
         {
             //I removed most part of the code, essentially here an exception is fired by a non correct db table name
         }

實際上,我可以管理Test類中的所有異常,但這是一個好習慣嗎? 我僅將每個Model用於從數據庫返回結果。 實際上,在Model類中沒有每個。

既不在模型中也不在控制器中。

錯誤異常必須在錯誤處理程序中進行處理。

不必單獨“處理”對模型的每個調用,而必須在一個地方處理所有錯誤。 這稱為錯誤處理程序。

錯誤消息或行號均不應以JSON發送。 此信息必須在本地記錄 ,而沒有內部錯誤必須暴露在外部。 只需要顯示一個通用的借口。

應該通過set_error_handler設置一個錯誤處理程序,該錯誤處理程序必須負責處理錯誤。 它應該記錄生產中的錯誤,而只有一個普遍的借口被發送到外面。

請注意,在發生錯誤的情況下,發送5xx系列的適當的HTTP狀態代碼非常重要

您應該將try catch塊放入控制器中。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM