ФорумПрограммированиеPHP для идиотов → Профи обосрались - 2. Partial classes, base functions extending

Профи обосрались - 2. Partial classes, base functions extending

  • phpdude

    Сообщения: 26646 Репутация: N Группа: в ухо

    Spritz 28 апреля 2010 г. 2:19

    народ, в общем смотрите идея. есть конструктор форм тут послед время часто такое обсуждают и объяснять что это не придется, а если придется - мне этот собеседник просто не интересен.

    в чем прикол, допустим есть модульная система в виде автозагрузки компоновки своих компонентов на лету, другими словами - это не набор if/switch/else. допустим есть модуль (компонент) Pages, который имеет форму радектирования/удаления/добавления типа данных - страница, и есть модуль mod_seo, который хочет к любому (в пределах реализованного естественно) типу данных добавить свои поля в редактор типа элемента данных.

    Круто, скажете вы что я КО и тп, что я открыл америку и тп, используй наследование могут произнести профи, да это круто, но в автокомпонуещейся системе это невозможно, откуда система может знать что конечная инстанция элемента данных Pages - seo urls modul'ь? правильно - ниоткуда, это надо явно указывать что стирает всю идеологию системы. и тут я вспомнил … про .net :)

    там есть такое понятие Partial Classes, то есть один класс может быть описан более чем в 1 файле, ахуенно, ага :)

    в еботе пыхе увы этого нет, а хочется. как пошел я, я просто создаю еще файлик, допустим конструктор формы у меня называется FO_Pages.php, а я создаю FO_Pages.part.Sefurls.php

    ну и описываю там

    <?php
    class FO_Hotels_Sefurls extends FormObject_Base
    {
    public function __construct()
    {
    $this->addField(new FOField_Textbox("sef_slug", "URL"), "SEO");
    }
    }


    и тут меня осенило, может тупо в конструктор этого класса передавать объект формы которую он расширяет? и вот когда писал только что понял, что это хуета, ибо небудет понятно чьи поля от какой формы …. ведь эекстендеры(ага, пенис :D) независят от главной формы … видимо придется делать нечто типа адаптера и каллбак функции для обработки событий формы …

    бля короче ниухя вы мне наверное не подскажете, описал хотя бы идею, мб кому то пригодится :)

    явно кто нить пизданет)

    ку, дуд.
    Сапожник без сапог
  • Абырвалг

    Сообщения: 6480 Репутация: N Группа: Джедаи

    Spritz 28 апреля 2010 г. 4:18, спустя 1 час 59 минут 23 секунды

    я нихуя не понял

    попробуй через event'ы сделать.

    $eventManager->notify('modules.backend.page.prepare_form', array($myFormGenerator));

    о, редактор бб-кодов покрасивше стал.

    Пойду-ка я спать
  • phpdude

    Сообщения: 26646 Репутация: N Группа: в ухо

    Spritz 28 апреля 2010 г. 4:19, спустя 26 секунд

    Абырвалг, ты прав, ты нихуя не понял :)
    Сапожник без сапог
  • artoodetoo

    Сообщения: 5147 Репутация: N Группа: в ухо

    Spritz 28 апреля 2010 г. 8:20, спустя 4 часа 1 минуту 2 секунды

    ОК, поиграем в КО.
    Если уж бросаться модными словами, то твой модуль seo  — это наверное Декоратор и Поведение в одном флаконе.
    Behavior-ы аттачатся к объекту с целью реакции на события. Важно, что все бихэвиоры должны подключаться в конструкторе расширяемого класса (списком из конфига???) иначе они проебут какое-нибудь событие. Если что-то может быть проебано, оно будет проебано.



    class CustomForm
    {
       public function __construct()
       {
           foreach (Config::getBehaviorList(get_class($this)) as $behaviorName) {
               new $behaviorName($this);
    }
       }
       public function addEvent($name, $callback) { … }
       public function raiseEvent($name) {…}
    }

    class CustomFormBehavior
    {
       protected $_owner;

       public function __construct($owner)
       {
           $this->_owner = $owner;
           // все методы с именами onXxx - обработчики событий
           foreach (get_class_methods($this) as $m) {
               if (stripos($m, 'on') === 0) {
                   $owner->addEvent($m, array($this, $m));
               }
           }
           // …
       }
    }

    class SeoDecorator extends CustomFormBehavior
    {
       public function onBuildHtmlHeader() {…}
    }

    ιιlllιlllι унц-унц
  • phpdude

    Сообщения: 26646 Репутация: N Группа: в ухо

    Spritz 28 апреля 2010 г. 9:00, спустя 40 минут 44 секунды

    artoodetoo, поздно, я уже сделал)
    Спустя 45 сек.
    (списком из конфига???)


    нет, нет!! и НЕТ!!! это первое правило, конфига нет и не будет
    Сапожник без сапог
  • artoodetoo

    Сообщения: 5147 Репутация: N Группа: в ухо

    Spritz 28 апреля 2010 г. 13:12, спустя 4 часа 11 минут 29 секунд

    ну ты бы хоть показал чего сделал.
    и, это… огласи остальные правила )))
    ιιlllιlllι унц-унц
  • phpdude

    Сообщения: 26646 Репутация: N Группа: в ухо

    Spritz 28 апреля 2010 г. 13:14, спустя 2 минуты 35 секунд


    ну ты бы хоть показал чего сделал.
    и, это… огласи остальные правила )))
    в чем прикол, допустим есть модульная система в виде автозагрузки компоновки своих компонентов на лету, другими словами - это не набор if/switch/else. допустим есть модуль (компонент) Pages, который имеет форму радектирования/удаления/добавления типа данных - страница, и есть модуль mod_seo, который хочет к любому (в пределах реализованного естественно) типу данных добавить свои поля в редактор типа элемента данных.
    конфига нет, то есть он есть для служебных целей, но не для конфигурирования апликухи в целом, там настройки смтп и тп хранятся, пароли к базе, чисто служебка
    Сапожник без сапог
  • artoodetoo

    Сообщения: 5147 Репутация: N Группа: в ухо

    Spritz 28 апреля 2010 г. 14:02, спустя 47 минут 48 секунд

    ну так как ты скомпоновал всё это в кучу? просто в вызывающем коде перечислил свои seo + dao + cacao ?
    ιιlllιlllι унц-унц
  • phpdude

    Сообщения: 26646 Репутация: N Группа: в ухо

    Spritz 28 апреля 2010 г. 14:09, спустя 6 минут 39 секунд

    просто в вызывающем коде перечислил свои seo + dao + cacao ?

    нет, просто имена файлов все это компонуют за меня)

    не люблю руками писать конфиги и прочую еботу.

    ну и система приоритетов для DI
    Сапожник без сапог
  • Абырвалг

    Сообщения: 6480 Репутация: N Группа: Джедаи

    Spritz 28 апреля 2010 г. 15:47, спустя 1 час 37 минут 41 секунду

    так, давай еще разок. У тебя есть модуль Pages и модуль SEO. Второй должен добавить к форме добавления/редактирования элементов первого пару полей?
  • phpdude

    Сообщения: 26646 Репутация: N Группа: в ухо

    Spritz 28 апреля 2010 г. 15:53, спустя 6 минут 10 секунд


    так, давай еще разок. У тебя есть модуль Pages и модуль SEO. Второй должен добавить к форме добавления/редактирования элементов первого пару полей?
    и обработать их сам естественно :)
    Сапожник без сапог
  • Абырвалг

    Сообщения: 6480 Репутация: N Группа: Джедаи

    Spritz 28 апреля 2010 г. 16:04, спустя 10 минут 44 секунды

    значит
    Абырвалг, ты прав, ты нихуя не понял :)

    все я правильно понял

    ну так это делается через events
  • phpdude

    Сообщения: 26646 Репутация: N Группа: в ухо

    Spritz 28 апреля 2010 г. 16:05, спустя 1 минуту 46 секунд

    Абырвалг, идея чуток другая, евенты это евенты, формы это формы, по крайней мере у меня в голове. курицы отдельно, а их яйца тоже
    Сапожник без сапог
  • Ewg777

    Сообщения: 510 Репутация: N Группа: Джедаи

    Spritz 28 апреля 2010 г. 16:11, спустя 5 минут 43 секунды

    там есть такое понятие Partial Classes, то есть один класс может быть описан более чем в 1 файле, ахуенно, ага :)

    в еботе пыхе увы этого нет, а хочется.

    http://rmcreative.ru/blog/post/mixin-v-php Правильно понял?
  • phpdude

    Сообщения: 26646 Репутация: N Группа: в ухо

    Spritz 28 апреля 2010 г. 16:16, спустя 4 минуты 57 секунд

    Ewg777, помню эту тему, да в общем то я подумал как сделаю/почти сделал, это мне ночью делать было нехуй, попиздеть хотелось вот и поднял тему :D
    Сапожник без сапог

Пожалуйста, авторизуйтесь, чтобы написать комментарий!