За последние 24 часа нас посетили 17594 программиста и 1590 роботов. Сейчас ищут 1383 программиста ...

Алгоритм подключений классов в MVC

Тема в разделе "Решения, алгоритмы", создана пользователем VLK, 21 май 2015.

  1. VLK

    VLK Старожил

    С нами с:
    15 дек 2013
    Сообщения:
    3.010
    Симпатии:
    58
    Для общего развития и пополнения знаний решил написать свое совсем небольшое MVC, возможно в дальнейшем буду им пользоваться для каких-нибудь мелочей.

    хочу обойтись без namespace и хочу что бы классы подключались автоматически, т.е. через __autoload()

    с папками в которых хранятся классы MVC и контроллеры, там проблем нет, там файлы с именами идентичными классам. А вот с моделями я хочу сделать так, в папке models могут быть как файлы с моделями (файлы с именами идентичными классам) так и папки в которых будут располагаться несколько моделей под один контроллер (опять же файлы с именами идентичными классам).

    Например:
    Допустим есть контроллер UserController, и для него будут модели RegistrationModel, LoginModel и еще пару, а так же базовая для них модель UserBaseModel, от которой будут расширяться регистрация, авторизация и т.д.


    Вот уже голову изломал, как все это описать в __autoload() что бы подключались и просто модели в папке models и файлы находящиеся подпапках.

    Как варианты решения:
    1. называть папку так же как и базовую модель (UserBaseModel) а вот подключение модели осуществлять через метод, что то типа:
    Код (PHP):
    1. $model = getModel('UserBaseModel/LoginModel');
    а если базовых моделей будет несколько? шах и мат.

    2. при старте MVC считывать все имена папок в папке models и потом по всем папкам искать, все вроде хорошо, но внутри мне что то говорит что это костыли.


    Что подскажите?
     
  2. runcore

    runcore Старожил

    С нами с:
    12 окт 2012
    Сообщения:
    3.625
    Симпатии:
    158
    обо что тут ломать голову?
    ищи по имени класс и в папке основной и в подпапках. что сложного?
     
  3. VLK

    VLK Старожил

    С нами с:
    15 дек 2013
    Сообщения:
    3.010
    Симпатии:
    58
    т.е. каждый раз перебирать все папки находящиеся в папке models?
     
  4. runcore

    runcore Старожил

    С нами с:
    12 окт 2012
    Сообщения:
    3.625
    Симпатии:
    158
    можешь сам, можешь прописать в include_path
     
  5. VLK

    VLK Старожил

    С нами с:
    15 дек 2013
    Сообщения:
    3.010
    Симпатии:
    58
    т.е. подключать вот так:
    Код (PHP):
    1. $model = getModel('UserBaseModel/LoginModel'); 
    из этого кода я выцепляю имя папки UserBaseModel, потом в методе getModel:
    Код (PHP):
    1. $temp = get_include_path(); // вытаскиваю
    2. set_include_path($MAIN_DIR.'/UserBaseModel'); // задаю новое место
    3.  
    4. // далее подключаю класс LoginModel
    5. // ...
    6.  
    7. // после того как оно подключено возвращаю все назад
    8. // ну или при помощи restore_include_path()  
    такой алгоритм? и если такой, а это не опасно? :)
     
  6. runcore

    runcore Старожил

    С нами с:
    12 окт 2012
    Сообщения:
    3.625
    Симпатии:
    158
    ну раз тебе известно имя папки то что мешает в __autoload подключить класс ? путь же получается известен. ?