Хелперы. Полезные манипуляции со строками

Автор оригинала: DevArticles.In
  • Перевод
CakePHP поставляется с кучей полезных хелперов и компонентов, которые обеспечивают удобные инструменты для обработки и манипулирования данными. Эти хелперы значимы не только для пользователя фреймворка, но и могут оказать большую помощь кому-нибудь кто пишет PHP приложения не используя CakePHP.


Вот несколько примеров:

NumberHelper


Number хелпер содержит мощные функции для манипуляции с цифрами.

precision()

precision() возвращает число форматированное с уровнем точности. Например:
echo $number->precision(25.02558, 3);
//выведет
25.026

toReadableSize()

Эта функция принимает параметром размер файла и возвращает хорошо отформатированную строку с указанием размера в байтах, Кб, Мб, Гб и Тб. Например:
echo $number->toReadableSize(2502558);
//выведет
2.39 MB

Другие функции хелпера Numer:
toPercentage(): Форматирует число в проценты.
format(): Форматирует число в денежный формат.
currency(): Форматирует число в денежный формат подписанные знаком валюты.

Смотрите файл cake/libs/view/helpers/number.php чтобы ознакомится с полным списком функций Number хелпера и их применением.

TextHelper


Text хелпер содержит полезные функции для манипуляции с текстовыми строками.

highlight()

Подсвечивает заданную фразу в тексте. Например:
echo $text->highlight("Word example will be highlighted","example");
//выведет

This is the string in which word example will be highlighted
*(example будет подсвечен. хабр не дает это показать)

