Функции преобразования данных

Общие вопросы по использованию фреймворка. Если не знаете как что-то сделать и это про Yii, вам сюда.
Ответить
Аватара пользователя
greatdane
Сообщения: 408
Зарегистрирован: 2010.10.20, 14:05
Откуда: Электросталь
Контактная информация:

Функции преобразования данных

Сообщение greatdane »

У меня для старого сайта было написано несколько функций преобразования данных. Например, преобразование обычного формата даты MySQL (YYYY-MM-DD) в русский вариант:

Код: Выделить всё

public function rusDate($date)
  {
        $date = (string) $date;
        $day = substr($date, 8, 2);
        $year = substr($date, 0, 4);
        $month = substr($date, 5, 2);
        $month = (int) $month;
        $month_name = array (
                ' неизвестного месяца ',
                ' января ',
                ' февраля ',
                ' марта ',
                ' апреля ',
                ' мая ',
                ' июня ',
                ' июля ',
                ' августа ',
                ' сентября ',
                ' октября ',
                ' ноября ',
                ' декабря ',
        );
        $date_new = $day.$month_name[$month].$year.' г.';
        return $date_new;
  } 
Эта функция в идеале должна быть доступна почти всем контроллерам. Где прописать ее и как вызывать?
Аватара пользователя
TrustNik
Сообщения: 65
Зарегистрирован: 2009.10.25, 14:21
Откуда: Воронеж

Re: Функции преобразования данных

Сообщение TrustNik »

Можно засунуть в модель или засунуть в базовый контроллер, а от него наследовать контроллеры которые должны иметь доступ к этой функции.
Аватара пользователя
greatdane
Сообщения: 408
Зарегистрирован: 2010.10.20, 14:05
Откуда: Электросталь
Контактная информация:

Re: Функции преобразования данных

Сообщение greatdane »

Я пока и засунула в модели. Но это ж почти в каждую модель! Как-то это не комильфо...
А базовый контроллер - это который создается при автоматической генерации структуры в /protected/components/Controller.php?
Тогда вызывать функцию нужно будет как $this->rusDate($date)?
Прошу прощения за возможно дурацкие вопросы, просто только начинаю вникать во фреймворки, никогда раньше с ними не работала.
Аватара пользователя
TrustNik
Сообщения: 65
Зарегистрирован: 2009.10.25, 14:21
Откуда: Воронеж

Re: Функции преобразования данных

Сообщение TrustNik »

Но это ж почти в каждую модель! Как-то это не комильфо...
В вашем случае действительно лучше засунуть в базовый контроллер. В модель я засовываю метод когда он относиться только к этой модели.
А базовый контроллер - это который создается при автоматической генерации структуры в /protected/components/Controller.php?
Можно туда, а можно добавить BaseController отнаследованный от Controller и уже от BaseController наследовать свои контроллеры.
Тогда вызывать функцию нужно будет как $this->rusDate($date)?
Именно.
Аватара пользователя
Svyatov
Сообщения: 459
Зарегистрирован: 2010.08.12, 14:50
Откуда: Санкт-Петербург
Контактная информация:

Re: Функции преобразования данных

Сообщение Svyatov »

Неверная у вас логика :)
Ведь эти функции могут и в других приложениях использоваться, верно? Каждый раз их в базовый контроллер прописывать? Не разумно.

Имхо, стоит сделать отдельный класс со статическими функциями и кинуть его в компоненты. Получится то, что нужно. Обращаться можно будет как MyClass::rusDate($date).
Аватара пользователя
slavcodev
Сообщения: 3134
Зарегистрирован: 2009.04.02, 21:42
Откуда: Valencia
Контактная информация:

Re: Функции преобразования данных

Сообщение slavcodev »

Svyatov писал(а):Имхо, стоит сделать отдельный класс со статическими функциями и кинуть его в компоненты. Получится то, что нужно. Обращаться можно будет как MyClass::rusDate($date).
Могу, обсудить логичность твоей версии :) ИМХО лучше сделать поведение для модели, которое реализует конвертацию в afterFind или геттер для столбца БД. Поведение тоже очень легко подключается к будущим моделям.
Жду Yii 3!
Аватара пользователя
Svyatov
Сообщения: 459
Зарегистрирован: 2010.08.12, 14:50
Откуда: Санкт-Петербург
Контактная информация:

Re: Функции преобразования данных

Сообщение Svyatov »

mc-bear писал(а):
Svyatov писал(а):Имхо, стоит сделать отдельный класс со статическими функциями и кинуть его в компоненты. Получится то, что нужно. Обращаться можно будет как MyClass::rusDate($date).
Могу, обсудить логичность твоей версии :) ИМХО лучше сделать поведение для модели, которое реализует конвертацию в afterFind или геттер для столбца БД. Поведение тоже очень легко подключается к будущим моделям.
Тоже вариант, но у него есть один недостаток - он жестко привязывает нас к Yii, в то время как мой подход позволяет одну "библиотеку" использовать в любом фреймворке или даже в простом скрипте ;)
Аватара пользователя
slavcodev
Сообщения: 3134
Зарегистрирован: 2009.04.02, 21:42
Откуда: Valencia
Контактная информация:

Re: Функции преобразования данных

Сообщение slavcodev »

У него уже есть класс которые можно использовать в других фреймворках :) Он спрашивает как удобнее для Yii реализовать. Статический метод нужно будет писать в каждом представлении при выводи даты. А поведением нет. Просто подключил поведение один раз и все дата уже в нужном формате. Или отключил поведение и формат - исходный.
Жду Yii 3!
Аватара пользователя
Svyatov
Сообщения: 459
Зарегистрирован: 2010.08.12, 14:50
Откуда: Санкт-Петербург
Контактная информация:

Re: Функции преобразования данных

Сообщение Svyatov »

mc-bear писал(а):У него уже есть класс которые можно использовать в других фреймворках :) Он спрашивает как удобнее для Yii реализовать. Статический метод нужно будет писать в каждом представлении при выводи даты. А поведением нет. Просто подключил поведение один раз и все дата уже в нужном формате. Или отключил поведение и формат - исходный.
Ок, убедил, согласен :D
Аватара пользователя
slavcodev
Сообщения: 3134
Зарегистрирован: 2009.04.02, 21:42
Откуда: Valencia
Контактная информация:

Re: Функции преобразования данных

Сообщение slavcodev »

Уря, сегодня отпраздную по этому поводу! :lol:
Жду Yii 3!
Аватара пользователя
greatdane
Сообщения: 408
Зарегистрирован: 2010.10.20, 14:05
Откуда: Электросталь
Контактная информация:

Re: Функции преобразования данных

Сообщение greatdane »

Большое спасибо всем за ответы. Пока прописала в базовый контроллер.
А где почитать про поведения?
Аватара пользователя
slavcodev
Сообщения: 3134
Зарегистрирован: 2009.04.02, 21:42
Откуда: Valencia
Контактная информация:

Re: Функции преобразования данных

Сообщение slavcodev »

http://yiiframework.ru/doc/guide/ru/basics.component
http://yiiframework.ru/doc/guide/ru/extension.use

а так же можно посмотреть поведения из yiiext
Жду Yii 3!
Ответить