Нет лучших практик, и это одно из мест в PHP-проектах, где вещи быстро сходят с рельсов с большим количеством отдельных файлов вне структуры контроллера. Проверьте свои документы по фреймворкам, чтобы узнать, предлагают ли они какие-либо советы в этой области, поскольку это все более распространенный способ создания приложений.
Лучший способ, которым я видел это в дикой природе, - это обрабатывать ajax-запрос, как любой другой запрос в MVC. Создайте действие контроллера для вашего запроса. В зависимости от размера проекта / личных предпочтений, вы можете создать отдельные логические контроллеры для запросов AJAX или сгруппировать ваши действия AJAX с существующими контроллерами (опционально присвоив имени действия префикс или суффикс «AJAX»)
class IndexController extends BaseMvcController{
public function indexAction(){}
public function ajaxuserinfoAction(){}
}
// или
class AjaxController extends BaseMvcController{
public function userinfoAction(){}
}
Это все еще оставляет, как обрабатывать часть представления вашего запроса. Я стал большим поклонником создания объектов stdClass и затем использования echo json_encode($object);
с header('Content-Type: application/json');
.
Если ваш MVC-фреймворк поддерживает подавление макета вашего сайта, вы можете встроить выходные ответы в свои представления. Если нет, то добавление простой вспомогательной функции где-то вроде этого будет работать так же хорошо
protected function outputJsonForAjax($object)
{
header('Content-Type: application/json');
echo json_encode($object);
exit;
}