Знакомимся с Хелперами

Комментарии: 9  Просмотры: 16 643

Думаю все из вас, уважаемые читатели, имеют небольшие куски кода, которые выполняют определенные задачи и копируются из проекта в проект, позволяя не изобретать каждый раз велосипед, а пользоваться уже готовым (кодом, не велосипедом). В Кохане они называются Хелперами (англ. Helpers — помощники) и представляют из себя набор классов. В каждом классе находится набор статических методов, посвященных решению определенного круга задач. Если это класс-Хелпер для работы с датами, то в нем будут методы только для работы с датами. Поскольку методы статические, нам нет нужды создавать экземпляр класса. Мы просто обращаемся к методу и получаем интересующий нас результат. Все, что нам нужно знать — это название класса, название метода, какие параметры нам нужно передать и какие параметры мы получим.
Например:

$message = Arr::get($_POST, 'message', '');

Это по сути тоже самое, что и тернарная операция (а раньше я так и писал, позволяет избежать ворнинга, знаете ли):

$message = isset($_POST['message'])? $_POST['message'] : '';

В данном случае Хелпер предназначен для работы с массивами, название класса Хелпера — «Arr», название статического метода — «get». Естественно данный метод позволяет работать не только с массивом $_POST и в этом его универсальность. Я специально рассказываю все это очень подробно, так как Хелперов очень много, методов в них еще больше и если рассматривать каждый метод каждого Хелпера, то это затянется еще уроков на десять. Тем более, что каждый метод и так имеет очень подробное описание с примерами (!) в комментарии к нему.
Лежат Хелперы в папке system/classes/kohana (вообще они изначально лежат в папке system/classes, но наследуются из system/classes/kohana). Название файла совпадает с названием класса. Кстати говоря, здесь лежат не только Хелперы, но и другие классы Коханы. В старых версиях фреймворка, а также в небезизвестном фреймворке CodeIgniter, Хелперам выделялась отдельная папка. Ну а здесь все свалили в кучу, по всей видимости для упрощения автозагрузки (autoload-а) классов.
Итак, находим файл arr.php, открываем его. Находим метод get:

	/**
	 * Retrieve a single key from an array. If the key does not exist in the
	 * array, the default value will be returned instead.
	 *
	 *     // Get the value "username" from $_POST, if it exists
	 *     $username = Arr::get($_POST, 'username');
	 *
	 *     // Get the value "sorting" from $_GET, if it exists
	 *     $sorting = Arr::get($_GET, 'sorting');
	 *
	 * @param   array   array to extract from
	 * @param   string  key name
	 * @param   mixed   default value
	 * @return  mixed
	 */
	public static function get($array, $key, $default = NULL)
	{
		return isset($array[$key]) ? $array[$key] : $default;
	}

И видим, что комментариев тут больше, чем самого кода :) . Зато сразу понятно, что метод принимает три параметра (причем третий — не обязательный): массив, название ключа этого массива и значение, которое вернется, если такого ключа в массиве не окажется (по умолчанию возвращается NULL).
Если нам нужно получить не одно значение массива, а несколько, то, чтобы не вызывать несколько раз метод get, мы можем использовать метод extract, который работает практически также, только вторым параметром передается уже не один ключ, а массив ключей. И на выходе мы получим не одно значение, а массив значений, где отсутствующим ключам будет также присвоено значение переменной $default. Опять же, в комментариях все это подробно, с примерами, расписано.
В следующем уроке я расскажу о самых интересных, на мой взгляд, Хелперах, которые могут пригодиться в разработке проекта. Полезность некоторых Хелперов вызывает у меня некоторые сомнения, например, я никогда не пользуюсь Хелпером «Form» для генерации формы и элементов форм, но кто-то возможно пользуется. Зато Хелперы «Arr», «Date», «Cookie», «UTF8″, «Upload» и некоторые другие используются постоянно. В комментариях вы можете указать, какие Хелперы вы считаете наиболее интересными и я постараюсь остановиться на них подробнее. Удачи.
Поскриптум: Кстати говоря, некоторые Хелперы мы с вами уже использовали, только не заостряли внимания на этом. Например, в уроке Заготовка для блога – Часть 2 использовался Хелпер «Url» и его метод «site» для формирования ссылок в меню.

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


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

Не оч понял, вот я хочу вытащить название стати с использованием Arr::get(), сделал так

if($id) {

$content = View::factory(‘pages/article’)
->set(‘article’,$id)
->bind(‘comments’,$comments)
->bind(‘test’,$arr);

$arr = Arr::get($_GET,’id’);

Результат нулевой, подскажите в чём я запутался)) Думаю другим тоже будет интересен пример реализации.

Пример взял от балды, то, что параметр можно вытаскивать с помощью $this->request->param() знаю)

Вы несколько путаете )
Arr::get() достает данные из массивов. Если бы в адресной строке стояло что-то вроде
mysite.ru/articles?id=5
тогда да, сработало бы, т.к. id попало бы в гет-массив $_GET['id']=5
А то, что сейчас в адресной строке (ЧПУ) не является GET-массивом.

Понял, спасибо))

А вот случай с массивом $_POST — в дальнейшем для обработки форм логично использовать данный метод? Или будет потом ещё что то по удобнее?

Да, хелпер Arr.
Вот тут про него
http://kohanaframework.su/helpers/helpers_arr
подробнее

>> я никогда не пользуюсь Хелпером «Form»

А каковы причины? На буржуйских форумах в примерах часто используют этот хелпер…

Визуально проще работать. Но я ни в коем случае не запрещаю им пользоваться :)

Взяли бы и написали бы тогда по нему урок <_<

Доброго времени суток, может не совсем по теме, но очень меня мучает вопрос >>>
Зачем в kohana в папке system/classes лежат пустые классы которые полностью наследуют(не добавляют и не переопределяют) классы из папки system/classes/kohana?
Может как то таким образом достигается дополнительная безопасность(защита)?

Здесь встретил в тексте статьи -> здесь и спрашиваю.
Заранее спасибо!



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

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