Автозагрузка классов
  • bostonboston Апрель 2011
    Всё таки думаю стоит добавить автозагрузку классов, а то поднадоело отслеживать все эти загрузки часть из которых дублируется либо не нужна.
  • ArkadiyArkadiy Апрель 2011
    Вещь полезная, желательно чтобы была возможность в компонентах добавлять свои пути для автозагрузки.
  • bostonboston Апрель 2011
    добавлять свои пути - в плане динамически или в стартовой конфигурации?
  • ArkadiyArkadiy Апрель 2011
    Ну например, показал автозагрузчику в начале странички путь до своих библиотек, потом он в случае необходимости подключает их по ходу действия, либо дать четко регламентированное место, где должны лежать классы внутри компонента.
  • bostonboston Апрель 2011
    Явно указывать дополнительный ассоциативный список класс=>путь-до-файла сейчас нельзя. Системные библиотеки прописаны уже в самом автозагрузчике, а остальные он ищет в зависимости от имени класса, точнее от преффикса. Как окончательно устаканится файловая структура - пропишу правила именования классов и расположения их в ФС для адекватной работы автозагрузчика.

    Пока можно посмотреть принцип работы загрузчика тут: https://github.com/joostina/joostina/blob/master/core/autoloader.php
  • ArkadiyArkadiy Апрель 2011
    У Котерова в учебнике описан простой способ автолоадера, по правилам написания имен, применяемых в PEAR. Насколько я помню там путь состоит из двух частей:
    1. Путь до хранилища библиотек
    2. Путь до файла библиотеки в хранилище.

    Например чтобы подключить класс, находящийся в файле
    core/libraries/inputfilter.php
    путь до хранилища будет JPATH_BASE.DS.'core'
    Путь до файла библиотеки в хранилище находится в имени класса, т.е. класс должен называться libraries_inputfilter
    При задействовании класса libraries_inputfilter автолоадер разбивает имя класса на части по "_" (или просто заменяет "_" на слеш) и выстраивает путь JPATH_BASE.DS.'core'.DS.'libraries'.DS.'inputfilter'.'.php'

    По-моему просто и сердито. Если приделать к автолоадеру возможность добавлять пользовательские пути в массив путей, то получится совершенно универсальная функция, позволяющая подключить любой класс в любом месте системы.
  • bostonboston Апрель 2011
    Сейчас тоже можно любой класс в любом месте системы подключить :)
    Только имена классов не должны быть такими сложными и длинными как в предложении Котерова, у него всё таки больше ориентированно на другие области, а не жесткую структуру CMS.

    На данным этапе у нас такие правила именования и расположения классов:

    joosText:
    - префикс joos, значит системная библиотека.
    - название библиотеки - Text. lower => text
    - системные библиотеки расположены: core/libraries/
    -- автолоадер формирует путь: core/libraries/text.php

    actionsBlog:
    - префикс actions, значит контроллер фронта
    - название обслуживающего компонента - Blog. lower => blog
    - компоненты расположены в каталоге: app/components
    -- автолоадер формирует путь: app/components/blog/controller.blog.php

    actionsAdminBlog:
    - префикс actionsAdmin, значит контроллер фронта
    - название обслуживающего компонента - Blog. lower => blog
    - компоненты расположены в каталоге: app/components
    -- автолоадер формирует путь: app/components/blog/controller.admin.blog.php

    Blog:
    - префикса нет, значит это модель
    - название модели Blog. lower => blog
    - файлы моделей расположены в каталоге соответствующего имении компонента: app/components/{name}/models/
    -- автолоадер формирует путь: app/components/blog/models/model.blog.php

    На подходе автозагрузка для actionsAjaxBlog, actionsAjaxAdminBlog, BlogCategory:
    actionsAjaxBlog -> app/components/blog/controller.blog.ajax.php
    actionsAjaxAdminBlog -> app/components/blog/controller.admin.blog.ajax.php
    BlogCategory -> app/components/blog/models/model.category.php

Добро пожаловать!

Похоже, что Вы здесь впервые. Если хотите поучаствовать, нажмите на одну из этих кнопок!

Войти Зарегистрироваться

В теме отметились