Хелперы Inflector и Url

Комментарии: 10  Просмотры: 14 644

Продолжаем изучать Хелперы и в этом уроке мы познакомимся с еще двумя их представителями: классом Inflector, предназначенным для работы с текстом, и классом Url, предназначенным для работы со ссылками.

Класс Inflector
Первые два метода класса Inflector позволяют превратить строку из нескольких слов в словосочетание в виде так называемой «Верблюжей нотации» и наоборот, из словосочетания в строку. Выглядит это следующим образом:

echo Inflector::camelize('my first site'); // Вернет myFirstSite
echo Inflector::decamelize('myFirstSite'); // Вернет my first site

Во-втором методе существует необязательный второй параметр — разделитель. По умолчанию соответствет пробелу.

Следующий метод «очеловечивает» словосочетания. Он так и называется — humanize и заменяет тире или знаки подчеркивания пробелами:

echo Inflector::humanize('my_first_site'); // Вернет my first site
echo Inflector::humanize('my-first-site'); // Вернет my first site

А вот метод underscore наоборот заменяет пробелы подчеркиваниями. Использовать метод также просто, как и предыдущие:

echo Inflector::underscore('my first site'); // Вернет my_first_site

Необходимость использования оставшихся методов находится под вопросом, так как данные методы предназначены для работы с английскими словами. Это методы преобразования существительных и глаголов в единственном числе во множественное и наоборот:

echo Inflector::singular('sites'); // Вернет site
echo Inflector::plural('site'); // Вернет sites

Также у этих двух методов есть необязательный второй параметр — количество.

echo Inflector::singular('sites', 5); // Вернет sites
echo Inflector::plural('site', 5); // Вернет sites

Как мы видим, в обоих случаях нам вернется множественное число. Это может быть полезно, когда заранее неизвестно в какую сторону делать преобразование (например, при подсчете посетителей на сайте или подсчете количества комментариев) и это избавляет нас от необходимости писать условие вида: «Если количество больше 1, используем метод plural, иначе используем метод singular«.
Эти методы также совершенно корректно работают со словами-исключениями, которые склоняются по другому, без добавления буквы «s» в конце (например, man-men, hero-heroes итд) и даже со словами, которые вообще не склоняются (money, work, water итд). Данные слова находятся в конфигурационном файле inflector.php. Если нужного вам слова в конфигурационном файле нет, вы можете его туда добавить (только скопируйте предварительно конфигурационный файл в папку Application).
Последний метод класса Inflector используется для выявления несклоняемых слов:

var_dump(Inflector::uncountable('spam')); // Вернет true
var_dump(Inflector::uncountable('site')); // Вернет false

Класс Url

В отличие от класса HTML класс Url более узко специализирован и предназначен только для работы со ссылками. Он содержит всего четыре метода.
Первый метод — title на первый взгляд похож на разобранный выше метод underscore класса Inflector, только замена происходит знаками тире, а не подчеркиваниями и заменяются все символы, которым в адресной строке делать нечего, а не только пробелы:

echo URL::title('My Blog Post'); // Вернет my-blog-post
echo URL::title('My &Blog / Post'); // Вернет my-blog-post

Совершенно необходимая вещь для формирования правильного адреса.
Второй метод — метод base. Принимает два необязательных параметра — протокол и указание в виде булева значения, выводить ли index.php в адресной строке или нет (не работает, если вывод index.php запрещен).

echo URL::base('https', TRUE); //Вернет https://kohana/ или https://kohana/index.php/ (если index.php разрешен)

Ну а сам базовый url нашего сайта вызывается так:

echo URL::base(); //Вернет /

Похожим функционалом обладает третий метод — метод site. Только принимает он уже три параметра. Сегмент адреса, так называемый Uri и уже знакомые нам протокол и булево значение.

echo URL::site('pages/article1'); //Вернет /pages/article1

Наконец, последний метод называется query и предназначен для построения адресной строки с GET-параметрами. Может быть полезен, когда эти параметры необходимы для формирования информации на странице, то есть используются отдельно от ЧПУ-сегмента. Принимает два параметра — массив и булево значение. Из массива собственно будут генерироваться GET-параметры.

echo URL::query(array('category' => 'hard', 'product' => 'ssd')); //?category=hard&product=ssd

Булево значение показывает, нужно ли перетирать текущие GET-параметры в строке. Если мы укажем true или ничего не укажем (так как по умолчанию и так стоит true), то при переходе по адресу http://kohana/?page=1 мы получим http://kohana/?page=1&category=hard&product=ssd, а если укажем false, то получим http://kohana/?category=hard&product=ssd. Думаю смысл понятен.
На этом все. В следующем уроке мы рассмотрим очень нужный и поэтому постоянно используемый Хелпер для работы с массивами — Arr. Он имеет очень много методов и самые интересные из них будут подробно разобраны.

<< Назад | Вперед >> | Обсудить на форуме


К записи оставлено 10 коммент.

Честно еще не читал этот урок, просто хотелось переговорить насчет других уроков =) даже специально зарегался =) Спасибо за ВСЕ что тут написано на портале очень где помогло =)..есть другие вопросы с которыми трудно разобраться =( вот пример Капча =) как ее добавить в validation ? я делаю так =( и это плохо =(
//$validatiom->rule(‘captcha’,'вот бы тут сделать проверку’) if($validation->check()){ if($this->action_captcha($validation['captcha'])){ $this->request->redirect(‘member/login’);

т.е. я делаю так
if($validation->check()){ if($this->action_captcha($validation['captcha'])){ $this->request->redirect(‘member/login’);

читай внимательно, что написано в документации, есть callback для этих целей.

или допустим есть ли замена в Kohana — Nested set ?

много вопросов )) просто раньше писал все сам и как то было проще, на времворке не сидел =( а то =) мне нравится =) но как всегда ест ьместа узкие =( и приходится капаться, вот допустим таже:
->filter(TRUE,’trim’);
->filter(TRUE, ‘htmlspecialchars’);
->rule(‘email’,'email_domain’);
не работает =( а на официалке написано =(

а у меня работает

наверное лучше и дальше писать все самому, рано еще браться за фреймворк. большинство не правилньо толкует природу использования фреймворков, и используют банально MVC + работу с БД и все, а остальное пишут свои велосипеды, или костыли. Думая что фреймворки сделаны для новичков если у них низкий порог вхождения. А разбираться никто не хочет, реализуйте себе MVC и класс для работы с БД и не нужен фреймворк, если не хотите в нем копаться. Код у коханы написан понятно и с большим количесвом коментариев. потому если чтоне понятно лезим в код и смотрим, что и как работает. Если смотря в код ничего не понимаешь, вывод один рано еще использовать фреймворк, учи php, oop, design patterns и потом таких вопросов не будет.

вот вот. я так и разбирался. непонятно, как работает — лезу в код. когда совсем край, тогда можно и спросить у кого-то более разбирающегося. ну а чтобы проще было новичкам, я создал этот ресурс. но все-таки свои мозги включать тоже надо, здесь только основы.

Такого рода вопросы (особенно не по теме урока и особенно с кодом, т.к. его тут режет) вам лучше все же задавать на форуме. Там специально созданы темы под обсуждение каждого урока и раздел Другое под вопросы общего характера.



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

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