DbHelp.ru
Маленький Yii блог
Комментарии
Андрей: Добрый день, а что делать если таблица связочная с 2-мя ...
Гость: Шел 2014 год, пятый год от начала обещаний...
Гость: Ощущение, что из практиков здесь нет никого, все сразу ...
Slavik: Нигде не вижу ответа на такой вопрос Как сделать что-б...
Denis: Полностью рабочий код для Yii 1.1.15 можете найти на https://gith...



Сервер 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. Первым делом здравствуйте! :) Сразу хотел бы вам обьяснить что вы находитесь на странице интернет блога DbHelp, который полностью ... "Шаг 0: Поговорим?"

  2. Буквально пару дней назад закончилась вторая Международная конференция "FOSS Sea" в Одессе. Как вы понимаете я являлся одним из ... "FOSS Sea 2009"

  3. Снова я к своим читателям обращаюсь с глупым вопросом, но что делать, другой аудитории я не доверяю :) На ... "Вопрос: Закрыть yii через htaccess"

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 как я понимаю. может урл должен быть в конфиге прописан ?

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


Код:
Имя: