Используем функции быстрого доступа (глобальные функции в Yii)
Рубрика: Перевод Cookbook
23 Июл. 2009
С целью легкого интегрирование фреймворка со сторонними библиотеками, разработчики Yii не используют в коде глобальных функций. В Yii все необходимо решать при помощи полного названия класса или диапазона обьектов.
Например, чтобы получить доступ к данным текущего пользователя, мы должны использовать Yii::app()->user. Что бы обратиться к параметрам нашего приложения, мы должны использовать Yii::app()->params[название] и так далее.
Хотя всевозможные редакторы кода (IDE) могут немного облегчить печать этих длинных имен, лучшим вариантов будет использовать глобальные функции...
Мы можем хранить наши глобальные функции быстрого доступа в файле globals.php. Теперь что бы эти функции были доступны внутри приложения, откроем файл index.php и добавим в его начало:
require('path/to/globals.php');
require('path/to/yii.php');
......
Теперь вы можете использовать ваши глобальные функции в любом месте вашего приложения. Например, что бы получить доступ к данным пользователя мы можем использовать user() вместо Yii::app()->user
Примечание: Не используйте функции быстрого доступа в ваших компонентах, если вы собираетесь в дальнейшем использовать их в разных приложениях (или распространять). Это сделает ваши компоненты не пригодными если функции быстрого доступа не будут определены в других приложениях. Также обратите внимание что ваши глобальные функции могут быть причиной конфликта при использовании сторонних библиотек. Поэтому постарайтесь для глобальных функций использовать не сильно распространенные имена (прим. переводчика)
Ниже приведен код, содержащий список наиболее используемых функций быстрого доступа. Вы можете настроить их под свой вкус!
defined('DS') or define('DS',DIRECTORY_SEPARATOR);
/**
* Быстрый доступ к Yii::app()
*/
function app()
{
return Yii::app();
}
/**
* Быстрый доступ к Yii::app()->clientScript
*/
function cs()
{
return Yii::app()->clientScript;
}
/**
* Быстрый доступ к Yii::app()->createUrl()
*/
function url($route,$params=array(),$ampersand='&')
{
return Yii::app()->createUrl($route,$params,$ampersand);
}
/**
* Быстрый доступ к CHtml::encode
*/
function h($text)
{
return htmlspecialchars($text,ENT_QUOTES,Yii::app()->charset);
}
/**
* Быстрый доступ к CHtml::link()
*/
function l($text, $url = '#', $htmlOptions = array())
{
return CHtml::link($text, $url, $htmlOptions);
}
/**
* Быстрый доступ к Yii::t(). По умолчанию, используется категория 'stay'
*/
function t($message, $category = 'stay', $params = array(), $source = null, $language = null)
{
return Yii::t($category, $message, $params, $source, $language);
}
/**
* Быстрый доступ к Yii::app()->request->baseUrl
* Если вы используете параметр $url - он будет добавлен как префикс к baseUrl.
*/
function bu($url=null)
{
static $baseUrl;
if ($baseUrl===null)
$baseUrl=Yii::app()->request->baseUrl;
return $url===null ? $baseUrl : $baseUrl.'/'.ltrim($url,'/');
}
/**
* Быстрый доступ к Yii::app()->params[$name].
*/
function param($name)
{
return Yii::app()->params[$name];
}
/**
* Быстрый доступ к Yii::app()->user.
*/
function user()
{
return Yii::app()->user;
}
- Оригинал "Use shortcut functions to reduce typing" [англ.]
Если хотите опубликовать этот материал у себя - пожалуйста, разместите ссылку на страницу откуда вы его взяли.
- ... "Art"
- Данная статья является переводом крохотной заметки в Cookbook-е которая появилась совсем недавно. Разработчики Yii порадовали нас отличной "фичей" которая ... "Добавление контекстной информации (session, user...) в журнал"
- Серия рецентов "By Example" пытается предоставить для разработчиков примеры использования самых распостраненных действий в Yii. Учимся использовать CHtml::link() на примерах!
[+update ... ""By Example" : CHtml - link()"

andy_s
Было сказано: Четверг, 23 Июль 2009
В духе иии можно было бы сделать класс - набор статических функций.
Получилось бы не так уж и длинно:
Y::user().
Но лично меня Yii::app()->user не очень напрягает. Сразу видно, что это за user (пользователь приложения Yii), да и переносимость не пострадает.

nagash
Было сказано: Среда, 09 Сентябрь 2009
тогда мы теряем возможности для ide автозаполнения кода.

[guest] Гость
Было сказано: Понедельник, 28 Сентябрь 2009
@nagash: это для каких это ide вы теряете автозаполнение? если правильно написать документацию к глобальным функциям, то всё будет работать как часы, приучайте себя к написанию документации в процессе

[guest] Ghost123
Было сказано: Вторник, 29 Декабрь 2009
Подскажите пожалуйста новичку. Вот Yii::app()->user это означает, что мы обращаемся к какому-то классу? и где он определяться должен ? Второй вопрос: у меня Yii::app()->request->baseUrl ничего не возвращает, то есть пустая строка в результате, хотя должен быть http://localhost как я понимаю. может урл должен быть в конфиге прописан ?


