Y - класс-ярлык для часто употребляемых выражений

Выкладываем свои наработки
Аватара пользователя
Svyatov
Сообщения: 459
Зарегистрирован: 2010.08.12, 14:50
Откуда: Санкт-Петербург
Контактная информация:

Y - класс-ярлык для часто употребляемых выражений

Сообщение Svyatov »

День добрый, коллеги. После того, как я некоторое время тщательно поюзал Yii, я подумал, что писать выражения типа Yii::app()->request->redirect(...) долго и неэффективно и реализовал свой класс-ярлык с лаконичным именем "Y" для быстрого доступа к наиболее употребибым выражениям.

Тут я подобного не видел, видимо все используют свои велосипеды или не используют такой подход вовсе. С удовольствием выслушаю критику, предложения и замечания, может подскажите более эффективную реализацию. Возможно кому-то пригодится. Лично я нахожу это очень удобным.

http://github.com/Svyatov/Yii-Shortcut

История изменений: https://github.com/Svyatov/Yii-shortcut ... /README.md
Последний раз редактировалось Svyatov 2011.10.20, 16:35, всего редактировалось 6 раз.
Аватара пользователя
Svyatov
Сообщения: 459
Зарегистрирован: 2010.08.12, 14:50
Откуда: Санкт-Петербург
Контактная информация:

Re: Y - класс-ярлык для часто употребляемых выражений

Сообщение Svyatov »

Если кто не понял, зачем это нужно и как использовать, привожу примеры:

1) в виджете нам нужно создать урл по роуту

Код: Выделить всё

// стандартная запись
Yii::app()->controller->createUrl(...);

// мой класс
Y::url(...); 
2) достаем/устанавлием значение какого-то кэша

Код: Выделить всё

// стандартная запись
Yii::app()->cache->get(...);
Yii::app()->cache->set(...);

// мой класс
Y::cacheGet(...);
Y::cacheSet(...); 
3) с куками аналогично;
4) достаем значение CSRF токена для вставки в форму или для ajax-запроса

Код: Выделить всё

// стандартная запись
Yii::app()->request->csrfToken;

// мой класс
Y::csrf(); 
5) надо передать параметр CSRF в ajax-запросе jQuery?

Код: Выделить всё

// стандартная запись
<script>
$.post('/bla/bla', {<?=Yii::app()->request->csrfTokenName;?>: '<?=Yii::app()->request->csrfToken;?>', ...} ... );
</script>

// мой класс
<script>
$.post('/bla/bla', {<?=Y::csrfJsParam();?>, ...} ... );
</script>
6) быстрый дамп с подсветкой:

Код: Выделить всё

// стандартная запись
echo '<pre>';
CVarDumper::dump(...);
Yii::app()->end();

// мой класс
Y::dump(...); 
7) выводим результат действия для ajax-запроса

Код: Выделить всё

// стандартная запись
echo $result;
Yii::app()->end();
// или
echo json_encode($result);
Yii::app()->end();

// мой класс
Y::end($result);
// или соответственно
Y::endJson($result); 
8) редиректы

Код: Выделить всё

// стандартная запись
$this->redirect($this->createUrl(...)); // самая короткая запись
Yii::app()->request->redirect(Yii::app()->controller->createUrl(...)); // а это для компонента, например

// мой класс
Y::redir(...); // можно использовать в любом месте одинаково   
9) определение статуса текущего юзера (авторизован или нет)

Код: Выделить всё

// стандартная запись
if (Yii::app()->user->isGuest) ... // если гость
// или
if (!Yii::app()->user->isGuest) ... // если авторизован

// мой класс
if (Y::isGuest()) ... // гость
// или
if (Y::isAuthed()) ... // авторизован
// можно было обойтись одним методом, но так нагляднее получается код   
Ну вот примерно так. Как видите количество кода сокращается минимум в 2 раза, что соответственно сокращает минимум в 2 раза время на его написание.
Nihisil
Сообщения: 118
Зарегистрирован: 2010.08.05, 06:39

Re: Y - класс-ярлык для часто употребляемых выражений

Сообщение Nihisil »

Спасибо. Все руки не доходили написать что-то подобное :)
SpiLLeR
Сообщения: 350
Зарегистрирован: 2009.09.17, 16:47
Откуда: Санкт-Петербург
Контактная информация:

Re: Y - класс-ярлык для часто употребляемых выражений

Сообщение SpiLLeR »

