Русскоязычный форум, посвященный фреймворку Kohana

Все о фреймворке Kohana. Обсуждение уроков, документации.
Текущее время: 29 мар 2024, 01:39

Часовой пояс: UTC + 4 часа [ Летнее время ]




Начать новую тему Ответить на тему  [ Сообщений: 11 ]  На страницу 1, 2  След.
Автор Сообщение
 Заголовок сообщения: Расширяем Хелперы
СообщениеДобавлено: 01 май 2012, 23:29 
Не в сети
Администратор
Аватара пользователя

Зарегистрирован: 12 фев 2012, 01:02
Сообщения: 462
Урок в котором описывается, как создавать свои классы-помощники и расширять уже существующие.
Ссылка на урок http://kohanaframework.su/helpers/extending_helpers

_________________
kohanaframework.su - обучение фреймворку Kohana


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Расширяем Хелперы
СообщениеДобавлено: 25 апр 2013, 10:11 
Не в сети
Бывалый
Аватара пользователя

Зарегистрирован: 11 апр 2013, 14:09
Сообщения: 162
Не получается создать свой хелпер. Объясните в чем причина. Нашел 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

_________________
Они плакали и кололись, но продолжали есть кактус!


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Расширяем Хелперы
СообщениеДобавлено: 25 апр 2013, 10:41 
Не в сети
Бывалый
Аватара пользователя

Зарегистрирован: 11 апр 2013, 14:09
Сообщения: 162
Тек, ошибку преодолел, немного изменив хелпер:
Код:
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`]; Может я что-то не понимаю в ООП и у меня проблема в синтаксисе. Помогите разобраться пожалуйста.

_________________
Они плакали и кололись, но продолжали есть кактус!


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Расширяем Хелперы
СообщениеДобавлено: 25 апр 2013, 12:14 
Не в сети
Бывалый
Аватара пользователя

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

_________________
Майкл Джордан играет в баскетбол. Чарльз Мэнсон убивает людей. Я пишу код. У каждого свой талант.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Расширяем Хелперы
СообщениеДобавлено: 25 апр 2013, 13:30 
Не в сети
Бывалый
Аватара пользователя

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

_________________
Они плакали и кололись, но продолжали есть кактус!


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Расширяем Хелперы
СообщениеДобавлено: 25 апр 2013, 16:50 
Не в сети
Бывалый
Аватара пользователя

Зарегистрирован: 02 апр 2013, 16:26
Сообщения: 474
Откуда: Сергиев Посад
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)

_________________
Майкл Джордан играет в баскетбол. Чарльз Мэнсон убивает людей. Я пишу код. У каждого свой талант.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Расширяем Хелперы
СообщениеДобавлено: 06 май 2013, 11:39 
Не в сети
Бывалый
Аватара пользователя

Зарегистрирован: 11 апр 2013, 14:09
Сообщения: 162
Вот это уже более понятный и развернутый ответ. Хелперы оч. удобная штука, если не увлекаться конечно)

_________________
Они плакали и кололись, но продолжали есть кактус!


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Расширяем Хелперы
СообщениеДобавлено: 09 май 2013, 02:11 
Не в сети
Администратор
Аватара пользователя

Зарегистрирован: 24 июл 2012, 18:00
Сообщения: 701
Откуда: Murom, Russia
А если увлекаться? :)


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Расширяем Хелперы
СообщениеДобавлено: 13 май 2013, 10:37 
Не в сети
Бывалый
Аватара пользователя

Зарегистрирован: 11 апр 2013, 14:09
Сообщения: 162
То стандартные функции php в хелперах будешь переписывать)

_________________
Они плакали и кололись, но продолжали есть кактус!


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Расширяем Хелперы
СообщениеДобавлено: 13 май 2013, 14:26 
Не в сети
Бывалый
Аватара пользователя

Зарегистрирован: 02 апр 2013, 16:26
Сообщения: 474
Откуда: Сергиев Посад
они и так доступны и любого места

_________________
Майкл Джордан играет в баскетбол. Чарльз Мэнсон убивает людей. Я пишу код. У каждого свой талант.


Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 11 ]  На страницу 1, 2  След.

Часовой пояс: UTC + 4 часа [ Летнее время ]


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 4


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  
cron
Все о фреймворке Kohana  | 
Powered by phpBB® Forum Software © phpBB Group