Я использую MVC в PHP на основе Zend Framework. Это скорее вопрос дизайна. У меня есть контроллер, который имеет пару действий. Эти действия доступны через AJAX с точки зрения контроллера. Действия контроллера, выполнение бизнес-логики путем доступа к данным из функций внутри модели, а также построения или эхо-HTML. Этот HTML возвращается назад для просмотра в ответе AJAX. Мое понимание контроллеров заключается в том, что они вообще не должны содержать HTML. Но, учитывая AJAX в представлениях, я чувствую, что у меня нет выбора, кроме как генерировать HTML на лету в контроллере. Это хороший дизайн? Как я могу улучшить его?Contollers and Views - MVC в Zend Framework
ответ
Для этого нужно два помощника действий. вы можете повторно использовать свои действия для нескольких контекстов с помощью помощников действий ajaxContext или contextSwitch. Переключатель контекста, как правило, более полезен в моем опыте, и он может даже автоматически сериализовать данные, которые вы назначаете для представления в вашем действии для ответов json, поэтому нет необходимости в скрипте вида.
инициализирует переключатель контекста, как это:
class MyController extends Zend_Controller_Action
{
public function init()
{
$contextSwitch = $this->_helper->getHelper('contextSwitch');
$contextSwitch->addActionContext('index', 'json')
->initContext();
}
public function indexAction()
{
$this->view->items = My_Model::fetchAll();
}
}
выше добавит контекст JSON для переключения контекста, и, когда действие вызываются с набором параметров запроса «формат», он будет автоматически сериализуйте содержимое, в этом случае предоставляя json-массив элементов, возвращаемых My_Model :: fetchAll();
Параметр формат может быть либо принят в URL «/ мой/индекс/формат/JSon» или с ПОЛУЧИТЬ запрос «/ мой/индекс? = Формат JSON»
Настоящая магия является то, что в контексте switch также устанавливает соответствующие заголовки для типа ответа, такие как тип содержимого.
Вы даже можете указать свои собственные контексты и заголовки для отправки. Подробнее о переключателе контекста here
Всегда старайтесь оставить любую презентационную логику внутри представления. Я думаю, что правильный подход к дизайну вашего приложения будет что-то вроде:
AjaxController.php:
public function AjaxAction() {
//do some logic
//set content to a variable
}
ajax.phtml:
<p><?php //display the content of the variable setted in the controller ?></p>
Вы можете позже изменить вид или действие отдельно , возможно, даже переосмыслить представление для какого-либо подобного сгенерированного содержимого ajax и т. д. Всегда старайтесь разделить вещи таким образом, то есть способ, которым шаблон MVC предназначен для работы.
Прежде всего, бизнес-логика должна быть в Модели, а не в Контроллере.
Во-вторых, мои AJAX-запросы обычно имеют такого рода формат:
if ($ajax = $this->getRequest()->isXMLHttpRequest()) {
$this->_helper->layout->disableLayout();
};
// then later - if its responding with json:
if ($ajax)
{
$this->_helper->viewRenderer->setNoRender(true);
$this->getResponse()->setHeader('Content-Type', 'text/json');
echo $this->view->json($some_return_values);
return;
}
Также - не забывайте, что вы можете использовать $this->view->render('controller/action.phtml');
захватить вынесенное PHTML в строку, чтобы вернуться через контроллер. Это позволит вам сохранить представление в представлении.
- 1. MVC architechture views and controller
- 2. MVC Tabs and Partial Views
- 3. Zend Framework MVC Design
- 4. Настройка Zend Framework - MVC
- 5. MVC Partial Views, Models and more
- 6. Вход в MVC (Zend Framework)
- 7. MVC Logic, Views and Helpers - Особая история
- 8. MVC Dynamic View Data and Dynamic Views
- 9. ASP.NET MVC C# Beginner - Views and Controller
- 10. MVC Restful routing and returns Views
- 11. Zend Framework 2 без MVC
- 12. zend framework flash messanger message and redirect
- 13. В каких приложениях Zend Framework используется функция/views/filters?
- 14. Конфигурация в Zend Framework
- 15. Правильный способ отправки данных в MVC Views в Zend
- 16. MVC Views and Controllers: повторное создание объектов при отправке формы
- 17. Обслуживание файлов в Zend Framework MVC
- 18. Как достичь MVC в моей Zend Framework
- 19. VIEWs в Entity-Framework?
- 20. ASTNodes And Views
- 21. Zend application and bootstrap as non mvc
- 22. backbone.js, views and routing
- 23. Zend Framework 2 для Zend Framework Newbie
- 24. Использование форм с Zend Framework
- 25. Base Href and Angular Routing and Views
- 26. разница между WebAPI contollers и WCF WebAPI
- 27. Entity Framework - Views vs Tables
- 28. Внедрение MVC с использованием Zend Framework
- 29. обработка ввода с Zend Framework вне MVC
- 30. Zend 2 + Postgresql views - getGeneratedValue()
Почему бы просто не вернуть представление в качестве ответа на запрос AJAX? Это должно быть возможно. –