Часто использую "шоты", есть такой же класс, только называется PY))
Еще бы добавил: Yii::app()->request->getParam('nameParam'), в моем случае PY::p('paramName'), в твоем видимо Y::param('paramName');
Предупрежден - значит вооружен.
devKP.ru
Аватара пользователя
xoma
Сообщения: 641
Зарегистрирован: 2009.04.02, 15:24
Откуда: Ногинск
Контактная информация:

Re: Y - класс-ярлык для часто употребляемых выражений

Сообщение xoma »

сейчас ковыряю Джангу, там есть очень полезная идиома - "Получить объект или выкинуть 404 ошибку".

Делается примерно вот так:

Код: Выделить всё

user = get_object_or_404(User,pk=1)
Ну и еще куча аналогичных. Очень удобно и быстро. Вообще для Yii хотелось бы увидеть что-то типа "полуофициального" модуля вот с такими вот шорткатами.
Думаю, что всем полезно будет.
Аватара пользователя
BuCeFaL
Сообщения: 447
Зарегистрирован: 2010.03.17, 21:22
Откуда: Kiev
Контактная информация:

Re: Y - класс-ярлык для часто употребляемых выражений

Сообщение BuCeFaL »

насколько понимаю, сейчас это происходит через константу в входном скрипте YII_DEBUG . Пользователю не нужно видеть ексепшены ^^ не нужная ему информация или очень нужная для злоумышлиника.
Аватара пользователя
Svyatov
Сообщения: 459
Зарегистрирован: 2010.08.12, 14:50
Откуда: Санкт-Петербург
Контактная информация:

Re: Y - класс-ярлык для часто употребляемых выражений

Сообщение Svyatov »

SpiLLeR писал(а):Часто использую "шоты", есть такой же класс, только называется PY))
Еще бы добавил: Yii::app()->request->getParam('nameParam'), в моем случае PY::p('paramName'), в твоем видимо Y::param('paramName');
Yii::app()->request->getParam('nameParam') к Yii непосредственно не относится и реализован мной в другом классе, который предоставляет шорткаты для функционала от Yii не зависящего.

Вообще в проектах использую 3 класса обычно:
1) этот;
2) класс, который реализует назависимый от Yii функционал (типа того же getParam);
3) класс, который реализует какой-то общий для данного конкретного приложения функционал.

Такой подход позволяет таскать из проекта в проект первые два класса (а второй так вообще куда угодно), и минимизировать объем третьего класса :)
Аватара пользователя
slavcodev
Сообщения: 3134
Зарегистрирован: 2009.04.02, 21:42
Откуда: Valencia
Контактная информация:

Re: Y - класс-ярлык для часто употребляемых выражений

Сообщение slavcodev »

Какое-то странное впечатление у меня к таким "шотам". Вроде ничего плохого нельзя сказать, но кажется мне это без полезным. Не легче юзать макросы своей любимой IDE ?
Жду Yii 3!
Аватара пользователя
Svyatov
Сообщения: 459
Зарегистрирован: 2010.08.12, 14:50
Откуда: Санкт-Петербург
Контактная информация:

Re: Y - класс-ярлык для часто употребляемых выражений

Сообщение Svyatov »

mc-bear писал(а):Какое-то странное впечатление у меня к таким "шотам". Вроде ничего плохого нельзя сказать, но кажется мне это без полезным. Не легче юзать макросы своей любимой IDE ?
На вкус и цвет... Я не вижу пользы писать ленты кода, от которых рябит в глазах, если тоже самое можно обозначить коротко и ясно. Макросы - это конечно хорошо, но проблему лаконичности они не решают, а кроме того никак не помогут исправить один файлик из блокнота (например). Да и вообще, класс с автокомплитом не забивает память ненужной информацией, которую приходится помнить, если юзать макросы. Но все это дело вкуса.
Аватара пользователя
slavcodev
Сообщения: 3134
Зарегистрирован: 2009.04.02, 21:42
Откуда: Valencia
Контактная информация:

Re: Y - класс-ярлык для часто употребляемых выражений

Сообщение slavcodev »

Согласен. На вкус и цвет... а вот если код нужно будет справлять кому-то другому? ему нужно будет запоминать сокращения, вместо привычных для него АПИ фреймворка. И вообще сокращения ведь для каждого свои удобны. Другое дело если бы это было официально, и придерживалось какому-то стандарту.
Жду Yii 3!
Аватара пользователя
Svyatov
Сообщения: 459
Зарегистрирован: 2010.08.12, 14:50
Откуда: Санкт-Петербург
Контактная информация:

