ZF2 установить пользовательский URL/ маршрут и вид

Я использую ZF2 в качестве компонента другого приложения.

Я ищу способ установить URL и шаблон просмотра приложения между вызовами init() и run(). Я хотел бы, чтобы можно было либо изменить объекты запроса и ответа, либо создать их заново с другим URL-адресом.

В настоящее время я использую ob_start() и ob_get_clean() и шаблон представления, который просто генерирует the_content, тем самым внедряя вывод ZF2 в страницу другого приложения.

Любые предложения по методологии будут оценены.

2 ответа

В Module.php вы можете прикрепить событие к менеджеру событий для примера.

class Module
{
    public function onBootstrap($e)
    {
        $eventManager        = $e->getApplication()->getEventManager();
        $serviceManager      = $e->getApplication()->getServiceManager();
        $eventManager->attach(MvcEvent::EVENT_ROUTE, function($e) use ($eventManager, $serviceManager){
            // your code here
        }, -1000);
    }
}

Или ваше действие в контроллере может отправить другое действие и получить результат

в действии метод:

$return = $this->forward()->dispatch('controllerName', array('action' => 'actionName', 'param1' => 'value', ...));

Следующий код внутри другого приложения можно использовать для установки вызывающего URL-адреса и шаблона просмотра из-за пределов приложения:

$bootstrap = \Zend\Mvc\Application::init( include( '/zf2/config/application.config.php' ) );
$event = $bootstrap->getMvcEvent( );

/* Modify the event with a custom request. */
$request = new \Zend\Http\Request( );
$request->setMethod( \Zend\Http\Request::METHOD_GET );
$request->setUri( $custom_url );
$event->setRequest( $request );

/* Modify the view. */
$event->getViewModel()->setTemplate('layout/custom-layout');

ob_start( );
$bootstrap->run( );
$html = ob_get_clean( );
Другие вопросы по тегам