2017-12-02 52 views
-2

拋出簡單的異常是一種常見的做法,所以我認爲它會被內置到'Symfony2'中,但是,執行下面的代碼,我會在這個問題的標題中看到部分錯誤下面盡顯。Symfony2 - 正在嘗試從名稱空間「AppBundle Controller」加載類「Exception」。

if(($result === FALSE) || ($result !== 1)) { 

    throw new Exception('update user account data function -- ' . 
          'update return value: ' . $result . ' - ' . 
          'unable to update your account!'); 

    } // if(($result === FALSE) || ($result !== 1)) ... 

此錯誤告訴我,新的異常類不被支持的Symfony2除非我也把它添加到我的控制器的使用範圍,但我不知道要加上的值有使用PHP的這個功能。

有人請告訴我應該在我的中使用區?

在我的代碼,基於在https://www.w3schools.com/php/php_exception.asp在w3School的PHP異常頁所示的實施例中,$導致變量由學說DBAL 更新方法(http://docs.doctrine-project.org/projects/doctrine-dbal/en/latest/reference/data-retrieval-and-manipulation.html#update),它返回更新的行或數設置如果出現錯誤,則返回FALSE。

我知道,在我的代碼更新方法工作,因爲大部分時間$結果被指定一個非零返回值,沒有出現異常,但有時$結果被分配了一個0,仍沒有例外,表示已知存在的行實際上未被更新。

有什麼方法可以知道更新失敗的原因嗎?

在這種情況下,我嘗試使用上面的代碼拋出異常,但隨後的Symfony2顯示以下內容:

已嘗試從名稱空間「的appbundle \控制器」加載類「異常」。 您是否忘記了「使用」聲明「Symfony \ Component \ Security \ Acl \ Exception \ Exception」,「Symfony \ Component \ Serializer \ Exception \ Exception」或「Symfony \ Component \ Config \ Definition \ Exception \ Exception」? 500內部服務器錯誤 - ClassNotFoundException的

    在SRC /的appbundle /控制器/ BreakinOutAdminController.php在行


1358. 1359. if(($result === FALSE) || ($result !== self::ONE_ROW)) { 1360. 1361. throw new Exception('update user account data function -- ' . 1362. 'update return value: ' . $result . ' - ' . 1363. 'unable to update your account!'); 1364.

1361線在頁面Symphony2 didplays突出。

所以兩個問題:

我應該把我的使用區什麼,所以我可以拋出一個異常,用我自己的消息?

有什麼方法可以知道更新失敗的原因嗎?

謝謝。

+0

考慮使用IDE。在學習php命名空間的基礎知識時,它將爲您節省大量的麻煩。無論如何:拋出新的\ Exception('Oh'); PS該錯誤信息與Symfony無關。 – Cerad

+0

謝謝!添加斜槓修復了Exption('自定義文本')問題。 –

+0

但是,我仍然得到了導致我的代碼拋出正在工作的異常的條件,** $ result = 0 **。我已經驗證該行確實存在,並且不應該有任何鎖定。有沒有辦法知道爲什麼** update **方法返回0? –

回答

0

Attempted to load class "Exception" from (the current) namespace是我經常做的一個問題。這不是Symfony問題 - 只是關於默認命名空間。

...new Exception(或SplExceptions,或其他任何東西 - DateTime是另一種常見的人看到了同樣的問題)只是意味着從目前的命名空間中獲取類,除非它是專門從use列表中引用的 - 但Exception,或DateTime,或其他人在根名稱空間 - \Exception。您可以在每個文件中使用use以使別名在本地使用,或者預置\ backslash。良好的單元測試運行所有的代碼,當涉及到這種情況時會中斷 - 或靜態代碼分析(如phpstan)可以幫助您避免生產錯誤,因爲這些類不存在於當前可用的名稱空間中腳本。

+0

感謝您的詳細解答。我想知道爲什麼你提到的事情也是失敗的。我的關於Symfony2不支持Exception類的評論顯然是因爲我沒有理解需要使用\ Exception。您似乎表示有一個類名可以添加到控制器的使用區域中,甚至可以添加到全局使用配置文件中。什麼是類名,全局使用配置文件的位置和文件名是什麼(如果有的話)?謝謝!順便問一下,爲什麼這個問題被拒絕投票?我相信其他人可能會對這兩個答案有幫助。 –

+0

**這不是symfony問題**,也沒有神奇的Symfony修復 - 這是一個PHP命名空間問題。可以在文件頂部(或DateTime,或其他)使用Exception;或者預先使用帶有根名稱空間 - 「\」的頂級類。 –

相關問題