За последние 24 часа нас посетили 22483 программиста и 1587 роботов. Сейчас ищут 829 программистов ...

Ручная MVC: общая и локальная папки views. Автопоиск view?

Тема в разделе "Прочие вопросы по PHP", создана пользователем Pran, 24 май 2012.

  1. Pran

    Pran Активный пользователь

    С нами с:
    15 янв 2011
    Сообщения:
    39
    Симпатии:
    0
    Представим, что есть общая папка app/views и папка app/modules/Module_Name/views. В модуле вызывается self::createRender(array $blocks = array()), который автоматом навешивает второй из упомянутых путей:

    Код (Text):
    1.  
    2. public function createRender(array $blocks = array()) {
    3.  
    4.     return new Render($blocks, $this->viewspath);
    5. }
    При этом viewspath инициализируется как

    Код (Text):
    1.  
    2.     ob_start();
    3.     echo dirname(__FILE__), DIRECTORY_SEPARATOR, get_called_class(), DIRECTORY_SEPARATOR, 'views';
    4.  
    5.     $this->viewspath = ob_get_clean();
    где dirname(__FILE__) - это путь к файлу абстрактного класса Module, расположенного в папке modules в файле Module.php, а get_called_class() - имя потомка. Так, если потомок - модуль Forum, то для него createRender попытается подключить нечто из папки modules/Forum/views. Если там не найдёт (file_exists), обратится к общей папке.

    Однако, явное использование file_exists кажется довольно грубым: при включенном кэше всё равно будет проверяться наличие файла. Имеет ли смысл вызывать set_include_path для внедрения пути в папке modules? Подключить так три модуля сразу и они начнут лазить друг к другу в представления. Может, есть некое элегантное решение?