Zend Framework, MVC, Ajax и Cli/Cron
Я работаю над приложением на основе Zend Framework и инициализирую MVC при загрузке. Теперь я добавляю слой AJAX в приложения, поэтому в действии контроллера я отключаю рендеринг представлений и начинаю подвергать сомнению мой подход к запуску MVC в начальной загрузке. Мне также нужно добавить некоторую поддержку cron/cli в приложение, поэтому мне также нужно остановить рендеринг MVC для этой части. Короче говоря, бывают ситуации (AJAX, Cli, Cron и т. Д.), Когда нам не нужен MVC, но он изначально выполняется как часть начальной загрузки, а затем мы принудительно останавливаем его.
Так что я уверен, что должен быть другой подход (ы), который более благосклонно относится к таким ситуациям, и вместо того, чтобы начинать MVC в начале, мы можем запустить его по дороге прямо перед отправкой вывода клиенту.
2 ответа
Почему вам не нужен MVC для AJAX или CLI? Этот переключатель контекста является причиной, по которой существует MVC: сохраняйте модель и / или контроллер, но используйте другое представление.
Но, возможно, вы могли бы создать другой файл начальной загрузки (вместо index.php), скажем, cli.php и ajax.php, чтобы избежать некоторых вещей, которые вы просто инициализируете для "обычных" запросов (навигация, маршруты, управление компоновкой + просмотр, acl, ..). На данный момент я не использую другой файл начальной загрузки, потому что AJAX идеально вписывается в мою текущую структуру (за исключением макета, но для этого есть contextSwitch).
Давайте очень кратко рассмотрим запуск приложения в index.php:
$application->bootstrap() // here you load and configure your resources
->run(); // here you launch the request handling, dispatching, mvc, etc..
когда вы хотите использовать свое приложение в контексте CLI, вам нужно будет только загрузить его, а не запускать приложение MVC. Просто опустите ->run()
,
Конечно, вы можете просто инициализировать только те ресурсы, которые вам нужны в вашем скрипте:
$app->bootstrap('cachemanager')->bootstrap('db');
Для Ajax, если вам нужны контроллеры и действия, вам нужно то, что вы называете "MVC". Это недавний вопрос SO, где вы можете найти более подробную информацию о концепции "контроллеров Ajax".