Russian (Pусский) translation by Anna k.Ivanova (you can also view the original English article)

Если вы спрашиваете: «Что такое Yii?» то ознакомьтесь с уроком Знакомство с Yii Framework, в котором рассматриваются преимущества Yii и которое включает в себя обзор Yii 2.0.
Что такое помощники?
В серии уроков Программирование с Yii2 я рассказываю своим читателям о фреймворка Yii2 для PHP. В этом уроке я приведу краткий обзор помощников. В Yii помощники - это модули, которые, среди прочего, группируют обычно полезные библиотеки для управления строками, файлами, изображениями, URL и HTML, и их легко расширить.
Я также расскажу о примере создания помощника в Планировщике собраний, в серии про стартап Envato Tuts +.
Прежде чем мы начнем, пожалуйста, помните, я стараюсь участвовать в обсуждениях ниже. Если у вас есть вопрос или предложение по теме, пожалуйста, напишите комментарий ниже или свяжитесь со мной в Twitter @reifman.
Если вы заметили пробел между эпизодами серии Программирование с Yii, это потому, что в прошлом году мне пришлось провести операцию на головном мозге. Благодарим вас за терпение и поддержку. Приятно регулярно писать, и я с нетерпением жду продолжения освещения Yii2.
Библиотеки Yii2 Helper
По сути, помощники - это всего лишь модули поддержки топографически ориентированного кодирования. Вот список помощников, предоставленных как часть Yii2 - этот список теперь немного более современный, чем документация и ее меню:
- ArrayHelper упрощает обработку массивов с помощью таких функций, как безопасное отображение значений, отображение, слияние и т.д.
- Console поддерживает функции командной строки, собирает ввод и выводит цветной текст.
- FileHelper расширяет основные функции управления файлами PHP.
- FormatConverter преобразует различные форматы, в основном, даты на данный момент.
- Html программно генерирует часто используемые теги HTML.
- HtmlPurifier очищает входной текст от пользователей для повышения безопасности.
- Imagine предоставляет функции манипуляции с изображениями, предоставляемые расширением yii2-image.
- Inflector предоставляет полезные строковые функции для общих преобразований.
- Json кодирует и декодирует данные JSON.
- Markdown конвертирует markdown в HTML.
- StringHelper расширяет основные функции PHP для строк.
- Url помогает с программным созданием URL-адресов и запоминанием их для навигации.
- VarDumper предоставляет расширенную функцию var_dump.
Обычно в своих приложениях Yii я использую помощники Html и Url. И, помните, я использовал помощника Imagine в Пишем свой стартап на PHP: настройки пользователя, изображения профиля и контактные данные для масштабирования загруженных изображений профиля.
Давайте кратко рассмотрим некоторых из менее известных помощников.
ArrayHelper

Как вы можете видеть, ArrayHelper предоставляет несколько полезных функций, ориентированных на массив.
Например, getValue упрощает поиск значений из ключей в сложных массивах:
// working with array $username = \yii\helpers\ArrayHelper::getValue($_POST, 'username'); // working with object $username = \yii\helpers\ArrayHelper::getValue($user, 'username'); // working with anonymous function $fullName = \yii\helpers\ArrayHelper::getValue($user, function ($user, $defaultValue) { return $user->firstName . ' ' . $user->lastName; }); // using dot format to retrieve the property of embedded object $street = \yii\helpers\ArrayHelper::getValue($users, 'address.street'); // using an array of keys to retrieve the value $value = \yii\helpers\ArrayHelper::getValue($versions, ['1.0', 'date']);
Или map() создает простой массив ключей из более сложного массива:
$array = [ ['id' => '123', 'name' => 'aaa', 'class' => 'x'], ['id' => '124', 'name' => 'bbb', 'class' => 'x'], ['id' => '345', 'name' => 'ccc', 'class' => 'y'], ]; $result = ArrayHelper::map($array, 'id', 'name'); // the result is: // [ // '123' => 'aaa', // '124' => 'bbb', // '345' => 'ccc', // ]
HtmlPurifier

