Возможна ли ручная отправка в Zend Framework? - PullRequest
0 голосов
/ 26 ноября 2009

Мне интересно, как я могу вручную запустить выполнение действия контроллера моего приложения MVC. Моя цель - интегрировать вывод html / myController / myAction в другое php-приложение (typo3), используя простое включение. Я думал о том, чтобы вручную создать экземпляр контроллера, вида и макета, чтобы обойти диспетчер. К сожалению, я не могу заставить это работать. Мой текущий подход выглядит так:

// standard bootstrap ... setting up autoloader, database etc.

$layout = new Zend_Layout();
$layout->setLayoutPath(('/application/default/layouts'));
$layout->setLayout('main');
$layout->setContentKey('content');

$view = new Zend_View();

$controller = new IndexController(new Zend_Controller_Request_Http($currenUrl), new Zend_Controller_Response_Http());
$controller->view = $view;
$controller->init();
$controller->hinweisAction();

$layout->content = $view->render();

echo $layout->render();

Создание макета не является проблемой, но становится сложным при создании контроллера. Установка экземпляра представления после вызова конструктора не работает, поскольку представление требуется уже во время создания экземпляра.

Каким был бы «правильный» путь для такого сценария? Может быть, реализовать простой пользовательский диспетчер, который использует предопределенный контроллер и имена действий от меня?

Greets

Георг Вехтер

Ответы [ 3 ]

2 голосов
/ 27 ноября 2009

Если вы используете Zend_Application, все, что вам нужно сделать, это примерно так:

$application->bootstrap();
$request = new Zend_Controller_Request_Http();
// Set some parameters for request possibly
$controller = $controller = new IndexController($request, new Zend_Controller_Response_Http());

$controller->dispatch('hinweisAction');

Zend_Application позаботится о настройке вашего представления для вас. Вызывающий диспетчер позаботится о помощниках действий, особенно ViewRenderer, который сделает всю грязную работу за вас.

2 голосов
/ 27 ноября 2009

Я бы посоветовал вам посмотреть исходный код Zend_Test_PHPUnit_ControllerTestCase. Это именно то, что вам нужно для запуска тестов с контентом, сгенерированным контроллером. В частности, прочитайте функции bootstrap() и dispatch(). Может быть, вы можете просто скопировать это дословно.

0 голосов
/ 26 ноября 2009

Попробуйте:

$ layout-> content = $ Контроллер-> view-> Render ();

$ view ссылается на локальный экземпляр $ view. Как только вы назначите его для $ controller-> view, любая работа, которую выполняют с ним $ controller-> init () и $ controller-> hinweisAction (), повлияет на представление $ controller->, а не на локальный объект $ view.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...