Как можно написать PHP-приложение с поддержкой модулей? - PullRequest
1 голос
/ 16 мая 2010

Я начинаю писать приложение на php с одним из моих друзей, и мне стало интересно, есть ли у вас какие-либо советы о том, как реализовать поддержку модулей в нашем приложении.

Или есть способ, как автоматически загружать модули, написанные на php, приложениями php? Или мне просто положиться на функцию __autoload?

И нам не нужны плагины, которые можно установить через веб-интерфейс, нам просто нужен какой-то умный способ связать веб-страницы нашего проекта с некоторыми классами (они будут отображать страницу), чтобы index.php мог вызвать правильный класс и получить сгенерированную подстраницу.

И мы не используем какие-либо фреймворки, по крайней мере, на данный момент.

Ответы [ 4 ]

1 голос
/ 17 мая 2010

Что касается автозагрузки, вы также можете использовать spl_autoload_register , чтобы определить несколько (более одной) функций автозагрузки, чтобы каждый модуль мог настроить свою собственную реализацию автозагрузки.

1 голос
/ 16 мая 2010

Ваш комментарий: автозагрузка в сочетании со строгим именованием файлов будет вполне достаточной в этом случае IMO.

Вы можете определить конкретное пространство имен (не в новом пути PHP 5.3 namespace, просто в смысле общего префикса имен), например, Module_* для имен классов модулей.

Затем вы можете организовать свои модули в каталогах с файлами классов, которые содержат ровно одно определение класса, например:

/modules/Mail/index.php   // defines class Module_Mail
/modules/Database/index.php   // defines class Module_Database
/modules/Image/index.php   // defines class Module_Image

Ваша функция автозагрузчика будет тогда, когда запрашивается класс Module_*:

$Database = new Module_Database("localhost", .....);

включает правильный файл из правильного каталога.

Так, например, Zend Framework делает это и делает это очень хорошо.

Рассмотрите возможность выбора более конкретного пространства имен, чем Module_, чтобы обеспечить совместимость с другими сценариями и приложениями, если это возможно в будущем.

Немного связано: Как вы организовываете и получаете доступ к своим вспомогательным объектам в проекте PHP?

1 голос
/ 16 мая 2010

Похоже, вы ищете способ организовать различные задачи, которые должна выполнять каждая страница. В этом случае взгляните на шаблон MVC . Он предоставляет простой способ разделения доступа к данным (модели) и способа представления / представления информации (представления).

Вы можете легко сопоставить страницы с функциями. Если вы храните информацию в массиве сопоставленных значений, а затем используете функцию для сравнения запрошенного URL-адреса с каждым из URL-адресов в массиве. Такой массив может выглядеть так:

$urls = array(
    '/' => 'index',
    '/aboutus/' => 'aboutUs',
);

В нескольких статьях обсуждается, как реализовать это в PHP за пару часов. Эта статья - очень простое руководство. Я не являюсь поклонником их использования шаблона реестра, но чтение должно предоставить вам достаточно информации о том, как вы можете реализовать его самостоятельно.

0 голосов
/ 16 мая 2010

Все, что вам здесь нужно, это архитектура MVC, с одним классом Controller, связанным с каждым «модулем».

Если вы не против использования фреймворка, перейдите на Zend MVC

Это позволяет вам иметь следующий принцип:

  • URL-адрес, подобный следующему: http://yoursite.com/my-module/edit
  • Более или менее автоматически вызовет метод editAction в классе MyModuleController .
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...