Русскоязычный форум, посвященный фреймворку Kohana
http://forum.kohanaframework.su/

Расширяем Хелперы
http://forum.kohanaframework.su/viewtopic.php?f=37&t=147
Страница 1 из 2

Автор:  admin [ 01 май 2012, 23:29 ]
Заголовок сообщения:  Расширяем Хелперы

Урок в котором описывается, как создавать свои классы-помощники и расширять уже существующие.
Ссылка на урок http://kohanaframework.su/helpers/extending_helpers

Автор:  nkl [ 25 апр 2013, 10:11 ]
Заголовок сообщения:  Re: Расширяем Хелперы

Не получается создать свой хелпер. Объясните в чем причина. Нашел php-функцию для генерации guid (uuid) по стандарту RFC 4122. Вот её код:
Код:
public function create_guid()   //Генераци GUID 
   {     
      static $guid = '';
       $uid = uniqid("", true);
       $data = $namespace;
       $data .= $_SERVER[`REQUEST_TIME`];
       $data .= $_SERVER[`HTTP_USER_AGENT`];
       $data .= $_SERVER[`LOCAL_ADDR`];
       $data .= $_SERVER[`REMOTE_ADDR`];
       $data .= $_SERVER[`REMOTE_PORT`];
       $hash = strtoupper(hash(`ripemd128`, $uid . $guid . md5($data)));
       $guid = substr($hash,  0,  8).
          `-`.substr($hash,  8,  4).
          `-`.substr($hash, 12,  4).
          `-`.substr($hash, 16,  4).
          `-`.substr($hash, 20, 12);
       return $guid;
   }

Я значит создал файл application/classes/Hashgen.php и в нем записал следующее:
Код:
<?php defined('SYSPATH') or die('No direct script access.');

class Hashgen {

   public function create_guid()   //Генераци GUID
   {     
      static $guid = '';
       $uid = uniqid("", true);
       $data = $namespace;
       $data .= $_SERVER[`REQUEST_TIME`];
       $data .= $_SERVER[`HTTP_USER_AGENT`];
       $data .= $_SERVER[`LOCAL_ADDR`];
       $data .= $_SERVER[`REMOTE_ADDR`];
       $data .= $_SERVER[`REMOTE_PORT`];
       $hash = strtoupper(hash(`ripemd128`, $uid . $guid . md5($data)));
       $guid = substr($hash,  0,  8).
          `-`.substr($hash,  8,  4).
          `-`.substr($hash, 12,  4).
          `-`.substr($hash, 16,  4).
          `-`.substr($hash, 20, 12);
       return $guid;
   }
   
} //END OF Hashgen

Вызываю этот хелпер таким образом:
Код:
$user->user_id = Hashgen::create_guid();

и получаю ошибку rrorException [ Strict ]: Non-static method Hashgen::create_guid() should not be called statically, assuming $this from incompatible context

Автор:  nkl [ 25 апр 2013, 10:41 ]
Заголовок сообщения:  Re: Расширяем Хелперы

Тек, ошибку преодолел, немного изменив хелпер:
Код:
class Hashgen {

   public static $guid = '';
   
   public static function create_guid()   //Генераци GUID
   {
       $uid = uniqid("", true);
       $data = '';
       $data .= $_SERVER[`REQUEST_TIME`];
       $data .= $_SERVER[`HTTP_USER_AGENT`];
       $data .= $_SERVER[`LOCAL_ADDR`];
       $data .= $_SERVER[`REMOTE_ADDR`];
       $data .= $_SERVER[`REMOTE_PORT`];
       $hash = strtoupper(hash(`ripemd128`, $uid . $guid . md5($data)));
       $guid = substr($hash,  0,  8).
          '-'.substr($hash,  8,  4).
          '-'.substr($hash, 12,  4).
          '-'.substr($hash, 16,  4).
          '-'.substr($hash, 20, 12);
       return $guid;
   }
   
} //END OF Hashgen

Теперь получаю ошибку Undefined index на строку $data .= $_SERVER[`REQUEST_TIME`]; Может я что-то не понимаю в ООП и у меня проблема в синтаксисе. Помогите разобраться пожалуйста.

Автор:  WinterSilence [ 25 апр 2013, 12:14 ]
Заголовок сообщения:  Re: Расширяем Хелперы

nkl> это форум фреймворка, а твои вопросы носят скоре общий характер и лучше задавать их на форумах по изучению php дабы не заваливать форум левыми темами.
1. В данном случае ты не понимаешь что такое статически классы, надо прочесть http://www.php.net/manual/en/language.oop5.static.php.
2. $_SERVER[`REQUEST_TIME`] тут не скобки стоят, а тильда. сравни: ` и '. что как бы намекает что и общий курс php освоен не до конца

Автор:  nkl [ 25 апр 2013, 13:30 ]
Заголовок сообщения:  Re: Расширяем Хелперы

Этот код писал не я. Я выдрал его откуда-то из инета. То, что там должны быть апострофы вместо тильды я уже понял и без вас (уж элементарный синтаксис я знаю) и в принципе отказался от использования этой функции. Я воспользовался готовым решением, которое взял на форуме разработчиков. И почему это вы называете мой вопрос офтопом? Изначально то я спрашивал о том как правильно создать хелпер и почему мой не работает.

Автор:  WinterSilence [ 25 апр 2013, 16:50 ]
Заголовок сообщения:  Re: Расширяем Хелперы

nkl> офтоп потому? что обе ваши проблемы вытекали не из незнания фреймворка, а из-за незнания php.

Хэлперами обычно называют классы со статическими методами, ссылку на статические методы и атрибуты я дал. Единственное, что требует кохана (версия "из коробки" конечно) это чтобы файл именовался и располагался согласно правилам фреймворка т.е. находился в APPPATH/classes/, MODPATH/модуль/classes/, SYSPATH/classes/(не рекомендуется) или подпапках и назывался ИМЯ_КЛАССА.PHP_РАСШИРЕНИЕ и содержал класс ИМЯ_КЛАССА
например:
APPPATH/classes/Elements.php:
Код:
class Elements
{
    public static function menu( array $data =  null )
    {
         // some code
    }
}

ну и соответственно в нужном месте вызываем Elements::menu($somedata)

Автор:  nkl [ 06 май 2013, 11:39 ]
Заголовок сообщения:  Re: Расширяем Хелперы

Вот это уже более понятный и развернутый ответ. Хелперы оч. удобная штука, если не увлекаться конечно)

Автор:  Sergey [ 09 май 2013, 02:11 ]
Заголовок сообщения:  Re: Расширяем Хелперы

А если увлекаться? :)

Автор:  nkl [ 13 май 2013, 10:37 ]
Заголовок сообщения:  Re: Расширяем Хелперы

То стандартные функции php в хелперах будешь переписывать)

Автор:  WinterSilence [ 13 май 2013, 14:26 ]
Заголовок сообщения:  Re: Расширяем Хелперы

они и так доступны и любого места

Страница 1 из 2 Часовой пояс: UTC + 4 часа [ Летнее время ]
Powered by phpBB® Forum Software © phpBB Group
http://www.phpbb.com/