Вы можете использовать HtmlPurifier для повышения безопасности обработки ввода пользователя. Например, если кто-то вставляет код инъекции SQL в вашу форму, как указано выше, очистка его с помощью HtmlPurifier нейтрализует любую атаку.
echo HtmlPurifier::process($html);
Он использует библиотеку HTML Purifier library.
StringHelper

StringHelper предоставляет некоторые расширенные методы работы со строками в PHP. Например, truncateWords() может уменьшить строку до определенного количества слов, но также сохранить правильный HTML в результате.
Создание собственного помощника
Для Планировщика собраний мне понадобилось создать базового помощника, который я мог бы использовать. На данный момент я объединил все в один, называемый MiscHelpers.php:
<?php namespace common\components; use yii; use yii\helpers\Url; use common\models\User; class MiscHelpers { public static function buildCommand($meeting_id,$cmd=0,$obj_id=0,$actor_id=0,$auth_key='') ... public static function backendBuildCommand($meeting_id,$cmd=0,$obj_id=0,$actor_id=0,$auth_key='') ... public static function isProfileEmpty($user_id) ... public static function getDisplayName($user_id,$no_email=false) ... public static function getTimezoneList() ... public static function fetchUserTimezone($user_id) ... public static function getUrlPrefix() ... }
Вы можете видеть, что различные методы включены в различные типы. Например, getDisplayName()
возвращает имя пользователя, адрес электронной почты или конкатенированные строки с именем и фамилией, когда они доступны.
Полезно создавать их один раз в одном месте, а не переписывать их по-разному в моделях по мере необходимости.
Я создал MiscHelpers.php, создав файл в /common/components и создав класс, который я мог бы вызвать во всем приложении.
Функция buildCommand
упрощает программную сборку ссылок для исходящих сообщений электронной почты, которые включают возможность аутентификации пользователей с помощью $auth_key
, хранящихся в базе данных.
public static function buildCommand($meeting_id,$cmd=0,$obj_id=0,$actor_id=0,$auth_key='') { // to do - build string of local or remote destination // note: if change made, change in Message.php return Url::to(['meeting/command','id'=>$meeting_id,'cmd'=>$cmd,'actor_id'=>$actor_id,'k'=>$auth_key,'obj_id'=>$obj_id,],true); }
В этом модуле нет ничего особенного, кроме того, что он похож на цель стандартных помощников Yii, которые я описал ранее.
В любом месте, где я хочу использовать функции MiscHelper, я могу использовать следующий код:
<?php use common\components\MiscHelpers; ... <tr> <td style="color:#777; font-family:Helvetica, Arial, sans-serif; ... Hi <?php echo Html::encode(MiscHelpers::getDisplayName($user_id)); ?>,
По мере того, как планировщик собраний растет, я, вероятно, создам множество помощников, более традиционно организованных вокруг актуальных вопросов.
В заключение
Yii Helpers полезны. И, будучи занятыми программистами, мы, возможно, не знаем, что они существуют. Надеюсь, вы видели некоторые вспомогательные функции в рамках модулей Yii выше, которые со временем станут полезными для вас. И я надеюсь, что команда Yii продолжает расширять их с каждым обновлением.
Надеюсь, вы также подумаете о том, как создавать собственные помощники в своих приложениях, а не дублировать общие методы в каждой модели.
По мере того, как серия Yii2 прогрессирует, я все чаще приветствую запросы на новые темы. Вы можете опубликовать их в комментариях ниже или отправить мне письмо по электронной почте на моем веб-сайте Lookahead Consulting.
Если вы хотите узнать, когда выйдет следующий учебник Yii2, подпишитесь на меня @reifman в Twitter или проверьте мою страницу инструктора. Моя страница инструктора будет включать все статьи из этой серии, как только они будут опубликованы.
Чтобы изучить более продвинутое приложение Yii2, ознакомьтесь с нашей серией статей о Планировщике встреч. Приложение теперь находится в альфа-релизе, и вы можете планировать встречи с друзьями. Вы также можете загрузить код; это приложение с открытым исходным кодом.
Ссылки по теме
Subscribe below and we’ll send you a weekly email summary of all new Code tutorials. Never miss out on learning about the next big thing.
Update me weeklyEnvato Tuts+ tutorials are translated into other languages by our community members—you can be involved too!
Translate this post