- Yii 1.1 Application Development Cookbook
- Alexander Makarov
- 572字
- 2021-04-02 18:40:58
Using exceptions
Exceptions are a core PHP feature, but they are seldom used fairly. Yii makes exceptions very useful.
There are two main areas where Yii exceptions come in handy, which are as follows:
Generally, an exception should be thrown when a component cannot handle a special situation, such as the one said earlier, and needs to leave it to higher-level components.
How to do it…
- Let's assume that we have an
application/apis/lyrics/LyricsFinder.php
class that makes an HTTP request to an API using CURL and returns song lyrics based on its name. This is how we can use exceptions inside of it:// create some custom exceptions to be able to catch them // specifically if needed // general lyrics finder exception class LyricsFinderException extends CException {} // used when there is a connection problem class LyricsFinderHTTPException extends LyricsFinderException{} class LyricsFinder { private $apiUrl = 'http://example.com/lyricsapi&songtitle=%s'; function getText($songTitle) { $url = $this->getUrl($songTitle); $curl = curl_init(); curl_setopt($curl, CURLOPT_URL, $url); curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1); $result = curl_exec($curl); // if there is an HTTP error, we'll throw an exception if($result===false) { $errorText = curl_error($curl); curl_close($url); throw new LyricsFinderHTTPException($errorText); } curl_close($curl); return $result; } private function getRequestUrl($songTitle) { return sprintf($this->apiUrl, urlencode($songTitle)); } }
- As we don't know how a specific application needs to handle its API connection, we will leave it to the application itself by throwing a custom
LyricsFinderHTTPException
. This is how we can handle it in ourprotected/controllers/TestController.php
:class TestController extends CController { public function actionIndex($song) { $lyric = 'Nothing was found.'; // importing api class Yii::import('application.apis.lyrics.LyricsFinder'); $finder = new LyricsFinder(); if(!empty($song)) { // We don't want to show user an error. // Instead we want to apologize and // invite him to try again later. try { $lyric = $finder->getText($song); } // we are looking for specific exception here catch (LyricsFinderHTTPException $e) { echo 'Sorry, we cannot process your request. Try again later.'; } } echo $lyric; } }
- Another usage of Yii exceptions is the generation of different HTTP responses by throwing
CHttpException
. For example, an action that displays a blog post represented by aPost
model, loaded by its ID will look like this:class PostController extends CController { function actionView() { if(!isset($_GET['id'])) // If there is no post ID supplied, request is definitely wrong. // According to HTTP specification its code is 400. throw new ChttpException(400); // Finding a post by its ID $post = Post::model()->findByPk($_GET['id']); if(!$post) // If there is no post with ID specified we'll generate // HTTP response with code 404 Not Found. throw new CHttpException(404); // If everything is OK, render a post $this->render('post', array('model' => $post)); } }
How it works…
Yii converts all non-fatal application errors to CException
automatically.
Additionally, the default exception handler raises either the onError
or an onException
event. The default event handler writes a log message with error level set to error
. Additionally, if your application's YII_DEBUG
constant is set to true
, unhandled exception or error will be displayed at a handy error screen. This screen includes a call stack trace, a code area where the exception was raised, and the file and line where you can look for the code to fix.
There's more...
For further information, refer to the following URLs:
- Moodle 2.0 E/Learning Course Development
- 突破平面Premiere Pro 2022短視頻與視頻制作
- Illustrator CS6核心應用案例教程(全彩慕課版)
- Drools規則引擎技術指南
- 青少年美育趣味課堂:青少年學攝影修圖
- DSP開發寶典
- SPSS統計分析從基礎到實踐
- AutoCAD入門教程全掌握
- Photoshop CC 2017 淘寶美工設計實例教程
- Oracle Fusion Middleware Patterns
- UG NX12中文版實用教程
- 3ds Max 印象 影視粒子特效全解析
- 剪映專業版:短視頻創作案例教程(全彩慕課版)
- iOS智能手機APP界面設計實戰教程
- Revit建模進階標準教程(實戰微課版)