Примечание: вы должны определить стиля для класса “highlight” в вашем CSS. Например:
.highlight{background:#FFFF00;}

stripLinks()

Уберет все ссылки(<a href=….) из заданного текста. Пример:
echo $text->stripLinks('Dont show the clickable link on <a href="http://www.givebackindia.com">Online Charity Mall</a>');
//выведет
Dont show the clickable link on Online Charity Mall

autoLinkUrls()

Добавляет ссылки (<a href=….) в заданном тексте в котором строки начинаются с http:// и .

autoLinkEmails()

Добавляет email ссылки(<a href=”mailto:….) в заданном тексте.

truncate()

Обрезает строку до длины указанной во втором параметре и заменяет последние символы. Заботится о HTML тэгах и кодировке.

Например:
echo $text->truncate("Cuts a string to the length of given second argument and replaces the last characters. Takes care of HTML tags and encoding.",50);
//outputs
Cuts a string to the length of given second arg...

excerpt()

Создает выдержку из текста вокруг искомой фразы длиной определенной радиусом и добавляет окончание.

toList()

Создает список разделенный запятыми где два последних элемента соеденены ‘and’.

Смотрите файл cake/libs/view/helpers/text.php чтобы ознакомится с полным списком функций и их использованием.

Time Helper


convert()

Конвертирует данное время(во временной зоне сервера) в пользовательское локальное время со сдвигом от GMT.

nice()

Возвращает хорошо форматированную строку для данной Datetime строки.

niceShort()

Возвращает форматированную строку даты в виде описания.

isToday()

Возвращает true если данная datetime строка равна текущей дате.

isThisWeek()

Возвращает true если данная дата на текущей неделе.

isThisMonth()

Возвращает true если данная дата в текущем месяце.

isThisYear()

Возвращает true если данная дата в текущем году.

wasYesterday()

Возвращает true если данная дата была вчера.

isTomorrow()

Возвращает true если данная дата будет завтра.

timeAgoInWords()

Возвращает относительную дата или форматированную в зависимости от разницы между текущей датой и данной.

format()

Возвращает UNIX timestamp, данный либо в UNIX timestamp или правильной strtotime() строке.

Смотрите файл cake/libs/view/helpers/time.php чтобы ознакомится с полным списком функций и их использованием.

Также есть и другие хелперы, некоторые из них(например html, form, javascript, ajax) каркас отображений в CakePHP. Вам необходимо посмотреть на них в cake/libs/view/helpers для лучшего применения.
Поделиться публикацией

Похожие публикации

AdBlock похитил этот баннер, но баннеры не зубы — отрастут

Подробнее
Реклама

Комментарии 22

    +1
     все это хорошо. самп ользуюсь многими из этих функций.
    вот только не пойму, чем их РНР-шная функция round(25.02558, 3) не устроила, что они решили использовать precision(25.02558, 3);
      0
      precision — это sprintf("%01.3f", 25.02558)
      round(25.0000,3) = 25 (float)
      sprintf("%01.3f", 25.02558) = 25.000 (string)
        0
        > sprintf("%01.3f", 25.02558) = 25.000 (string)
        sprintf("%01.3f", 25.0000) = 25.000 (string)
          0
          результат sprintf зависит от локали и иногда это может сыграть негативную роль (например, когда значение потом попадает в Javascript, или вообще, если впоследствии оно используется и программа приводит его к типу float).

          В сочетании со слабой типизацией в PHP это может дать нехорошие результаты, так что будьте осторожны и никогда не используйте результаты sprintf в вычислениях.

          Лично мне приходилось, работая с legacy-кодом — делать setlocale(LC_NUMERIC, 'C'); — чтобы избежать подобных ошибок.
            0
            ну в данном случае речь идет о хелпере, а значит в вычислениях результат работы precision использоваться не должен по определению, только для отображения.
            хотя про то, что локаль влияет на вывод sprintf я чет даж не подумал. пригодится, спасибо.
        0
        > stripLinks()
          0
          сори =)
          так вот описано как stripLinks() убирает ссылки, но это и так понятно, куда более интересней — как autoLinkUrls() добавляет?
            0
            еще раз извиняюсь. в действительности все банально просто…
          0
          Сапсибо за статью. Сейчас как раз занимаюсь изучением CakePHP. После CodeIgniter довольно непривычно.
            +2
            не понимаю, зачем дублировать встроенные функции?
              +1
              чтобы разработчик вынужден был разбираться в сотнями новых оберток)
                0
                внутри функции реализованны не фонтан )
                например toList() функция из 9-ти строчек…

                function toList($list, $and = 'and') {
                	$r = '';
                	$c = count($list) - 1;
                	foreach ($list as $i => $item) {
                		$r .= $item;
                		if ($c > 0 && $i < $c) {
                			$r .= ($i < $c - 1 ? ', ' : " {$and} ");
                		}
                	}
                	return $r;
                }
                

                хотя тоже самое можно сделать двумя, без всяких циклов:

                function toList_upgrade($list, $and='and') {
                	$last = sizeof($list)>1 ? " {$and} ".array_pop($list) : '';
                	return implode(', ', $list).$last;
                }
                

                тоже самое и с остальными…
                сложные функции конечно лучше брать готовые, а такие простые уж набросать дело нескольких минут.
                  –1
                  что-то мне подсказывает, что implode работает так же, как и конкатенация в toList()
                    0
                    1) в любом случае, implode склеит массив быстрее чем перебор и склеивание вручную
                    2) да и объем функции уменьшился в два раза.
                    да и дело даже не в этом.
                    а в том что фреймворки стали модными, а встроенные в САМ язык функции некоторые так и не могут осилить, и городят трехэтажные функции, даже для элементарных задач (причем этим грешат и сами создатели фреймворков некоторых)
                  0
                  Почему вынужден? Не хочет — пусть не использует.
                0
                неплохо бы такие хелперы выделять в отдельную библиотеку, чтобы пользоваться могли им и в других фреймворках
                  0
                  Можно скопировать файлик с хелпером и подключать его в своих приложениях. Никто мешать не будет))
                    0
                    ну мало ли, вдруг к этим файлам нужны другие файлы, а к ним третьи. если вы когда нибудь устанавливали проги под *nix, то поймете какой это гемор :)
                    а тут маленькая библиотечка хелперов без левых зависимостей
                      0
                      Согласен с вами, особо не углублялся в архитектуру кейка но метод наследования классов там немного закручен и не так очевиден как в зенде. Меня раздражает тот факт что в большинстве случаев необходимо создавать обьект перед тем как вызвать какой нибудь метод скажем из хелперов, хотя ничего не мешает ему вызыватся статически.

                      вот пример:
                      function convert($serverTime, $userOffset) {
                      $serverOffset = $this->serverOffset();
                      $gmtTime = $serverTime — $serverOffset;
                      $userTime = $gmtTime + $userOffset * (60*60);
                      return $userTime;
                      }
                      почему бы не сделать так:

                      function convert($serverTime, $userOffset) {
                      return ($serverTime — self::serverOffset()) + $userOffset * 3600;
                      }

                        0
                        Сдается мне вы совсем не углублялись в структуру кейка. В большинстве случаев нет необходимости создавать объект чтобы вызвать метод.
                        А приведенный вами пример абсолютно ничего не показывает.

                        А что касается зенда так он больше похож на набор библиотек а не на фреймворк. Хотя в последнее время ситуация вроде улучшается.
                          0
                          Пытался но с 3х попыток не подружился полностью, решил собрать собственный велосипед на магнитной подушке %)
                          Может вы обьясните тогда, как воспользоваться тем же методом TimeHelper::convert($time,$ofset);
                          без классов AppHelper, Helper, Overloadable, Object?

                          А в своем примере я хотел подчеркнуть что serverOffset() целессобразней вызывать статически так как к обьекту она никакого отношения не имеет да и умножать 60*60 безсмысленная трата ресурсов.
                        0
                        Большинство методов будет работать без зависимостей. А вообще не составит большого труда узнать зависимости. Там не совсем *nix)

                  Только полноправные пользователи могут оставлять комментарии. Войдите, пожалуйста.

                  Самое читаемое