Tuesday, July 3, 2012

how request in yii works

You can access the request component in your web application by using Yii::app()-
>getRequest(). So, let's review the most useful methods and their usage, methods that
return different parts of the current URL. In the following table, returned parts are marked
with a bold font.
getUrl http://cookbook.local/test/index?var=val
getHostInfo http://cookbook.local/test/index?var=val
getPathInfo http://cookbook.local/test/index?var=val
getRequestUri http://cookbook.local/test/index?var=val
getQueryString http://cookbook.local/test/index?var=val
The methods that allow us to ensure request type are getIsPostRequest,
getIsAjaxRequest, and getRequestType.
ff For example, we can use getIsAjaxRequest to serve different content based on
request type:
class TestController extends CController
{
public function actionIndex()
{
if(Yii::app()->request->isAjaxRequest)s
$this->renderPartial('test');
else
$this->render('test');
}
}
In the preceding code, we are rendering a view without layout if the request is made
through AJAX.
ff While PHP provides superglobals for both POST and GET, Yii way allows us to omit
some additional checks:
class TestController extends CController
{
public function actionIndex()
{
$request = Yii::app()->request;
$param = $request->getParam('id', 1);
// equals to
$param = isset($_REQUEST['id']) ? $_REQUEST['id'] : 1;
$param = $request->getQuery('id');
// equals to
$param = isset($_GET['id']) ? $_GET['id'] : null;
$param = $request->getPost('id', 1);
// equals to
$param = isset($_POST['id']) ? $_POST['id'] : 1;
}
}

 getPreferredLanguage tries to determine the user's preferred language. It can't
be completely accurate, but it is good to use it as a fallback in case the user has not
specified a preferred language manually.
class TestController extends CController
{
public function actionIndex()
{
$request = Yii::app()->request;
$lang = $request->preferredLanguage;
// trying to get language setting from DB
$criteria = new CDbCriteria();
$criteria->compare('user_id', $request->getQuery('userid'));
$criteria->compare('key', 'language');
$setting = Settings::model()->find($criteria);
if($setting)
$lang = $setting->value;
Yii::app()->setLanguage($lang);
echo Yii::t('app', 'Language is: ').$lang;
}
}
 sendFile allows to initiate file download as follows:
class TestController extends CController
{
public function actionIndex()
{
$request = Yii::app()->getRequest();
$request->sendFile('test.txt', 'File content goes here.');
}
}
This action will trigger a file download and send all necessary headers, including
content type (mimetype) and content length. Mimetype, if not set manually as a third
parameter, will be guessed based on the filename's extension.
ff The last thing we are going to show in this chapter is the getCookies method. It
returns a CCookieCollection class instance that allows us to work with cookies.
As CCookieCollection extends CMap, we can use some native PHP methods
as follows:
class TestController extends CController
{
public function actionIndex()
{
$request = Yii::app()->request;
// getting a cookie
$cookie = $request->cookies['test'];
if($cookie)
// printing cookie value
echo $cookie->value;
else {
// creating new cookie
$cookie=new CHttpCookie('test','I am a cookie!');
$request->cookies['test'] = $cookie;
}
}

No comments:

Post a Comment