Этим летом я установил две разные системы PHP.Каждый использует два разных метода:
Метод № 1: один файл PHP на задачу
Этот метод требует, чтобы для каждой основной задачи был создан файл PHP
.Например, мой скрипт загрузки будет доступен через http://www.domain.com/upload.php
.На upload.php
создаются экземпляры и используются класс «контроллер» и «представление».Например, upload.php
может выглядеть примерно так:
<?php
require_once PATH_LIBRARY . 'control/Uploader.class.php';
require_once PATH_LIBRARY . 'view/UploaderPage.class.php';
$uploader = new Uploader();
$uploader->setView(new UploaderPage());
$uploader->init();
?>
В приведенном выше сценарии, если бы я хотел вызвать другой сценарий, я просто перенаправил бы и добавил необходимые закодированные переменные URL (header('Location: edit_details.php?image_id=456');
).
Метод № 2: Основной index.php
файл, который обрабатывает все запросы
Этот метод не требует создания файла PHP
для каждого основногозадача.Вместо этого каждый класс «контроллера», который будет использоваться в системе, зарегистрирован на index.php
с уникальным классом, который я называю Router
.Маршрутизатор решает, является ли указанный Контроллер законным или недопустимым и действует соответствующим образом (направляет браузер на правильный контроллер).Например, упрощенная версия сценария index.php
:
<?php
require_once 'bootstrap.inc';
require_once PATH_LIBRARY . 'router/Router.class.php';
$router = new Router();
$router->register('Uploader', PATH_LIBRARY . 'control/Uploader.class.php');
$router->register('DetailsEditor', PATH_LIBRARY . 'control/DetailsEditor.class.php');
$router->route();
?>
Таким образом, каждое действие происходит в index.php
.Нет необходимости в большом количестве файлов, которые не делают больше ничего, что создает конкретный вид и класс контроллера.НО, если вы хотите вызвать скрипт / класс A из скрипта / класса B, то вам нужно передать имя класса контроллера по URL: header('Location: index.php?controller=DetailsEditor&image_id=456')
.
Пока что мне не очень нравитсятот факт, что мне нужно включить имя контроллера в URL.Я чувствую, что это подвергает слишком много моей базовой системы конечному пользователю.Но мне нравится тот факт, что я могу зарегистрировать все классы контроллеров на одной странице.В основном, я не знаю, безопасно ли выставлять имя контроллера.Еще одно неудобство заключается в том, что, если я хочу вызвать скрипт через POST-запросы, мне нужно включить скрытый ввод, который указывает требуемый класс контроллера (например, <input type="hidden" name="controller" value="DetailsEditor" />
).
Надеюсь, этого достаточно дляпродолжать.Я просто нервничаю из-за того, что второй метод на самом деле не будет мне полезен в предстоящие месяцы.У меня скоро появится небольшое окно для выбора того или другого.
Спасибо.