Re: Y - класс-ярлык для часто употребляемых выражений

Сообщение Svyatov »

mc-bear писал(а):Согласен. На вкус и цвет... а вот если код нужно будет справлять кому-то другому? ему нужно будет запоминать сокращения, вместо привычных для него АПИ фреймворка. И вообще сокращения ведь для каждого свои удобны. Другое дело если бы это было официально, и придерживалось какому-то стандарту.
Согласен, стандартизировать это было бы замечательно. Ну в любом случая я постарался сделать действительно сокращения, а не переименовать все в одну букву :)
Аватара пользователя
gashek
Сообщения: 4
Зарегистрирован: 2010.11.12, 10:41
Откуда: Москва
Контактная информация:

Re: Y - класс-ярлык для часто употребляемых выражений

Сообщение gashek »

Мне эта идея кажется хорошей, прилично времени экономит.
Аватара пользователя
Svyatov
Сообщения: 459
Зарегистрирован: 2010.08.12, 14:50
Откуда: Санкт-Петербург
Контактная информация:

Re: Y - класс-ярлык для часто употребляемых выражений

Сообщение Svyatov »

gashek писал(а):Мне эта идея кажется хорошей, прилично времени экономит.
Да и читаемость кода повышается. Все-таки короткую фразу легче сразу уловить.
Аватара пользователя
sergebezborodov
Сообщения: 133
Зарегистрирован: 2010.06.10, 19:53
Откуда: Dnepropetrovsk-Sevastopol, UA
Контактная информация:

Re: Y - класс-ярлык для часто употребляемых выражений

Сообщение sergebezborodov »

Добавляю свою лепту в сокращалки
http://sergebezborodov.com/blog/yii-fra ... ework.html
A passion to perform
http://sergebezborodov.com
Аватара пользователя
Svyatov
Сообщения: 459
Зарегистрирован: 2010.08.12, 14:50
Откуда: Санкт-Петербург
Контактная информация:

Re: Y - класс-ярлык для часто употребляемых выражений

Сообщение Svyatov »

Интересная реализация параметров, и checkAccess надо добавить, да. Попозже обновлю свой класс, спасибо!
Аватара пользователя
sergebezborodov
Сообщения: 133
Зарегистрирован: 2010.06.10, 19:53
Откуда: Dnepropetrovsk-Sevastopol, UA
Контактная информация:

Re: Y - класс-ярлык для часто употребляемых выражений

Сообщение sergebezborodov »

Может стоит выдвинуть идею добавить объединенную сокращалку в YiiExt?
A passion to perform
http://sergebezborodov.com
Аватара пользователя
Svyatov
Сообщения: 459
Зарегистрирован: 2010.08.12, 14:50
Откуда: Санкт-Петербург
Контактная информация:

Re: Y - класс-ярлык для часто употребляемых выражений

Сообщение Svyatov »

sergebezborodov писал(а):Может стоит выдвинуть идею добавить объединенную сокращалку в YiiExt?
Можно, хотя это все-таки не совсем расширение :) Мне кажется большинство пишет свои велосипеды, потому что свое роднее :) Вот если бы это вообще в официальную версию включить, тогда да.

Кстати, обновил свой класс. Функцию param() реализовал по-другому, кроме краткости и отсутствия ограничения на вложенность она еще и быстрее в случае первого уровня на >100%, в остальных случаях на 10-20% ;)
Аватара пользователя
sergebezborodov
Сообщения: 133
Зарегистрирован: 2010.06.10, 19:53
Откуда: Dnepropetrovsk-Sevastopol, UA
Контактная информация:

Re: Y - класс-ярлык для часто употребляемых выражений

Сообщение sergebezborodov »

Хорошая реализация param, я свой брал из кейка, за неимением времени оставил как есть.
Возьму Ваш код на вооружение
A passion to perform
http://sergebezborodov.com
Аватара пользователя
Svyatov
Сообщения: 459
Зарегистрирован: 2010.08.12, 14:50
Откуда: Санкт-Петербург
Контактная информация:

Re: Y - класс-ярлык для часто употребляемых выражений

Сообщение Svyatov »

Ой, хорошо заметил - там ошибка в самом начале функции: if (!strpos('.', $key)) надо заменить на if (strpos($key, '.') === false) - напутал :)
Ответить