Контент


Ko3: знаете ли вы? Часть 4

  1. В Kohana популярны методы, являющиеся одновременно и сеттерами, и геттерами. Например, в классе Request это query(), post(), headers() и т.д. В них можно передать как массив значений, так и отдельную пару. И вот тут-то есть нюанс:

    $request->query(array('foo' => 'bar')); // через массив
    $request->query('foo', 'bar');          // через отдельное значение

    Данные два примера не равнозначны. Передача массива полностью заменит содержимое свойства $_query в объекте $request, а второй вызов заменит только $_query['foo']. Следует помнить об этом.

  2. Как известно, в Kohana существует несколько драйверов для внешних запросов (External Request): Curl, PECL_HTTP и Stream. По умолчанию используется Curl. При необходимости это легко поменять — взгляните на статическое свойство Request_External::$client. В него надо внести имя драйвера (‘Request_Client_Curl’, ‘Request_Client_Http’ или ‘Request_Client_Stream’).
  3. При создании выпадающих списков с помощью Form::select() можно создавать группы значений (тэг OPTGROUP):

    // генерируем список 
    echo Form::select(
        'foo', 
        array(
            'будние' => array(
                '1' => 'пн',
                '2' => 'вт',
                // ...
            ),
            'выходные' => array(
                '6' => 'сб', 
                '7' => 'вс'
            )
        ));

    Заголовок группы берется из имени ключа для массива значений (т.е. в моем примере это ‘будние’ и ‘выходные’).

  4. Полагаю, все мы пользуемся полезными методами Arr::get() и Arr::path(), позволяющими извлекать элементы массива. А знаете ли вы, что Arr::path() поддерживает так называемые wildcards?

    $kohana_versions = array(
    	'3.0'  => array(
    		'date'   => '2009-09-17',
    		'name'   => 'renaissance',
    	),
    	'3.1'  => array(
    		'date'  => '2011-02-07',
    		'name'  => 'merle',
    	),
    	'3.2'  => array(
    		'date'   => '2011-07-24',
    		'name'   => 'Kolibri',
    	),
    	'3.3'  => array(
    		'date'  => '2012-10-23',
    		'name'  => 'badius',
    	),
    );
     
    $releases = Arr::path($kohana_versions, '*.name');

    Массив $releases будет содержать значения полей name (то есть ‘renaissance’, ‘merle’ и т.д.) в том же порядке, как они шли в исходном массиве. Ключи не сохраняются. Проверка на дубликаты значений не производится.

  5. Будьте внимательны с редиректами в v3.3. Так как редиректы выполняются через выброс исключений типа HTTP_Exception, они могут быть отловлены блоками try...catch. Такие ситуации возможны при использовании модулей для работы с различными внешними API.
  6. Правило Valid::range() получило дополнительную функциональность. Теперь помимо просто нахождения в нужном диапазоне, можно проверять еще и диапазоны с заданным шагом. Для этого добавился еще один четвертый параметр $step:

    // предположим, что ожидается значение из диапазона [1, 3, 5, 7, 9]
    if (Valid::range(2, 1, 9, 2)) // FALSE
    if (Valid::range(3, 1, 9, 2)) // TRUE

    Параметр необязательный, без него правило работает как и в предыдущих версиях.

    Точнее говоря, сейчас оно иногда работает неправильно. Valid::range(1, 1, 9) вернет FALSE независимо от использования шага. Это известный баг, его поправят в 3.3.1.

Google Bookmarks Digg Reddit del.icio.us Ma.gnolia Technorati Slashdot Yahoo My Web News2.ru БобрДобр.ru RUmarkz Ваау! Memori.ru rucity.com МоёМесто.ru Mister Wong

Опубликовано в знаете ли вы.

Теги: , , , .


Комментарии (4)

Будьте в курсе обсуждения, подпишитесь на RSS ленту комментариев к этой записи.

  1. aktuba пишет:

    Про 5е знал до того, как я написал? Тогда почему этот пост появился так поздно?! (((

  2. biakaveron пишет:

    Я в свое время в твиттере об этом накалякал )) А посты «знаете ли вы» у меня по несколько месяцев пишутся. Нашел фичу — добавил ее в черновик, и так пока более-менее не соберется что-то. Целенаправленно искать такие вещи довольно сложно и нудно.

  3. aktuba пишет:

    Не видел, жаль… Много времени из-за этого убил (

  4. klay пишет:

    пост замечательный



Можно включить подсветку кода: <code><pre lang="">...</pre></code>
Разрешены некоторые HTML теги

или используйте trackback.