Gyakran használt Yii változók és függvények

Szerző: Borsos Albert 2015-04-20 11:18 Szólj hozzá!

A Yii-ben rengeteg globális változót el lehet érni függvényeken keresztül. Nagyrészük használat során egyértelművé válik, de a CHttpRequest metódusokból olyan sok van, hogy feleseges megjegyezni, mikor melyiket kel használni, ezért inkább összegyűjtöttem őket.

Sokkal jobb így elérni egy globális változót, mintha közvetlenül kérnénk le mondjuk a $_SERVER['REQUEST_URI'] változó értékét, mert a framework fejlesztői tettek bele ellenőrzéseket is. Például ha nem létezik a $_POST['vezeteknev'] változó, akkor nem kapunk php hibát, hanem visszaad egy null-t. Így megspórolhatjuk az if - isset() - else haszálatát.

A lista nem teljes, amiről úgy gondoltam, hogy nem fogom használni, vagy a használata, eredménye számomra egyértelmű, azt nem tettem bele.

Yii::app() változók

$app = Yii::app();
$app->getBaseUrl(true); // "http://www.borsosalbert.hu" (nincs a végén / jel)
$app->charset; // "UTF-8"
$app->homeUrl; // "/"
$app->language; // "hu", setLanguage()-el módosítható nyelvváltásnál
$app->name; // Alkalmazás neve
$app->timeZone; // "Europe/Budapest" - időzóna<br>

CHttpRequest metódusai

$request = Yii::app()->request;
$request->getBaseUrl(); // üres string
$request->getBaseUrl(true); // "http://www.borsosalbert.hu" (nincs a végén / jel)
$request->getHostInfo(); // "http://www.borsosalbert.hu" (nincs a végén / jel), ha van portszám, azt is visszaadja
$request->getParam('name', null) // $_GET['name'] értékét adja vissza, ha nem létezik, akkor $_POST['name'] értékét, ha az sem, akkor a 2. paramétert adja vissza
$request->getPort(); // 80 (int)
$request->getPost('name', null); // $_POST['name'] értékét adja vissza, ha nem létezik akkor null-t
$request->getQuery('name', null); // $_GET['name'] értékét adja vissza, ha nem létezik akkor null-t
$request->getQueryString(); // "param1=value1&param2=value2"
$request->getRequestType(); // "GET", "POST" (string) = $_SERVER['REQUEST_METHOD']
$request->getPathInfo(); // "controller/action" (string) - hostInfo utáni rész queryString nélkül, kezdő és záró / nélkül
$request->getRequestUri(); // "/controller/action" (string) - hostInfo utáni rész /-el együtt és tartalmazza a queryString-et is
$request->getServerName(); // "borsosalbert.hu" = $_SERVER['SERVER_NAME']
$request->getUrl(); // = getRequestUri()
$request->getUrlReferer(); // előző oldal url-je, úgy mint a getUrl() = $_SERVER['HTTP_REFERER']
$request->getUserAgent(); // useragent string, ha nincs akkor null
$request->getUserHost(); // látogató szolgáltatójának szervere, ha nincs akkor null = $_SERVER['REMOTE_HOST']
$request->getUserHostAddress(); // látogató IP címe, ha nincs akkor "127.0.0.1" = $_SERVER['REMOTE_ADDR']
$request->redirect($url, true, $statusCode); // header("Location: ") wrapper

Persze ez sem tökéletes minden helyzetben. Például ha egy tömböt küldünk el űrlapon, akkor nem tudjuk elérni függvényen keresztül.

$_POST['Customer'] = array(
    'nameFirst' => 'Albert',
    'nameLast' => 'Borsos',
);
Yii::app()->request->getPost('Customer', null); // ez visszaadja a tömböt
Yii::app()->request->getPost('Customer[nameFirst]', null); // ez nem működik
Yii::app()->request->getPost('Customer')['nameFirst']; // ez működik, ha létezik "nameFirst"...
Yii::app()->request->getPost('Customer', array('nameFirst' => 'null', 'nameLast' => 'null'))['nameFirst']; // ez biztosan működik, de elég körülményes egy nagyobb tömbnél
 
A hozzászólások a Disqus segítségével jöttek létre