DbHelp.ru
Маленький Yii блог
Комментарии
Mj: Мдааа так было интересно, ех... Но лучше поздно чем нико...
Mj: Добавте оповещание по email
Mj: Здравствуйте! Есть вопрос. У меня в постраничне навига...
Гость: Ну хоть что то по Yii framework (просто хотелось бы video course, ур...
Denis: По поводу вышеописанной проблемы мой код можно посмот...



Сервер Ultima Online - Forest Wars (от создателя данного блога)

Используем функции быстрого доступа (глобальные функции в Yii)

Рубрика: Перевод Cookbook

Оцените эту статью:

Рейтинг: 0.00 (0)
23 Июл. 2009
Опубликовать в Twitter Написать в Facebook Опубликовать в своем блоге livejournal.com

Yii Framework Blog img http://dbhelp.rucookbook С целью легкого интегрирование фреймворка со сторонними библиотеками, разработчики 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;
}



Если хотите опубликовать этот материал у себя - пожалуйста, разместите ссылку на страницу откуда вы его взяли.
Другие yii статьи:

  1. Серия рецентов "By Example" пытается предоставить для разработчиков примеры использования самых распостраненных действий в Yii. Учимся использовать CHtml::link() на примерах! [+update ... ""By Example" : CHtml - link()"

  2. Сегодняшняя статья является переводом "Manage application configuration in different modes" из Cookbook. При создании нашего приложения единственным параметром который ... "Используем много конфигураций в одном приложении"

  3. Что то подвис я на ошибке "Column name must be either a string or an array." когда пробовал делать update ... "Column name must be either a string or an array"

andy_s

Было сказано: Четверг, 23 Июль 2009

В духе иии можно было бы сделать класс - набор статических функций.

Получилось бы не так уж и длинно:
Y::user().

Но лично меня Yii::app()->user не очень напрягает. Сразу видно, что это за user (пользователь приложения Yii), да и переносимость не пострадает.

[adm] zolter

Было сказано: Четверг, 23 Июль 2009

Если делать класс - то это менять шило на мыло :)

nagash

Было сказано: Среда, 09 Сентябрь 2009

тогда мы теряем возможности для ide автозаполнения кода.

[guest] Гость

Было сказано: Понедельник, 28 Сентябрь 2009

@nagash: это для каких это ide вы теряете автозаполнение? если правильно написать документацию к глобальным функциям, то всё будет работать как часы, приучайте себя к написанию документации в процессе

[guest] Ghost123

Было сказано: Вторник, 29 Декабрь 2009

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

Оставить комментарий


Код:
Имя: